bancer/paratest-databases-factory

为并行运行PHP单元测试创建测试数据库

0.9.2 2021-11-06 13:24 UTC

This package is auto-updated.

Last update: 2024-09-06 19:54:09 UTC


README

此库提供了一种方便的方法来自动创建测试数据库,并应在并行运行PHP单元测试时使用。它与paratest库兼容 - https://github.com/paratestphp/paratest

如何安装

执行 composer require bancer/paratest-databases-factorycomposer require bancer/paratest-databases-factory --update-no-dev 使用composer安装。

如何使用

在bootstrap.php中创建测试数据库

use Bancer\ParatestDatabasesFactory\DatabasesFactory;
...
(new DatabasesFactory())
    ->setDsn(getenv('pf_dsn'))
    ->setUsername(getenv('pf_user'))
    ->setPassword(getenv('pf_pass'))
    ->createDatabase('pf_test');

这将创建pf_test1、pf_test2等测试数据库,当单元测试开始时。数据库名称和凭据只是示例。要求用户有权连接到数据库并被授予创建数据库的权限。

如果尚未完成,请在phpunit.xml文件中加载bootstrap文件,例如:<phpunit ... bootstrap="./bootstrap.php"/>

创建数据库用户并授权创建数据库的权限

CREATE USER 'pf_user'@'%' IDENTIFIED BY 'your_password';
GRANT CREATE ON *.* TO 'pf_user'@'%';
CREATE DATABASE pf_test;
GRANT SELECT ON `pf_test`.* TO 'pf_user'@'%';

将数据库凭据添加到phpunit.xml中

<env name="pf_dsn" value="mysql:dbname=pf_test;host=localhost"/>
<env name="pf_user" value="pf_user"/>
<env name="pf_pass" value="your_password"/>

通过追加 TEST_TOKEN 环境变量值来调整您的数据库配置。例如:

if (getenv('TEST_TOKEN') !== false) { // Using paratest
    $databaseName .= getenv('TEST_TOKEN');
}

有两种方法可以在并行中运行phpunit测试:

  1. 通过使用纯phpunit。

    • 优点
      • 无第三方库依赖。
      • 可以与任何版本的PHP和PHPUnit实现。
    • 缺点
      • 设置复杂。
    • 如何做
      • 将单元测试拆分为两个或更多个测试套件,这些测试套件运行时间大致相同。以下示例是两个名为ci-1和ci-2的测试套件。
      • 确保已启用shell的作业控制或执行控制台中的set -m
      • 执行 TEST_TOKEN=1 Vendor/bin/phpunit --testsuite ci-1 &> /tmp/ci-1.out && TEST_TOKEN=2 Vendor/bin/phpunit --testsuite ci-2 & fg 或类似命令。这设置了TEST_TOKEN环境变量,在后台进程中启动第一个测试套件并将其输出写入tmp文件夹中的文件,启动第二个测试套件并将输出带到前台。这样,两个测试套件并行运行。最后运行最慢的测试套件。
      • 执行 cat /tmp/ci-1.out 将第一个测试套件的结果打印到控制台。
      • 执行 grep "OK" /tmp/ci-1.out 或类似命令以检查第一个测试套件是否成功完成。
  2. 通过使用paratest库。

    • 优点
      • 设置简单。
    • 缺点
      • 依赖第三方库。
      • 由于Paratest仅积极支持最新版本的PHP,因此并非所有项目都可以使用它。
    • 如何做