Hです。

桜が散ったと思ったら、汗ばむくらいの日が続いています。
こういう過ごしやすい時期というのはあまり長くないので、会社にこもって仕事をしているのはもったいないです(笑)

ですので、Jenkinsで動かしている自動テストが速く終わるよう、手を入れました。
Webシステムを相手にしているので、テストはSelenium – Web Browser AutomationRSpec: Behaviour Driven Development for Rubyで作ってあります。RSpecを並列実行する方法はいくつかありますが、今回はparallel_tests ではなく test-queue に乗り換えようと思う – Thanks Driven Lifeという記事を参考に、GitHub – tmm1/test-queue: parallel test runner for CI environmentsを使ってみました。

テストは多くなっていきますので、テスト対象ごとにファイルを分けてあります。ユーザ登録のテストを行った後、そのテストで登録したユーザを使って各ページのテストを行っていました。テストの順番が重要になるので、ファイル名の頭に番号を付けて、実行順序をコントロールしていました。

並列実行ですと、どの順番でテストを行うかはツールがコントロールすることになります。ですので、どんな順番でもテストができるよう、テストの書き換えから行いました。テストで使用するユーザは、各テストファイル内で登録するようにします。それ以外にも、他のテストの結果を利用しているような部分はすべて修正です。

既にSelenium-Gridを構築してあるので、test-queueで実行するよう、Jenkinsのjobを書き換えて、終了!
とはならなかったので、ここからが本番です。どうも、並列実行した結果のうちの、1台分の結果しかJenkinsが集計してくれないようです。
原因を突き止めて修正するのが筋ですが、勝手に作っている自動テストですし、早く終わらせたいので、適当にscriptを書いて逃げます。

#!/bin/bash
report_dir="spec/reports"
reports="${report_dir}/*.xml"

rm -f $report_dir/report.xml

report_first=$(ls -1 $reports | head -1)
workfile=/tmp/report.$$
testcase=$(cat $reports | grep testcase | wc -l)
head -4 $report_first |sed "s/tests=\"[^\"]*\"/tests=\"$testcase\"/" > $workfile
cat $reports | sed -e '/^/d' -e '//d' >> $workfile
echo '' >> $workfile
mv $workfile ${report_dir}/report.xml


こんな感じでテスト結果をまとめたファイルを生成して、それをJenkinsに集計させます。

これで、並列実行しても、全てのテスト結果を集計してくれるようになりました。Jenkinsで複数のテスト結果を集計してくれないという現象はググっても見つからなかったので、梅雨になって外に出たくなくなったら、原因調査をしてみるかもしれません。

関連記事

ページ上部へ戻る