ふだん使いのPCで始めるJUnitテストの分散実行
エンタープライズの現場でJUnitテストを書きましょうとプロジェクトを進めてみると、大量のテストコードが出来上がって、CIのジョブが1時間ちかくかかるようになってしまった、なんてことを聞いたことがあります。
これらを速くしようとテストコードをチューニングしたり、ジョブを分けてスレーブで実行しようとしたりするのはわりと骨の折れることです。またスレーブマシンもたくさん用意しなくてはならず、受託開発においてはそんな予算は無いことが多いので、-Dmaven.test.skip=true
というクスリに手を染めてしまうプロジェクトもあるようです。
そんなプロジェクト向けに、準備が非常に簡単で安価に分散実行できてしまうTestStreamerなるものを開発しました。
といっても作ったのはわりと昔です。
http://www.slideshare.net/kawasima/test-streamer
以前は、クライアントをAppletで作っていたのですが、このご時世厳しくなってきたので、JavaFXで作り直した次第です。
特長
TestStreamerはクライアント/サーバ型で動作します。
テストを実行するクライアントマシンが、ふだん使いのみんなのPCであるところが最大の特長です。また、そういうふだん使いのPCがクライアントのため、テスト対象やテストコードを事前にインストールすることは困難です。そのためWebSocketClassLoaderという、JavaのクラスローディングをWebSocketでおこなう仕組みを開発し、事前にデプロイするのではなくオンデマンドで必要なクラスのみロードするようにしています。
使ってみる
TestStreamerサーバの起動
TestStreamerクライアントのセットアップ
クライアントマシンには、ロゴ横の「client」リンクを押して、そこから以下の2通りのどちらかでクライアントアプリを動かします。
- TestStreamerサーバからjarをダウンロードして実行する
- TestStreamerサーバからJNLPをダウンロードしてWeb Startとして実行する
2の場合は、クライアントのjarファイルに署名が必要となるので、今のご時世、現実的には1の方法かもしれません。
クライアントを起動すると、以下のようなウィンドウが立ち上がり、自動的にTestStreamerサーバに接続されます。クライアントのセットアップはこれだけです。
テストを実行する
このTestStreamerでの分散テスト実行するための環境設定も簡単です。Maven標準のテストプラグインであるsurefireからの切り替えを例にとって示します。
pom.xmlに以下のようなプロファイルを足すだけです。あとはMaven実行時に -P test-streamer
を付けてあげれば、surefireで実行されていたものがTestStreamerで分散実行されるようになります。
<profile>
<id>test-streamer</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>net.unit8.teststreamer</groupId>
<artifactId>test-streamer-maven-plugin</artifactId>
<version>0.1.0</version>
<configuration>
<testStreamerUrl>http://test-streamer.local:5000</testStreamerUrl>
</configuration>
<executions>
<execution>
<goals><goal>submit</goal></goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
そうすると、Webコンソール上で、実行中の状態も見ることができるようになります。
クライアントには順次テスト実行リクエストが飛んできて、1つずつ処理されていきます。
テスト実行結果もWebコンソールで見ることができます。
テストケース別の結果 | Failしたテストのスタックトレース |
---|---|
maven実行結果も、surefireと同じように返ります。
まとめ
分散実行となると、すぐにクラウドに頭がとびがちですが、オフィス内にCPUパワーが有り余っている大企業は多いのではないでしょうか。TestStreamerはそういうマシンを有効活用して、簡単にテストを分散実行できます。
同じような境遇の方は、試してみていただけると幸いです。
Author And Source
この問題について(ふだん使いのPCで始めるJUnitテストの分散実行), 我々は、より多くの情報をここで見つけました https://qiita.com/kawasima/items/2d0a2eb7aa131376ad02著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .