peridot-php/peridot-concurrency

peridot bdd 框架的并发规范运行器

1.1.0 2015-02-24 16:37 UTC

This package is not auto-updated.

Last update: 2024-09-14 16:18:54 UTC


README

让我们快速运行我们的规范!

Build Status HHVM Status Scrutinizer Code Quality Coverage Status

此插件包含一个运行器和报告器,允许您并发运行 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);
};

注册插件后,您的使用界面应该有几个新的选项

Peridot concurrency usage

--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 concurrency suite run serially

之后

Peridot concurrency suite run concurrently

在测试的机器上,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

贡献

并发处理可能会比较棘手。如果您有任何问题或想法,请告诉我们!我们始终欢迎拉取请求。