CircleCIを使ってAutifyのテスト結果をTeamsに通知する


1. はじめに

CircleCIを用いてAutifyとMicrosoft Teams(以降Teams)を連携する方法を説明します。

具体的には、ソースコードがGitHubのmainブランチへマージされたタイミングで、Autifyのテストプランを実行し、テスト結果URLをTeamsへ通知します。見た目をよりリッチにしたい方は「Microsoft Teams API (Incoming Webhook) で投稿 - Qiita」が参考になると思います。

なお、今回はテスト実行の完了を待たずに結果URLを通知します。完了を待つためには、AutifyのAPIによってテスト結果のstatusを取得し、待機または結果通知を行うスクリプトを作成することで可能になります。

2. 使用するツール

3. 手順

  1. Teamsのチャネルに受信Webhookを設定
  2. CircleCIに環境変数を設定
  3. CircleCIのconfig.ymlを作成
    1. Autifyのテストプランを実行する
    2. テスト結果のIDを取得する
    3. テスト結果URLをTeamsへ通知する
    4. トリガーを指定する

3-1. Teamsのチャネルに受信Webhookを設定

受信 Webhook を作成する - Teams | Microsoft Docsを参考に、通知を受け取りたいTeamsのチャネルにWebhookを設定します。

設定したURLは後述の手順で使うので、どこかにメモしておきましょう。

3-2. CircleCIに環境変数を設定

CircleCIの「Project Setting > Environment Variable」から、次の3つの環境変数を設定します。

  • AUTIFY_PERSONAL_ACCESS_TOKEN

    • Autifyの「設定 > 個人設定」から「新しいパーソナルアクセストークンを生成」
  • AUTIFY_PROJECT_ID

    • Autifyの「設定 > プロジェクト」を開き、URLからプロジェクトIDを取得
      • 例) https://app.autify.com/settings/projects/999の場合、999
  • AUTIFY_TEST_PLAN_ID

    • 実行したいテストシナリオを選択し、テストプランを作成します
    • 「テストプラン」ページを開き、URLからテストプランIDを取得
      • 例) https://app.autify.com/projects/999/test_plans/0000の場合、0000

3-3. CircleCIのconfig.ymlを作成

Autifyのテストプランの実行と結果の通知を行うワークフローを作成します。
今回は、Autifyで用意されているCirckeCI用のサンプルを参考にしました。

※APIの一覧はこちら。しかし、2021年11月現在、サイト内でのAPI実行はうまくいかないようです。Postmanなど別の方法でお試しください。

Autifyのテストプランを実行する

環境変数を使って、テスト実行用のPOSTメソッドを設定します。

.circleci/config.yml
version: 2.1

jobs:
  publish-to-production:
    docker:
      - image: cimg/base:2020.01

    steps:
      - checkout

      - run:
          name: Run regression tests
          command: |
            # テストプラン実行
            response=$(\
              curl -XPOST -H "Authorization: Bearer ${AUTIFY_PERSONAL_ACCESS_TOKEN}" \
              https://app.autify.com/api/v1/schedules/${AUTIFY_TEST_PLAN_ID} \
            )

テスト結果のIDを取得する

jqコマンドを使って、レスポンスからテスト結果IDを取得します。

.circleci/config.yml
            # テストプラン実行 ...

            # テスト結果ID取得
            test_plan_result_id=$(echo ${response} | jq -r .data.id)

テスト結果URLをTeamsへ通知する

前述の手順で取得したWebhook URLを使って、POSTメソッドを設定します。

.circleci/config.yml
            # テスト結果ID取得 ...

            # 結果URLのTeams通知
            response=$(\
              curl -X POST -H "Content-Type: application/json" \
              -d '{"title": "AutifyResult", "text": "https://app.autify.com/projects/'${AUTIFY_PROJECT_ID}'/results/'${test_plan_result_id}'"}' \
              <Webhook URL> \
            )

トリガーを指定する

ソースコードがGitHubのmainブランチへマージされたタイミングで実行するために、トリガーを指定します。

.circleci/config.yml
workflows:
  version: 2
  commit-workflow:
    jobs:
      - publish-to-production:
          filters:
            branches:
              only: main

4. 雑感

やっていることは単純なのですが、Windowsでcurlコマンドを試しづらいことや、AutifyのAPI一覧からAPIを実行できないところに一番時間がかかりました…。

5. 参考