Gunosy Tech Blog

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

GitHubActionsでMagicPodとTestRailを連携しました

こんにちは。QAチームの宮城です。
GitHub Actionsを使って自動テストの結果をテスト管理ツールに登録する運用を開始しましたので、今回はその内容について紹介します。

GitHub Actionsを選択した経緯

QAチームでは自動テストツール(MagicPod)とテストケースの管理ツール(TestRail)を連携してQAの効率化に取り組んでいます。
当初はJenkinsを使って自動テストの結果登録の自動化を試みていましたが、チームで運用するにあたっていくつか課題があったためGitHub Actionsを使うことにしました。

MagicPodのテスト結果のTestRailへの登録をJenkinsで自動化した際の詳細は、こちらの記事にまとめています。

tech.gunosy.io

JenkinsとGitHub Actionsを両方試してみて

Jenkinsの良かったところ

  • 実行時間の制限がない

    MagicPodで自動化しているテストケースの件数は徐々に増えており、複数端末でテストを行うため全体のテスト実行には数時間を要します。
    Jenkinsは無料で実行時間の制限もなく、長時間のテスト実行も問題なくできそうだったためメリットに感じました。

Jenkinsの良くなかったところ

  • 環境構築とメンテナンスが必要

    Jenkinsを利用するには環境構築が必要になります。
    導入後も各種プラグインのアップデートなどメンテナンスが必要な場面があり、
    チームで利用するには各自でセットアップが必要で煩雑になってしまう懸念がありました。

GitHub Actionsにすると

  • 環境構築なしで使える

    GitHub Actionsの一番のメリットは、諸々のインストールやPATHの設定など複雑な環境構築が必要ないことです。

  • 自動化のスクリプトと一箇所で管理できる

    Jenkinsの場合は実行するスクリプトがあるGitと連携させる必要がありますが、GitHub Actionsでは外部連携の必要がなく同じリポジトリで管理できるのでシンプルになります。

自動化の概要

自動テストの実行から結果登録までは以下の流れで行います。

MagicPodで自動テストを実行
↓
テスト完了後、GitHub Actionsのワークフローを実行
<ワークフローの内容>
・MagicPodからテスト結果を取得してJSONファイルに保存
・TestRailで結果登録のためのテスト計画、テストランを作成
・取得済みのMagicPodのテスト結果をTestRailに登録

MagicPodの自動テスト実行についてはGitHub Actionsのワークフローに組み込んでいません。
現状MagicPodで自動化しているすべてのテストを一括実行しており、ワークフローの実行時間が長時間になるため含めないこととしています。

自動化の手順

今回GitHub Actionsを使って自動化するにあたっては
MagicPodのヘルプセンター内にある「TestRailとの連携」のページを参考にしています。
リンク先のページ内に、スクリプトが公開されているGitHubリポジトリへのリンクもあります。

TestRailとの連携 – MagicPodヘルプセンター

スクリプトの準備

スクリプトは前回Jenkinsと連携した際に使用したものを今回も利用していますが、上記ページを参考に一部カスタマイズを行いました。

主な変更箇所は以下2点です。

  • MagicPodのテストとTestRailのテストケースとの紐付け方法の変更

    これまではMagicPodのテストケース名とTestRailのテストラン名で紐付けを行っていましたが、
    TestRailのカスタムフィールドにMagicPod_URL_iOSMagicPod_URL_Androidを追加し、対応するMagicPodのテストケースのURLを入力することで紐付けを行うようにしました。  

  • 自動テスト実行の処理をスクリプトから除外

    MagicPodの一括実行設定のIDを指定してテスト結果の取得のみを行うようにしました。

Gunosyでは3つのアプリのテストにMagicPodを利用しており、それぞれでiOSとAndroidの両方でテストを行うため、
アプリとOSごとにプロジェクトを分けて自動テストを管理しています。
同様にTestRailでもプロダクトごとにプロジェクトを分けてテストケースを管理しています。

MagicPodとTestRailどちらもプロジェクトやテストケースのIDが異なるため、
実行するスクリプトも各アプリでOSごとにファイルを分けて作成しました。

ワークフローの設定

GitHub Actionsで実行するワークフローはymlファイルで設定します。
こちらもスクリプトと同様にMagicPodのヘルプページにあるymlファイルを参考に、一部カスタマイズして作成しました。

今回は自動テスト結果の登録を任意のタイミングで手動で実行したいため、ワークフローを実行するトリガーはon: workflow_dispatchを指定しています。
合わせてinputsを使用してワークフローで実行するスクリプトを入力値によって変えられるようにしました。
以下のように指定すると、ワークフロー実行時にテスト対象のアプリ名とOSの種類をドロップダウン形式で選択できるようになり、実行するスクリプトの指定ができます。

on:
  workflow_dispatch:
    inputs:
      app:
        description: 'Select app'
        required: true
        type: choice
        options:
          - ''
          - 'gunosy'
          - 'servicetoday'
          - 'newspass'
      os:
        description: 'Select OS'
        required: true
        type: choice
        options:
          - ''
          - 'android'
          - 'ios'

実行するスクリプトはアプリとOS別にGitHubでディレクトリを分けているため、以下のように入力値を利用することで指定のスクリプトが実行されるようにしています。

      - name: Add test results to TestRail
        run: |
          python ${{ github.event.inputs.app }}/${{ github.event.inputs.os }}/add_test_results.py

ワークフローの実行

  1. MagicPodでテスト実行が完了するまで待つ
    テスト実行が完了すると一覧に結果が表示されます。

    MagicPodの一括実行結果の画面

  2. GitHub Actionsのワークフローを実行する
    GitHub Actionsでアプリ名とOSを指定して手動でワークフローを実行します。

    GitHub Actionsのワークフロー実行画面

  3. ワークフローの実行が完了するまで待つ
    結果が1件ずつ登録されていき、数分で実行が完了します。

    GitHub Actionsのワークフローの実行結果

  4. TestRailでテスト結果を確認する
    TestRailで自動テストの結果が登録されたテスト計画・テストランが作成され、個別のテスト結果を開くと結果が登録されています。

    TestRailに登録されたテスト結果

おわりに

今回GitHub Actionsを導入してみたことで、開発を行わないQAでも使えるツールであることがわかりました。
今後も内容をアップデートしながら活用していく予定です。