Cucumber 与JRuby并行运行Cukes

Cucumber 与JRuby并行运行Cukes,cucumber,jruby,celluloid,Cucumber,Jruby,Celluloid,我试着从我的宝石里并行运行黄瓜场景。从其他答案中,我发现我可以通过以下方式执行cucumber场景: runtime = Cucumber::Runtime.new runtime.load_programming_language('rb') @result = Cucumber::Cli::Main.new(['features\my_feature:20']).execute!(runtime) 当我一次运行一个场景时,上面的代码工作得很好,但是当我使用赛璐珞或桃子之类的东西并行运行它们

我试着从我的宝石里并行运行黄瓜场景。从其他答案中,我发现我可以通过以下方式执行cucumber场景:

runtime = Cucumber::Runtime.new
runtime.load_programming_language('rb')
@result = Cucumber::Cli::Main.new(['features\my_feature:20']).execute!(runtime)
当我一次运行一个场景时,上面的代码工作得很好,但是当我使用赛璐珞或桃子之类的东西并行运行它们时,我会得到不明确的步骤错误。似乎我的步骤定义正在为每个并行测试加载,cucumber认为我有多个相同类型的步骤定义


你知道我如何并行处理这些事情吗

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

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

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