与JRuby并行运行Cukes

时间:2014-06-23 23:00:43

标签: cucumber jruby celluloid

我试图从我的宝石内部并行运行黄瓜场景。从其他答案中,我发现我可以使用以下方法执行黄瓜方案:

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

当我一次运行一个场景时,上面的代码工作正常,但当我使用像Celluloid或Peach这样的并行运行它时,我得到了Ambiguous Step错误。似乎我的步骤定义正在为每个并行测试加载,而且黄瓜认为我有多个相同类型的步骤定义。

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

1 个答案:

答案 0 :(得分:0)

黄瓜不是线程安全的。每个场景必须在一个单独的线程中运行,并且具有自己的黄瓜运行时。赛璐珞可能会尝试同时在同一个角色上运行多个场景。

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

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