peridot-php / peridot-concurrency
peridot bdd 框架的并发规范运行器
Requires
- peridot-php/peridot: ~1.15
Requires (Dev)
- peridot-php/leo: ~1.3.0
- peridot-php/peridot-dot-reporter: ~1.0
- peridot-php/peridot-prophecy-plugin: ~1.1
- phpunit/php-code-coverage: ~2.0
- satooshi/php-coveralls: 0.6.1.*
This package is not auto-updated.
Last update: 2024-09-14 16:18:54 UTC
README
让我们快速运行我们的规范!
此插件包含一个运行器和报告器,允许您并发运行 Peridot 测试!是否有大量缓慢的 WebDriver 测试?或者大量数据库测试?厌倦了等待?为什么不同时运行它们呢?!?
它是如何工作的?
peridot-concurrency 利用传统的非阻塞 IO 来并发运行我们的测试。此插件根据命令行上指定的数量创建 N
个工作进程,每个工作进程在测试结果可用时与主进程通信。负责轮询工作进程的函数是 stream_select 函数。
使用方法
您可以通过 composer 安装
composer require --dev peridot-php/peridot-concurrency
peridot-concurreny 可以像任何 Peridot 扩展一样添加到您的测试工作流程中 - 通过 peridot.php
文件
use Evenement\EventEmitterInterface; use Peridot\Concurrency\ConcurrencyPlugin; return function (EventEmitterInterface $emitter) { $concurrency = new ConcurrencyPlugin($emitter); };
注册插件后,您的使用界面应该有几个新的选项
--concurrent
这是如何通知 Peridot 并发运行您的测试。这将启动由新的 -p
选项指定的那么多工作进程(默认为 5)。除了启动工作进程外,它还将覆盖 Peridot 报告器以使用此插件提供的 ConcurrentReporter
。此报告器可以防止输出被混乱,并提供有用的信息,例如每个测试套件文件运行所需的时间。
--processes (-p)
此新选项可用于指定要启动的工作进程数。默认为 5,最佳值会因机器而异。
操作系统支持
由于 Windows 操作系统的限制,peridot-concurreny 插件目前不支持。这与 stream_select
函数无法与 Windows 操作系统上的 proc_open
返回的文件描述符一起工作有关。
stream_select
目前是此类工作最有效的“即插即用”解决方案,但请期待一个在 Windows 上工作的“每个测试一个进程”运行器,以及一个基于 pthreads 的运行器,其中扩展可用。
性能
创建进程有一些开销,因此并非每个套件都能从并发使用中受益。例如,如果您有一个运行时间为 68ms 的套件,那么很难改进它。但是!到目前为止运行的测试套件已经注意到显著的加速,甚至是在单元级别。
peridot-concurrency 并发运行它的测试
之前
之后
在测试的机器上,Peridot 的测试套件仅用了 1/4 的时间!您可以通过查看 peridot-concurrency 的 travis 构建 来看到更快的运行时间。
这里要注意的是,这些只是单元测试套件。运行大型集成或功能测试套件节省的时间会更明显(示例即将推出)。
微调
如前所述,要使用的确切进程数会因机器而异。尝试实验不同的进程数以获得 peridot-concurrency 的最佳速度。
测试令牌
每个工作进程都有自己的唯一 ID,并以环境变量 PERIDOT_TEST_TOKEN
的形式公开。这可能有助于基于此令牌创建唯一的资源。例如
$id = getenv('PERIDOT_TEST_TOKEN'); $dbname = "mydb_$id"; //create and seed DB identified by $dbname //do database things
贡献
并发处理可能会比较棘手。如果您有任何问题或想法,请告诉我们!我们始终欢迎拉取请求。