bancer / paratest-databases-factory
为并行运行PHP单元测试创建测试数据库
0.9.2
2021-11-06 13:24 UTC
Requires
- php: >=5.6
Requires (Dev)
- phpunit/phpunit: ^9.5
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-factory
或 composer 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测试:
-
通过使用纯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
或类似命令以检查第一个测试套件是否成功完成。
- 优点
-
通过使用paratest库。
- 优点
- 设置简单。
- 缺点
- 依赖第三方库。
- 由于Paratest仅积极支持最新版本的PHP,因此并非所有项目都可以使用它。
- 如何做
- 安装Paratest并遵循他们的说明 - https://github.com/paratestphp/paratest。
- 优点