複数 prove して TAP::Harness::JUnit が出力する結果を merge する

のは結構簡単で、もともと prove -lv -j5 --harness TAP::Harness::JUnit t をした時に、 TAP::Harness::JUnit が出力する xml ファイルは -j しててもちゃんと出力される。

具体的には

<?xml version='1.0' encoding='utf-8'?>
<testsuites>
  <testsuite>
....
  </testsuite>
</testsuites>

こんな感じ。 例えば複数環境とかで prove して jenkins で一つにまとめて結果を出したい時は、こんな感じの wrapper を書けば良さそう

# t/**/* を投げる環境分に split する
# 複数環境に prove を投げる
# ( JUNIT_OUTPUT_FILE を指定するとその名前で作れる )
# 出力した xml を受け取る
# それぞれの xml の <?xml version='1.0' encoding='utf-8'?>, <testsuites>, </testsuites> を削除して連結
# 連結された前後に <?xml version='1.0' encoding='utf-8'?>, <testsuites>, </testsuites> を追加
# jenkins で指定した xml の名前で生成する
# 失敗した時は exit(1) とかする ( jenkins で実行される shell script が set -e されてるからちゃんとそこで終わらせるために )

今回は1環境で prove ... で一定以上並列度をあげても cpu を深淵な理由で使ってくれなかったので複数 prove を走らせて結果を merge した次第です。