为了让我们的测试运行得更快,我决定使用并行测试。 https://github.com/grosser/parallel_tests
然而,像往常一样,这并非没有问题。测试在结束前被杀死了。
...杀死。
请继续阅读,看看我是如何解决这个问题的。
答案 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黑客来延迟它(至少在我们找到它杀死进程的原因之前)
希望能帮助某人,如果您有任何进一步的信息,请加入!