0

我正在尝试从我的 gem 中并行运行黄瓜场景。从其他答案中,我发现我可以使用以下方法执行黄瓜场景:

runtime = Cucumber::Runtime.new
runtime.load_programming_language('rb')
@result = Cucumber::Cli::Main.new(['features\my_feature:20']).execute!(runtime)

当我一次运行一个场景时,上面的代码运行良好,但是当我使用赛璐珞或桃子之类的东西并行运行它们时,我得到了不明确的步骤错误。似乎我的步骤定义正在为每个并行测试加载,黄瓜认为我有多个相同类型的步骤定义。

有什么想法可以并行运行这些东西吗?

4

1 回答 1

0

Cucumber 不是线程安全的。每个场景都必须在具有自己的黄瓜运行时的单独线程中运行。赛璐珞可能会尝试同时在同一个演员身上运行多个场景。

有一个名为cukeforker的项目可以并行运行场景,但它只支持 linux 和 osx 上的 mri。它为每个场景派生一个子进程。

我创建了一个名为jcukeforker的 cukeforker 分支,它在 linux 上支持 mri 和 jruby。Jcukeforker 会将场景分发给子流程。子流程被重用。使用子进程而不是线程来保证每个测试都有自己的全局变量。在需要设置 DISPLAY 变量的 vncserver 上运行子进程时,这一点很重要。

于 2014-08-09T20:36:15.407 回答