测试使用parallel_tests在运行过程中被杀死

时间:2013-12-08 20:48:55

标签: ruby-on-rails testing rspec parallel-processing

为了让我们的测试运行得更快,我决定使用并行测试。 https://github.com/grosser/parallel_tests

然而,像往常一样,这并非没有问题。测试在结束前被杀死了。

...杀死。

请继续阅读,看看我是如何解决这个问题的。

1 个答案:

答案 0 :(得分:1)

经过多次故障排除后,我必须准确了解发生了什么,或者至少知道parallel_tests如何尝试运行我的测试。

Parallel_tests为每个核心创建一个数据库。因此,如果我有4个可用核心,它将创建4个测试dbs。然后,所有测试均匀分布在核心之间,并使用自己的db执行。

首先,我没有使用正确的命令来设置必要的dbs。以下是对我有用的订单。

鉴于您的database.yml看起来像这样

development:
  adapter: mysql2
  encoding: utf8
  database: homestars_dev
  username: root
  password:
test: &test
  adapter: mysql2
  encoding: utf8
  database: homestars_test
  username: root
  password:

在database.yml中创建dbs并在dev db中加载模式/结构

rake db:setup 

根据可用核心数创建测试dbs

rake parallel:create

将架构从dev db复制到每个新创建的测试数据库

rake parallel:prepare

播种每个测试数据库

rake parallel:seed

运行测试

rake parallel:rspec

有了这个,parallel_test就开始正确地做了!但是,仍有一个问题导致测试失败。

我使用类似http://ariejan.net/2011/09/24/rspec-speed-up-by-tweaking-ruby-garbage-collection/

的方法实现了GC延迟

我把它调整为每10秒运行一次。

出于某种原因,10秒是每个核心杀死测试所需的时间!所以我去除了启用GC hack的行。 (通过这样做,GC应该仍然在每次测试后运行)

出于某种原因,这样做了!虽然我仍然无法理解为什么会这样,但我很高兴能够找到解决方案并更好地理解问题/解决方案。

带走课程:确保在运行测试之前正确设置了dbs,不要使用GC黑客来延迟它(至少在我们找到它杀死进程的原因之前)

希望能帮助某人,如果您有任何进一步的信息,请加入!