10.3K Views
April 22, 22
スライド概要
YUMEMI.自動化 feat. note tech meetup ( https://yumemi.connpass.com/event/240476/ ) で登壇した内容です。
MagicPodを普段便利に利用している中で湧いてきた課題を自前で解決できないかを工夫してみました。
iOSアプリの開発をしています。 個人アプリも色々あります。 # Type: https://type-markdown.app WebCollector: https://webcollector.app/ Pity: https://freetimepicker.firebaseapp.com
といい感じに付き合っていく YUMEMI.自動化 feat. note tech meetup @fromkk
https://magic-pod.com/customer-stories/note/
note社アプリチームでのMagicPodの利用状況 • プラン: スタンダードプラン(プロジェクト5つ) • 合計テストケース数: 60 • 一括テストの実行タイミング • 毎朝7時 • masterブランチにマージするタイミング
抱えていた問題 • テスト結果の通知がメールでしかこなかった • 同時並列数が2つまでしか対応してない
テストの結果の通知がメールでしかこなかった • メールは開かないと詳細が見れないのでどのテストが失敗したのか分かりづ らかった • 業務上の優先度: Slack>>>>>>>>>>>>>>>>mailになっている • MagicPodのテスト結果のメールが英語と日本語のいずれかで届くのでZapier などの自動化には向いていなかった
前に試したこと • 定期的にZapierからMagicPod APIを叩いて前回の結果を通知してみた • MagicPod Web API https://magic-pod.com/api/v1.0/doc/
定期的にZapierからMagicPod APIを叩いて前回の結果を通知してみた
定期的にZapierからMagicPod APIを叩いて前回の結果を通知してみた
定期的にZapierからMagicPod APIを叩いて前回の結果を通知してみた
結果
作ってみて • 結果が成功 or 失敗が可視化される点はよかった • 失敗していれば修正しなければと思える機会が増えた • とはいえリアルタイムに通知されるとより嬉しい
そんなところに 朗報🎉
https://github.com/Magic-Pod/japanese-issue-and-doc/issues/137
設定方法 MagicPodのテスト一括実行画面 • (設定がなければ)テスト一括実行に設定を追加 • 共通設定を開く • テスト結果をSlack通知: するに変更 • 通知用webフックを追加(適当な名前を付与) • Slack連携を選択して通知先のチャンネルを設定 • 完了したら通知用webフックに作成したものを選択
結果 テスト成功時 テスト失敗時
MagicPod APIでの設定方法
magicpod-api-clientでの設定方法
./magicpod-api-client batch-run -n -s "{ \
\"test_settings\":[{ \
\"environment\":\"magic_pod\", \
\"os\":\"ios\", \
\"device_type\":\"simulator\", \
\"version\":\"15.2\", \
\"model\":\"iPhone 12\", \
\"app_type\":\"app_file\", \
\”app_file_number\”:"latest", \
\"send_mail\":false, \
\"retry_count\":0, \
\"capture_type\":\"on_each_step\", \
\"device_language\":\"default\", \
\"device_region\":\"Default\" \
}], \
\"slack_notification\": { \
\"succeeded\": \"SlackNotificationName\", \
\"failed\": \"SlackNotificationName\", \
\"unresolved\": \"SlackNotificationName\", \
\"aborted\": \"SlackNotificationName\" \
} \
}"
fi
SlackNoti cationNameは設定したものに適宜書き換える
同時並列数が2つまでしか対応してない • プラン次第ではあるがスタンダードプランだと現状2つまで • API経由でテスト一括実行を3つ目以降を追加しようとすると弾かれてエラー になってしまう(CIが失敗したステータスになる) • 大きな問題というわけではないがCIの失敗を目にするのは精神衛生に悪い • 開発人数が増えれば起きやすくなってしまう(現状masterブランチへのマ ージ時に一括テストを実行しているため) • MagicPodに関するエラーが当たり前になるとメンテナンスされなくなって しまう危惧
試したこと • SlackのSlash commandで一括テストの実行状況を取得 • 実行中のテスト件数を取得して2件実行されている場合にはテストしない
SlackのSlash commandで一括テストの実行状況を取得 トリガー以外は 定期的にZapierからMagicPod APIを叩いて前回の結果を通知してみた と同じ
SlackのSlash commandで一括テストの実行状況を取得
SlackのSlash commandで一括テストの実行状況を取得 結果
実行中のテスト件数を取得して2件実行されている場合にはテストしない
#!/bin/sh
brew install jq
MAGICPOD_API_URL="https://magic-pod.com/api/v1.0/${MAGICPOD_ORGANIZATION}/${MAGICPOD_PROJECT}/batch-runs/"
MAGICPOD_API_RESPONSE=`curl -H "Authorization: Token ${MAGICPOD_API_TOKEN}" ${MAGICPOD_API_URL}`
NUMBER_OF_RUNNING=`echo $MAGICPOD_API_RESPONSE | jq '.batch_runs | map(select(.status == "running")) | length'`
MAX_RUNNABLE=2
if [ $NUMBER_OF_RUNNING -ge $MAX_RUNNABLE ]; then
echo "Too many running..."
exit 0
fi
...
fi
.circleci/con g.yml
まとめ • MagicPodも完全ではないので足りない部分は自分で補っていく • APIが公開されているものは色々活用していきたい • 定期的に発生する問題は自動化チャンス! • 細かいことでも積み重なると問題が常態化してしまい悪循環 • 例)毎回コケるテストはメンテナンスされなくなってしまう
https://open.talentio.com/r/1/c/note/pages/61276