こんにちは。TSFエンジニアリングチームの小松原です。
TeamSpirit では、スモークテストをAutifyでテストしています。
今回は、開発の最新資材をJenkinsでデプロイしてAutifyで動かす仕組み作りを自分が担当したのでご紹介します。
事前準備
Autify のアクセストークン を取得しておきます。
Jenkins Job の設定
大まかな流れは以下のようにJekins Job を設定して動かしています。
- Jenkins でデプロイしたい Git ブランチを Pull します。
- Pull した資材をテスト環境にデプロイします。
- 以下の Autify との 連携Shell で Autify API を叩き、完了までポーリングします。
- Autify Command Line Interface (CLI) がリリースされたので、今後はテスト終了をチェックするポーリングは必要無い模様です。
Autify との 連携Shell について
この Shell を動かすに必要なパラメーターは以下の通りです。
AUTIFY_PROJECT_ID
: 実行したいテストプランIDが所属するプロジェクトIDです。 https://app.autify.com/projects/XXX の XXX を指定します。AUTIFY_TEST_PLAN_ID
: 実行したいテストプランIDです。 https://app.autify.com/projects/XXX/test_plans/ZZZZZ の ZZZZZを指定します。AUTIFY_API_ACCESS_TOKEN
: Autify のアクセストークンを指定します。POLLING_INTERVAL
: Autify のテストが終了しているかチェックするインターバルをミリ秒単位で指定します。
# Resutl HTML Template function getTestResultToHtml(){ mkdir -p "${WORKSPACE}"/test_result cat <<EOF > "${WORKSPACE}"/test_result/index.html <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Autify Test $2 Result</title> </head> <body> <div class="description"> <h2><a href=$1>Autify Test $2 Result</a></h2> <dl> <dt>Status</dt><dd>$3</dd> <dt>Review needed</dt><dd>$4</dd> <dt>Finished</dt><dd>$5</dd> </dl> </div> <div> <h2>Raw Test Result</h2> <pre><code>$6</code></pre> </div> </body> </html> EOF } # Run a test plan on Autify execute_response=$(\ curl -XPOST -H "Authorization: Bearer ${AUTIFY_API_ACCESS_TOKEN}" \ https://app.autify.com/api/v1/schedules/${AUTIFY_TEST_PLAN_ID} \ ) # Get test plan result ID to get a URL test_plan_result_id=$(echo ${execute_response} | jq -r .data.id) # Build a result URL test_plan_result_url="https://app.autify.com/projects/${AUTIFY_PROJECT_ID}/results/${test_plan_result_id}" echo ${test_plan_result_url} # Test Result Status Response Polling while true do test_result=$(\ curl -X 'GET' \ "https://app.autify.com/api/v1/projects/${AUTIFY_PROJECT_ID}/results/${test_plan_result_id}" \ -H 'accept: application/json' \ -H "Authorization: Bearer ${AUTIFY_API_ACCESS_TOKEN}"\ ) result_status=$(echo ${test_result} | jq -r .status) printf "progress status : ${result_status}" # Check Test Status if [ "$result_status" = "passed" ] || [ "$result_status" = "failed" ] || [ "$result_status" = "skipped" ] || [ "$result_status" = "canceled" ]; then # End Test printf "end polling status : ${result_status}\n" printf "$(echo ${test_result} | jq -r .)" getTestResultToHtml ${test_plan_result_url} $(echo ${test_result} | jq -r .id) ${result_status} $(echo ${test_result} | jq -r .review_needed) $(echo ${test_result} | jq -r .finished_at) "$(echo ${test_result} | jq -r .)" break; fi sleep ${POLLING_INTERVAL}; done
ビルド成果物
上記のShellの実行結果は以下のようなイメージで出力されます(一部加工しています)。
感想
Autify APIを試せるページがあるので、実装時に助かりました。 あとは、Autify のデータ機能を外部から柔軟に置換できたらと感じました。
苦労した箇所は、Shell スクリプトの if の条件文の箇所です。[ 条件文 ] のように [ の後に半角スペースが必要なことに気づかず苦労しました。
今後の展望
将来的に Autify CLI と Jenkins の連携とあるので、リリースされたら試してみたいです。