我们使用Travis CI在git上维护我们的项目。这里的问题是特拉维斯我们有2个进程运行规范的随机选择,各有不同的种子数,现在时有故障,我尝试运行:Rspec无法重现失败,即使使用最小的对分命令
- 与种子数
- 确切规格没有种子数的确切规格
- 与种子数
- 与种子数的规范文件和规范文件--bisect
- 规范文件,而无需一个种子数但--bisect
在上面的5个场景中,无论是本地的,还是在调试travis版本时,甚至在ssh上,我发现没有失败,平分总是失败。
同样在一个完全不同的场景中,如果我使用默认的8个进程运行并行:spec,我确实遇到了故障,但是如果我用'rspec'cmd单独运行,则不会失败。
我也试过在本地运行parallel:spec,而在我们应用程序的根目录下的.parallel-spec文件中有--bisect选项。我得到的最低限度的复制命令仍然没有失败。
我在这里错过了什么?这个问题是否与运行多个进程有关,并且必须使用rspec运行最少的重现行?因为目前看来,如果规格在超过1个过程中运行,我永远无法重现失败的规格。另一方面,如果本地我运行rspec --bisect 8小时后,我发现它还没有开始1过程,即使我在macbook pro(但是我们有4k左右的规格)
p.s.我们在轨道上4.2.7.1,红宝石2.3.3和RSpec 3.4.4
感谢
更新:跑平行规范详细,以获得规范秩序,然后跑在一个规范的失败过程中的命令种子编号然后再与种子编号和 - 等分。仍然没有失败。
谢谢。实际上,我昨天只是试着从种子的过程中运行规格,还有另一次种子和二等分,但仍然没有失败,我刚才更新了我的问题中的这一部分。 关于失败,他们是随机的不幸的是,每次我并行运行它们,新的失败,我实际上最初解决了大部分这些随机失败,当我运行规范并行时,一切似乎都崩溃了,只能让我得出一个结论这可能是由于spec文件中的干燥。 – Shalaby
我调查了数据库每个进程看到一个单独的数据库预期。我认为就并行流程而言,每个规范都需要用自己的对象隔离,而不是全局声明对象,并且所有规范都使用这些对象。我将不得不重构可能的所有规格,但我从Bakir关于并行执行的文章中得到了这里:https://www.atlantbh.com/blog/parallel-test-execution/ 现在我不完全共享文件规格但我分享对象。我将不得不测试这个理论并开始重构我猜 – Shalaby
你如何在进程之间共享对象? – meta