Codeception DB module addon that helps you to tune database populations. So for a test you could load only needed tables or rows. As a result it dramatically reduces the total execution time.
- PHP 8.0 or higher.
- Codeception 5.0 or higher.
- Codeception Module DB 3.0 or higher.
The package could be installed with composer:
composer require vjik/codeception-db-populator --devEnable module Db and DatabasePopulator addon in the suite:
modules:
  enabled:
    - Db:
        dsn: 'mysql:host=%DB_HOST%;dbname=%DB_NAME%'
        user: '%DB_USERNAME%'
        password: '%DB_PASSWORD%'
    - Vjik\Codeception\DatabasePopulator\Module:
        dumpsPath: 'tests/_data/dumps'
        rowsPath: 'tests/_data/rows'Create SQL dumps that contains a record of the table structure and/or the data for use in tests.
Put dumps into path, specified in options (for example, tests/_data/dumps).
Create row sets for populate database tables. Row sets is PHP file that return array in format table => rows.
For example:
<?php
return [
    'author' => [
        [
            'id' => 1,
            'name' => 'Ivan',
        ],
        [
            'id' => 2,
            'name' => 'Petr',
        ],
    ],
    'post' => [
        [
            'id' => 1,
            'author_id' => 2,
            'name' => 'First post',
        ],
        [
            'id' => 2,
            'author_id' => 2,
            'name' => 'My history',
        ],
    ],
];You can get structure, similar to this:
tests/
  _data/
    dumps/
      user-management.sql
      blog.sql
      catalog.sql
    rows/
      users.php
      authors.php
      blog-categories.php
      posts-with-categories.php
Load dumps and row sets in your tests:
final class BlogTest extends Unit
{
    public function testCreatePost(): void
    {
        $this->tester->loadDump('blog');
        $this->tester->loadRows('authors');
        ...
    }
}Load the specified dump(s) to database. Before loading the dump, the database is cleaned.
$I->loadDump('blog'); // load one dump
$I->loadDump('blog', 'catalog'); // load several dumpsLoad the specified row set(s) to database.
$I->loadRows('posts'); // load one set
$I->loadRows('users', 'comments'); // load several sets- dumpsPath(required) — relative path to directory with dumps (for example,- tests/_dump).
- rowsPath(required) — relative path to directory with row sets (for example,- tests/_rows).
- preloadDump— dump(s) for preload before run suite.
- preloadRows— row set(s) for preload before run suite.
The package is tested with Codeception. For tests need MySQL database with configuration:
- host: 127.0.0.1
- name: db_test
- user: root
- password: root
To run tests:
./vendor/bin/codecept runThe code is statically analyzed with Psalm. To run static analysis:
./vendor/bin/psalmThe Database Populator for Codeception DB Module is free software. It is released under the terms of the BSD License. Please see LICENSE for more information.
