Pluginのテストを自動化するには(その4-1:eclipse-Automated-Testsの中を見てみる)
さて、今日はeclipse-Automated-Testsを動かしてみるところをやってみました。
必要なもの
ちょっと前に触れましたが、R-3.3.1.1のダウンロードサイトはこちらになります。また、直後でEclipse-SDKも必要になりますので、一緒に落としてください。
テストを実行してみる
中身を解凍してみました。以下がファイルの一覧です。
eclipse-testing/ eclipse-testing/label.properties eclipse-testing/test.properties eclipse-testing/org.eclipse.platform.doc.isv.javadoc.txt eclipse-testing/org.eclipse.jdt.doc.isv.javadoc.txt eclipse-testing/org.eclipse.jdt.apt.javadoc.txt eclipse-testing/org.eclipse.pde.doc.user.javadoc.txt eclipse-testing/testframework.html eclipse-testing/runtests eclipse-testing/test.xml eclipse-testing/readme.html eclipse-testing/runtests.bat eclipse-testing/eclipse-junit-tests-M20071023-1652.zip
runtestsというファイルがテストを実行するためのスクリプトですが、このスクリプトの中ではテスト対象のEclipse-SDKを解凍するように書かれています。解凍するファイル名の対象がEclipse3.3.1.1の場合は『eclipse-SDK-M20071023-1652-*.zip』でなければなりません。先ほど落としてきたEclipse-SDKを解凍後のeclipse-testingの中へコピーし、eclipse-SDK-M20071023-1652-*.zipへ名前を変更した後にruntests(Windows環境の場合はruntests.bat)を実行してみると下記のusageが表示されます。
usage: ./runtests -os <osType> -ws <windowingSystemType> -arch <architecture> [-noclean] [<test target>][-properties <path>]
それじゃ試しに動かしてみましょうか。僕の環境は現在X86系Ubuntu Linux 7.10上で動かしているので下記のようにコンソールに入力してみました。
./runtests -os linux -ws gtk -arch x86 ui
するとものすごい勢いでEclipseのワークベンチがいくつか立ち上がり、画面が描画されていきます。最後に指定した「ui」がテストターゲットですが、EclipseのUIプラグインに対するテストを指定しました。なのでViewやPerspectiveがどんどん書き換えるテストが実行されます。パフォーマンスも同時に計測されているのです。
ここで指定した-osや-ws,-archはOS,WindowSystem,CPUのアーキテクチャを指定します。上記の例はx86系CPUで動作させているUbuntu Linux 7.10だから
-os linux -ws gtk -arch x86
と指定していました。
Windows XPの場合はバッチファイルの中でデフォルトが指定されているので不要です。-nocleanオプションや-propertiesオプション、そしてその他のテストターゲットについてはeclipse-testing/readme.htmlに書かれているので見てみてください。
runtestsの中身を見てみる
このスクリプトを見てみましょう。runtestsもruntests.batも環境が違うのですが、結局同じ事をしています。ダウンロードしてきたEclipse-SDKを解凍し、その中にあるランチャーを使ってtest.xmlにかかれたAntスクリプトを実行しているのです。Antスクリプトの実行をしている行は下記の行です。
非Windowsの場合(runtests) $vmcmd -Dosgi.os=$os -Dosgi.ws=$ws -Dosgi.arch=$arch -jar $launcher -data workspace -application org.eclipse.ant.core.antRunner -file `pwd`/test.xml $tests -Dws=$ws -Dos=$os -Darch=$arch -D$installmode=true $properties -logger org.apache.tools.ant.DefaultLogger Windowsの場合(runtests.bat) %vmcmd% -Dosgi.os=%os% -Dosgi.ws=%ws% -Dosgi.arch=%arch% -jar eclipse\plugins\%launcher-jar% -data workspace -application org.eclipse.ant.core.antRunner -file test.xml %tests% -Dws=%ws% -Dos=%os% -Darch=%arch% -D%installmode%=true %properties% -logger org.apache.tools.ant.DefaultLogger
この中の『-application org.eclipse.ant.core.antRunner』がEclipse上に配置されているAntの実行をするためのアプリケーションになります。おや?普通のAntではダメなのでしょうか。えぇ、通常のAntではテストの自動化やビルドの自動化はできません。そもそもプラグイン同士のクラスローダーの解決をするためにはOSGiフレームワーク上で稼働している必要があります。また、Eclipse上のAntでは独自のタスクが登録されているのです。test.xmlが実行されているのがお分かりいただけたのではないかとおもいます。