Gunosy Tech Blog

Gunosy Tech Blogは株式会社Gunosyのエンジニアが知見を共有する技術ブログです。

MagicPodの自動テストの結果入力を自動化しました

こんにちは。QAチームのmiyagiです。

QAチームで活用しているテスト自動化ツール「MagicPod」と、テスト管理ツール「TestRail」を連携させ、自動テストの結果入力をJenkinsで自動化しました。
この記事では、連携に必要な環境構築や手順について紹介します。  

Jenkins

MagicPodとTestRailについて

MagicPodはUIテスト自動化ツールで、Gunosyでは回帰テストの一部を自動化して実行しています。テスト管理ツールであるTestRailは、テストケースの作成やテスト結果の登録・管理に利用しています。

この2つのツールについてGunosyでどのように活用しているかの詳細はこちらの記事にまとめていますので、興味のある方は読んでみてください。

tech.gunosy.io

tech.gunosy.io

MagicPodとTestRailはそれぞれAPIが提供されており、APIからテスト実行やテストケースの更新などが可能です。
今回の自動化で利用している機能は、それぞれ以下の機能となります。  

MagicPod

  • テストの一括実行
  • 最新のテスト実行結果の番号を取得
  • 番号を指定してテスト実行結果の内容を取得

TestRail

  • テスト計画とテストランの作成
  • テストラン内のテストケースの取得
  • テストラン内のテストケースへテスト結果の登録

自動化の手順

実行するテストケースとテスト実行設定の準備

MagicPodの一括実行設定は、実行するブラウザやテスト端末毎に個別に用意する必要があります。

MagicPodの一括実行設定
また、この一括実行設定の名前はTestRailの設定と一致させます。
TestRailの設定

PythonスクリプトとAPI利用の準備

自動化に使用するPythonスクリプトは、テクマトリックス社のTestRail Blogの記事にあるサンプルを参考に作成しました。

TestRailとMagicPodを連携してみた - TestRail Blog

APIの利用に必要な準備は以下の2点です。

  1. TestRailのAPIにアクセスするためのAPIバインディングを、Pythonスクリプトと共にgitのリポジトリへ追加
    APIバインディングは上記の記事から入手できます。

  2. 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のセットアップは以下の手順でできます。

  1. JenkinsをHomebrewでインストール
    brew install jenkins
  2. Jenkinsを起動
    brew services start jenkins
  3. 以下にアクセスし初期設定を行う
    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は、以下の方法で簡単に利用できます。  

  1. JenkinsのCredentialsの設定でTestRailのユーザー名とAPIキー、MagicPodのAPIトークンをそれぞれ登録
  2. パイプラインの設定画面の一番下にある「Pipeline syntax」のリンク先のSnippet Generatorでスクリプトを生成

実行した結果

Jenkins

Jenkinsの実行結果画面です。
各ステージで実行が成功しています。

Jenkinsの実行結果

MagicPod

MagicPodのテスト実行結果です。
1ケースのみの実行ですがテスト結果は成功です。

MagicPodのテスト実行結果

TestRail

TestRailのテストランのテスト結果です。
「Passed」の結果が登録され、MagicPodのテスト結果のURLがコメントに追加されています。

TestRailのテスト結果

まとめ

今回はJenkinsを使ってMagicPodのテスト結果をTestRailに登録する方法について紹介しました。
現時点ではひとまず結果の登録ができるようになったという段階にいるため、今後はスクリプト内容の調整やテスト実行設定の整備を行って実際にQAで活用していく予定です。