この記事では、[GitHub Actions] ワークフローからAutify Nexus APIを使ってテストプランを実行する方法を解説します。
前提条件
この連携を設定するには、以下の情報が必要です。
NexusサーバーのURL (例: https://1234.cloud.autify.com)
テストプランの名前
Autify Nexus APIトークン(Client secret)
ステップ1: GitHub Secrets にAPIトークンを保存する
まず、Obtain the client secret を参考に、 APIトークンを取得します。
取得したAPIトークンを、[GitHub Actions] の [Secrets] に保存します。
対象のGitHubリポジトリで、
[Settings]タブに移動します。左側のメニューから
[Secrets and variables]>[Actions]を選択します。[New repository secret]をクリックします。Nameにシークレット名(例:AUTIFY_NEXUS_API_TOKEN)を入力します。Secretフィールドに、Autify Nexusから取得したAPIトークンの値を入力します。[Add secret]をクリックします。
ステップ2: [GitHub Actions] ワークフローを作成する
次に、テストプラン実行のステップを含むワークフローファイル(YAML)を作成します。
リポジトリの
.github/workflows/ディレクトリに、新しいYAMLファイル(例:run-autify-nexus.yml)を作成します。ワークフローのトリガー(例:
on: pushやon: workflow_dispatch)を定義します。jobsを定義し、その中にstepsを設定します。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] が実行されます。
リポジトリの
[Actions]タブに移動します。実行されたワークフロー(例:
Run Autify Nexus Test Plan)をクリックします。ジョブ名(例:
run-nexus-test)をクリックし、実行ステップ(Run Autify Nexus Test Plan and Waitなど)を展開すると、実行ログが表示されます。
テストプランの実行に失敗する場合には、以下をご確認ください。
テストプランにクラウド実行環境が最低1つ設定されている
テストプランに最低1つのシナリオが含まれている