GitHub Actions でテストプランを実行する

Prev Next

この記事では、[GitHub Actions] ワークフローからAutify Nexus APIを使ってテストプランを実行する方法を解説します。


前提条件

この連携を設定するには、以下の情報が必要です。


ステップ1: GitHub Secrets にAPIトークンを保存する

まず、Obtain the client secret を参考に、 APIトークンを取得します。

取得したAPIトークンを、[GitHub Actions] の [Secrets] に保存します。

  1. 対象のGitHubリポジトリで、[Settings] タブに移動します。

  2. 左側のメニューから [Secrets and variables] > [Actions] を選択します。

  3. [New repository secret] をクリックします。

  4. Name にシークレット名(例: AUTIFY_NEXUS_API_TOKEN)を入力します。

  5. Secret フィールドに、Autify Nexusから取得した APIトークン の値を入力します。

  6. [Add secret] をクリックします。


ステップ2: [GitHub Actions] ワークフローを作成する

次に、テストプラン実行のステップを含むワークフローファイル(YAML)を作成します。

  1. リポジトリの .github/workflows/ ディレクトリに、新しいYAMLファイル(例: run-autify-nexus.yml)を作成します。

  2. ワークフローのトリガー(例: on: pushon: workflow_dispatch)を定義します。

  3. jobs を定義し、その中に steps を設定します。

  4. run ステップを追加して、API呼び出しスクリプトを実行します。

以下サンプルをご用意しましたので、ご参照ください。

サンプル1: テストプランを実行する (テストの完了を待たない)

このスクリプトは、Autify Nexusのテストプランを実行するリクエストを送信するだけで、テストの完了を待ちません

name: Run Autify Nexus Test Plan (No Wait)

on:
  workflow_dispatch:   # 手動実行を許可

jobs:
  run-nexus-test:
    runs-on: ubuntu-latest
    steps:
      - name: Run Autify Nexus Test Plan (No Wait)
        env:
          AUTIFY_NEXUS_API_TOKEN: ${{ secrets.AUTIFY_NEXUS_API_TOKEN }}

          # 以下の変数はご自身の環境に合わせてください
          SERVER_URL: "https://<your-nexus-server>"
          TEST_PLAN_NAME: "<your-test-plan-name>"

        run: |
          set -euo pipefail

          echo "Starting Autify Nexus test run..."

          AUTH_HEADER="Authorization: Bearer ${AUTIFY_NEXUS_API_TOKEN}"
          ACCEPT_HEADER='Accept: application/json'

          # ワークスペースIDを取得
          ws_res=$(curl --silent --show-error \
            --url "${SERVER_URL}/nexus/api/workspaces" \
            --header "$AUTH_HEADER" \
            --header "$ACCEPT_HEADER")

          WORKSPACE_ID=$(echo "$ws_res" | jq -r '.[0].id')

          if [ -z "${WORKSPACE_ID:-}" ] || [ "${WORKSPACE_ID}" = "null" ]; then
            echo "❌ Workspace not found. Response:"
            echo "$ws_res"
            exit 1
          fi
          echo "✅ Workspace ID: ${WORKSPACE_ID}"

          # テストプラン名からIDを取得
          tp_res=$(curl --silent --show-error \
            --url "${SERVER_URL}/nexus/api/workspaces/${WORKSPACE_ID}/testPlans" \
            --header "$AUTH_HEADER" \
            --header "$ACCEPT_HEADER")

          TEST_PLAN_ID=$(echo "$tp_res" | jq -r --arg NAME "$TEST_PLAN_NAME" '.[] | select(.name == $NAME) | .id')

          if [ -z "${TEST_PLAN_ID:-}" ] || [ "${TEST_PLAN_ID}" = "null" ]; then
            echo "❌ Test plan '${TEST_PLAN_NAME}' not found."
            echo "$tp_res"
            exit 1
          fi
          echo "✅ Test Plan ID: ${TEST_PLAN_ID}"

          # テストプランを実行(No Wait)
          run_res=$(curl --silent --show-error \
            --request POST \
            --url "${SERVER_URL}/nexus/api/workspaces/${WORKSPACE_ID}/testPlans/${TEST_PLAN_ID}/run" \
            --header "$AUTH_HEADER" \
            --header "$ACCEPT_HEADER")

          RESULT_ID=$(echo "$run_res" | jq -r '.resultId')

          if [ -z "${RESULT_ID:-}" ] || [ "${RESULT_ID}" = "null" ]; then
            echo "❌ Failed to start test plan."
            echo "$run_res"
            exit 1
          fi

          echo "✅ Test started (No Wait). Result ID: ${RESULT_ID}"
          echo "✅ Job completed."

サンプル2: テストプランを実行し結果を取得する

このスクリプトは、テストプランを実行した後、テストが完了するまで5秒ごとにステータスを確認(ポーリング)します。 テストが PASSED 以外(例: FAILED)で終了した場合、[GitHub Actions] のジョブも失敗します。

name: Run Autify Nexus Test Plan (Wait for Result)

on:
  workflow_dispatch: # 手動実行を許可

jobs:
  run-nexus-test:
    runs-on: ubuntu-latest
    steps:
      - name: Run Autify Nexus Test Plan (Wait for Result)
        env:
          AUTIFY_NEXUS_API_TOKEN: ${{ secrets.AUTIFY_NEXUS_API_TOKEN }}

          # 以下の変数はご自身の環境に合わせてください
          SERVER_URL: "https://<your-nexus-server>"
          TEST_PLAN_NAME: "<your-test-plan-name>"

        run: |
          set -euo pipefail

          echo "Starting Autify Nexus test run..."

          AUTH_HEADER="Authorization: Bearer ${AUTIFY_NEXUS_API_TOKEN}"
          ACCEPT_HEADER='Accept: application/json'

          # ワークスペースIDを取得
          ws_res=$(curl --silent --show-error \
            --url "${SERVER_URL}/nexus/api/workspaces" \
            --header "$AUTH_HEADER" \
            --header "$ACCEPT_HEADER")
          WORKSPACE_ID=$(echo "$ws_res" | jq -r '.[0].id')

          if [ -z "${WORKSPACE_ID:-}" ] || [ "${WORKSPACE_ID}" = "null" ]; then
            echo "❌ Workspace not found. Response:"
            echo "$ws_res"
            exit 1
          fi
          echo "✅ Workspace ID: ${WORKSPACE_ID}"

          # テストプラン名からIDを取得
          tp_res=$(curl --silent --show-error \
            --url "${SERVER_URL}/nexus/api/workspaces/${WORKSPACE_ID}/testPlans" \
            --header "$AUTH_HEADER" \
            --header "$ACCEPT_HEADER")
          TEST_PLAN_ID=$(echo "$tp_res" | jq -r --arg NAME "$TEST_PLAN_NAME" '.[] | select(.name == $NAME) | .id')

          if [ -z "${TEST_PLAN_ID:-}" ] || [ "${TEST_PLAN_ID}" = "null" ]; then
            echo "❌ Test plan '${TEST_PLAN_NAME}' not found."
            echo "$tp_res"
            exit 1
          fi
          echo "✅ Test Plan ID: ${TEST_PLAN_ID}"

          # テストプランを実行(Wait)
          run_res=$(curl --silent --show-error \
            --request POST \
            --url "${SERVER_URL}/nexus/api/workspaces/${WORKSPACE_ID}/testPlans/${TEST_PLAN_ID}/run" \
            --header "$AUTH_HEADER" \
            --header "$ACCEPT_HEADER")
          RESULT_ID=$(echo "$run_res" | jq -r '.resultId')

          if [ -z "${RESULT_ID:-}" ] || [ "${RESULT_ID}" = "null" ]; then
            echo "❌ Failed to start test plan. Response:"
            echo "$run_res"
            exit 1
          fi
          echo "✅ Test started. Result ID: ${RESULT_ID}"
          echo "⏳ Waiting for test to complete..."

          # ステータスをポーリング(QUEUED/RUNNINGの間は待機)
          STATUS="QUEUED"
          while [ "$STATUS" = "QUEUED" ] || [ "$STATUS" = "RUNNING" ]; do
            sleep 5
            st_res=$(curl --silent --show-error \
              --url "${SERVER_URL}/nexus/api/workspaces/${WORKSPACE_ID}/testResults/${RESULT_ID}/status" \
              --header "$AUTH_HEADER" \
              --header "$ACCEPT_HEADER")
            STATUS=$(echo "$st_res" | jq -r '.status')
            if [ -z "${STATUS:-}" ] || [ "$STATUS" = "null" ]; then
              echo "❌ Failed to fetch result status. Response:"
              echo "$st_res"
              exit 1
            fi
            echo "Current status: $STATUS"
          done

          echo "Final status: $STATUS"
          # Autify Nexusでのテスト結果に基づいてワークフローを失敗させる
          if [ "$STATUS" != "PASSED" ]; then
            echo "❌ Test failed with status: $STATUS"
            exit 1
          fi

          echo "✅ Test PASSED"

この方法は、テスト完了を待っている間もGit Actions hosted runner の時間を消費します。


ステップ3: ワークフローの実行と結果の確認

ワークフローが(pushや手動実行などで)トリガーされると、[GitHub Actions] が実行されます。

  1. リポジトリの [Actions] タブに移動します。

  2. 実行されたワークフロー(例: Run Autify Nexus Test Plan)をクリックします。

  3. ジョブ名(例: run-nexus-test)をクリックし、実行ステップ(Run Autify Nexus Test Plan and Waitなど)を展開すると、実行ログが表示されます。

テストプランの実行に失敗する場合には、以下をご確認ください。

  • テストプランにクラウド実行環境が最低1つ設定されている

  • テストプランに最低1つのシナリオが含まれている