こんにちは。QAチームのmiyagiです。
QAチームで活用しているテスト自動化ツール「MagicPod」と、テスト管理ツール「TestRail」を連携させ、自動テストの結果入力をJenkinsで自動化しました。
この記事では、連携に必要な環境構築や手順について紹介します。
MagicPodとTestRailについて
MagicPodはUIテスト自動化ツールで、Gunosyでは回帰テストの一部を自動化して実行しています。テスト管理ツールであるTestRailは、テストケースの作成やテスト結果の登録・管理に利用しています。
この2つのツールについてGunosyでどのように活用しているかの詳細はこちらの記事にまとめていますので、興味のある方は読んでみてください。
MagicPodとTestRailはそれぞれAPIが提供されており、APIからテスト実行やテストケースの更新などが可能です。
今回の自動化で利用している機能は、それぞれ以下の機能となります。
MagicPod
- テストの一括実行
- 最新のテスト実行結果の番号を取得
- 番号を指定してテスト実行結果の内容を取得
TestRail
- テスト計画とテストランの作成
- テストラン内のテストケースの取得
- テストラン内のテストケースへテスト結果の登録
自動化の手順
実行するテストケースとテスト実行設定の準備
MagicPodの一括実行設定は、実行するブラウザやテスト端末毎に個別に用意する必要があります。 また、この一括実行設定の名前はTestRailの設定と一致させます。
PythonスクリプトとAPI利用の準備
自動化に使用するPythonスクリプトは、テクマトリックス社のTestRail Blogの記事にあるサンプルを参考に作成しました。
TestRailとMagicPodを連携してみた - TestRail Blog
APIの利用に必要な準備は以下の2点です。
TestRailのAPIにアクセスするためのAPIバインディングを、Pythonスクリプトと共にgitのリポジトリへ追加
APIバインディングは上記の記事から入手できます。MagicPodをmagicpod-api-client形式で実行するため、
magicpod-api-client
をインストール
こちらも同じく上記の記事から入手できます。
magicpod-api-client
はホームディレクトリに配置して、スクリプト内でPATHを以下のように指定しています。
home_directory = os.getenv('HOME') MAGICPOD_API_CLIENT_PATH = os.path.join(home_directory, 'magicpod-api-client')
APIキーの発行
TestRail APIの利用にはTestRailのURL、メールアドレスとパスワードが必要になりますが、SSOでログインしている場合にはパスワードの代わりにAPIキーを使用します。
APIキーはTestRailの個人設定画面から発行できます。
MagicPod APIも同様にAPIトークンが必要になります。こちらはMagicPodのメニューのAPIトークン画面から確認することができます。
これらの情報はスクリプト内で以下のようにgetenv
を使用して指定しています。
TESTRAIL_USER = os.getenv("TESTRAIL_USER") TESTRAIL_PASSWORD = os.getenv("TESTRAIL_PASSWORD")
Pythonスクリプトのカスタマイズ
スクリプトの内容は基本的にはサンプルスクリプトそのままですが、一部カスタマイズしています。
主な変更箇所は以下の通りです。
TestRailで結果登録用のテスト計画・テストランの作成に必要な情報を指定
- テスト計画とテストランに設定する名前
- テストランで使用するテストスイートとテストケースのID
- テストランを作成する設定 (Chrome、iOS 17、Android 13など)
- config_idで指定
- config_idは
get_configs
を使って確認する
MagicPodで実行するテストの実行設定の情報を指定
- 一括実行設定のID
MagicPodのテストケース名とTestRailのテストラン名を比較するよう変更
- MagicPodの1つのテストケースがTestRailの複数のテストケースの内容を含んでいるため、MagicPodのテストケース名とTestRailのテストラン名が一致した場合はテストランに属するテスト全てに結果が入るように指定
if testrun["name"] == magicpod_result['test_case']['name']:
MagicPodのテスト結果からスクリーンショットを取得して登録する処理を除外
- テスト結果の詳細はMagicPodの結果ページで確認するため
Jenkinsの準備
Jenkinsのセットアップは以下の手順でできます。
- JenkinsをHomebrewでインストール
brew install jenkins
- Jenkinsを起動
brew services start jenkins
- 以下にアクセスし初期設定を行う
http://localhost:8080/
Jenkinsのパイプラインの設定
今回作成したPythonスクリプトは3つのファイルに分かれています。
スクリプト①: TestRailでテスト結果登録用のテスト計画・テストランを作成する
スクリプト②: MagicPodでテストを一括実行し、結果を取得する
スクリプト③: 作成済みのテストランにテスト結果を登録する
この3つのスクリプトをJenkinsのパイプラインで実行します。パイプラインを使用すると、複数のスクリプトをステージを分けて連続して実行することができます。
パイプラインの実行はGroovyでスクリプトを書く必要があり、以下のような内容でJenkinsfile
という名前のファイルに保存します。
実行するPythonスクリプトと同じリポジトリにJenkinsfile
を追加し、 パイプラインの設定画面で「Pipeline script from SCM」を選択してgitの認証設定を行うと、gitから取得して実行できるようになります。
pipeline { agent any environment { TESTRAIL_URL = 'Test RailのURL' } stages { stage('Prepare') { steps { script { withCredentials([ usernamePassword(credentialsId: 'TestRail_credentials_id', passwordVariable: 'TESTRAIL_PASSWORD', usernameVariable: 'TESTRAIL_USER') ]) { sh 'python スクリプト①.py' } } } } stage('Test') { steps { script { withCredentials([ string(credentialsId: 'MagicPod_secret_api_token_credentials_id', variable: 'SECRET_API_TOKEN') ]) { sh 'python スクリプト②.py' } } } } stage('Add Results') { steps { script { withCredentials([ usernamePassword(credentialsId: 'TestRail_credentials_id', passwordVariable: 'TESTRAIL_PASSWORD', usernameVariable: 'TESTRAIL_USER') ]) { sh 'python スクリプト③.py' } } } } } }
パイプラインは以下の流れで実行されます。
Prepareステージでスクリプト①を実行
Testステージでスクリプト②を実行
Add Resultsステージでスクリプト③を実行
各スクリプトの実行に必要な認証情報は、withCredentials
を使って指定しました。
withCredentials
は、以下の方法で簡単に利用できます。
- JenkinsのCredentialsの設定でTestRailのユーザー名とAPIキー、MagicPodのAPIトークンをそれぞれ登録
- パイプラインの設定画面の一番下にある「Pipeline syntax」のリンク先のSnippet Generatorでスクリプトを生成
実行した結果
Jenkins
Jenkinsの実行結果画面です。
各ステージで実行が成功しています。
MagicPod
MagicPodのテスト実行結果です。
1ケースのみの実行ですがテスト結果は成功です。
TestRail
TestRailのテストランのテスト結果です。
「Passed」の結果が登録され、MagicPodのテスト結果のURLがコメントに追加されています。
まとめ
今回はJenkinsを使ってMagicPodのテスト結果をTestRailに登録する方法について紹介しました。
現時点ではひとまず結果の登録ができるようになったという段階にいるため、今後はスクリプト内容の調整やテスト実行設定の整備を行って実際にQAで活用していく予定です。