Help us understand the problem. What is going on with this article?

ふだん使いのPCで始めるJUnitテストの分散実行

More than 3 years have passed since last update.

エンタープライズの現場でJUnitテストを書きましょうとプロジェクトを進めてみると、大量のテストコードが出来上がって、CIのジョブが1時間ちかくかかるようになってしまった、なんてことを聞いたことがあります。
これらを速くしようとテストコードをチューニングしたり、ジョブを分けてスレーブで実行しようとしたりするのはわりと骨の折れることです。またスレーブマシンもたくさん用意しなくてはならず、受託開発においてはそんな予算は無いことが多いので、-Dmaven.test.skip=trueというクスリに手を染めてしまうプロジェクトもあるようです。

そんなプロジェクト向けに、準備が非常に簡単で安価に分散実行できてしまうTestStreamerなるものを開発しました。

といっても作ったのはわりと昔です。
http://www.slideshare.net/kawasima/test-streamer

以前は、クライアントをAppletで作っていたのですが、このご時世厳しくなってきたので、JavaFXで作り直した次第です。

特長

TestStreamerはクライアント/サーバ型で動作します。

image

テストを実行するクライアントマシンが、ふだん使いのみんなのPCであるところが最大の特長です。また、そういうふだん使いのPCがクライアントのため、テスト対象やテストコードを事前にインストールすることは困難です。そのためWebSocketClassLoaderという、JavaのクラスローディングをWebSocketでおこなう仕組みを開発し、事前にデプロイするのではなくオンデマンドで必要なクラスのみロードするようにしています。

使ってみる

TestStreamerサーバの起動

サーバには以下のようなWebコンソールが付きます。
image

TestStreamerクライアントのセットアップ

クライアントマシンには、ロゴ横の「client」リンクを押して、そこから以下の2通りのどちらかでクライアントアプリを動かします。

  1. TestStreamerサーバからjarをダウンロードして実行する
  2. TestStreamerサーバからJNLPをダウンロードしてWeb Startとして実行する

2の場合は、クライアントのjarファイルに署名が必要となるので、今のご時世、現実的には1の方法かもしれません。

クライアントを起動すると、以下のようなウィンドウが立ち上がり、自動的にTestStreamerサーバに接続されます。クライアントのセットアップはこれだけです。

image

テストを実行する

この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コンソール上で、実行中の状態も見ることができるようになります。
範囲を選択_102.png

クライアントには順次テスト実行リクエストが飛んできて、1つずつ処理されていきます。
範囲を選択_103.png

テスト実行結果もWebコンソールで見ることができます。

テストケース別の結果 Failしたテストのスタックトレース
image image

maven実行結果も、surefireと同じように返ります。

image

まとめ

分散実行となると、すぐにクラウドに頭がとびがちですが、オフィス内にCPUパワーが有り余っている大企業は多いのではないでしょうか。TestStreamerはそういうマシンを有効活用して、簡単にテストを分散実行できます。
同じような境遇の方は、試してみていただけると幸いです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした