test
Jenkins
automation
testing
Jenkinsプラグイン

TestLinkで手動テストと自動テストを統合する : Jenkins編

More than 1 year has passed since last update.

Jenkinsとの統合

TestLinkで手動テストと自動テストを統合する : JUnit編の続きです。

前回はJUnit側で統合させるライブラリを紹介しましたが、実際リグレッションテストやスモークテストとして自動テストを手動テストを併用すると考えると、JenkinsなどのCI/CD環境で実行することが多いと思います。

そのため、自動テストツールでTestLinkと統合するのではなく、Jenkinsで統合させて一括管理するというアプローチも存在し、それを実現するのが、JenkinsのTestLink Pluginです。

TestLink側の準備

前回の設定に加えて1つ追加作業が必要です。

カスタムフィールドの追加と関連づけ

TestLink PluginでTestLinkとJenkinsを統合させるためにはTestLink側に統合させるためのカスタムフィールドを追加しておく必要があります。

前回のJUnitでの統合ではTestLinkの1テストケースにJUnitの1テストメソッドを対応させたので同じように対応させてみましょう。

System - Define Custom Fields - Create で下記のようなカスタムフィールドを定義します。

カスタムフィールド

なお、TestLink Pluginでは、"Test Result Seeking Strategies"で複数の対応関係を定義することができ、TestLinkの1テストケースに対して、JUnitのテストスィート、テストクラス、テストメソッドをそれぞれ対応づけることができます。シナリオテストのバリエーションなどテストメソッド単位としては複数あるが、TestLinkとしては1ケースとして管理したいといった場合、1テストケースに対して1テストクラスを対応づけるという方法もあります。

Test Project - Assign Custom Fields でTest Projectと関連づけます。
テストプロジェクトとの関連づけ

テストケースとテストメソッドの関連づけ

事前に関連づけたいテストコードを作成しておきます。今回はサンプルとしてTestLinkJenkinsIntegrationを使用します。

自動テストのテストメソッドに関連づけたいテストケースのカスタムフィールド"JavaMethod"にJavaDocの形式のメソッド記述(パッケージ名 + クラス名 + メソッド名)の形式でテストメソッドを記述します。今回の場合、JavaMethodは"shiftinc.TestLinkJenkinsIntegrationTest#createUser"となります。

テストメソッドの関連づけ

TestLink側の関連づけはこれで終わりです。

Jenkinsの環境構築

Docker ComposeでJenkinsとSelenium Gridを一気に立ち上げるを参考にDocker Composeを使って、
properties:jenkins-master.env
JENKINS_PLUGINS=swarm git gradle testlink

とすれば、TestLink Pluginがインストールされた状態でJenkinsが起動します。Docker Compose素晴らしいです。

TestLink Pluginの設定

Jenkinsの管理 - システムの設定 - TestLinkで接続するTestLinkの情報を記述します。

TestLink Pluginの設定

最初から入っているURLのサンプルがおかしいのでTestLink側でURLを入れて、"XML-RPC server accepts POST requests only."と返ってくるURLを入れて下さい。

DeveloerKeyはJUnitの時と一緒です。

ジョブでの設定

自動テストを実行するジョブを作成し、"ビルド手順の追加"で"Invoke TestLink"を選択します。

TestLink Configurationに関連づけのために作成したカスタムフィールドを含めた情報を入力します。

TestLink Configration

Test Execution - Single Build Steps - Add actionで実際に起動したいビルドを記述します。"Single Build Steps"ではTestLinkの1ビルドに対して一度だけビルドを実行します。対して、"Iterative Test Build Steps"では1テストケースごとにビルドが実行されます。後者は余り使い道が無さそうですが、テストスィート単位でマッピングしていて、指定したテストスィートのみのビルドを個別に実行したいというような目的には使えそうかなと思います。

Test Execution

最後に、Result Seeking Strategy - Add strategyで実行した自動テストのログからどのようにTestLinkのテストケースに対応づけるかを指定します。今回はTestLinkの1テストケースとJUnitの1テストメソッドを対応づけるので、"JUnit method name"を選択します。関連づけの"Key Custom Field"としては作成した"Java Method"を使用します。"Attach JUnit XML"にチェックを入れるとJUnitのテストログがTestLink の"Execute Tests"に添付されるようになります。"Include test notes"を入れると同じくTestLink側に成功失敗以外の付加情報が追記されます。

Result Seeking Strategy

ここまで設定出来たら、"ビルド実行"でビルドしてみます。

実行結果

Jenkinsのビルド結果にTestLinkとの関連情報が追記されています。

TestLink build

"Not Run"となっているところは、前回のJUnit用のケースで本来はすべて関連付けてPassedかFailedになるはずです。逆に"Not Run"となっているテストケースは関連付けが漏れているケースと考えることができ、自動化の漏れもしくはテストケースの変更への対応漏れと考えることができます。

TestLink側も見てみましょう。失敗したケースにはJUnitのテストログが添付されていますが、これだけあっても辛いだけなので、できれば失敗したテストメソッドへのリンクトが欲しいところです。要調査ですがカスタムフィールドを頑張ればリンクを張ることもできるかもしれません。
TestLink Result

まとめ

JUnit、Jenkinsそれぞれの方法でTestLinkと自動テストを統合させる方法を見てきましたが、両者ともトレードオフがあります。

検討項目 JUnitによる連携 Jenkinsによる連携
セットアップ
トレーサビリティー
ツール依存性 ×

最近はJenkins以外のCIツールやTravis CIやWerkerなどのCIサービスを利用することも多いので、JUnitによる連携がポータビリティーが高くて良いかと思いますが、JenkinsのTestLink Pluginも高機能でよく作り込まれているのでオンプレミスでJenkinsとTestLinkを使うというのならよい選択とも言えます。

いずれにせよ、手動テストと自動テストを統合して管理し、レポーティングしていくことによって双方の相乗効果を1つのツールで管理していくことができるので自動化の導入効果も説明しやすく、手動チーム、自動チームが分断されることなく1テストチームとなるのを促進できますので、自動化の導入効果やチームの分断で悩んでいる方は是非一度この統合を検討頂けると良いかなと思います。