MagicPodといいかんじに付き合っていく

スライド概要

YUMEMI.自動化 feat. note tech meetup ( https://yumemi.connpass.com/event/240476/ ) で登壇した内容です。
MagicPodを普段便利に利用している中で湧いてきた課題を自前で解決できないかを工夫してみました。

profile-image

Kazuya Ueoka

@fromkk

作者について:

noteという会社でiOSアプリの開発をしています。 個人アプリも色々あります。 # Type: https://type-markdown.app WebCollector: https://webcollector.app/ Pity: https://freetimepicker.firebaseapp.com

スライド一覧
シェア
埋め込む»CMSなどでJSが使えない場合

公開日

2022-04-22 17:48:00

各ページのテキスト

1. といい感じに付き合っていく YUMEMI.自動化 feat. note tech meetup @fromkk

2.

3.

4.

5. https://magic-pod.com/customer-stories/note/

6. note社アプリチームでのMagicPodの利用状況 • プラン: スタンダードプラン(プロジェクト5つ) • 合計テストケース数: 60 • 一括テストの実行タイミング • 毎朝7時 • masterブランチにマージするタイミング

7. 抱えていた問題 • テスト結果の通知がメールでしかこなかった • 同時並列数が2つまでしか対応してない

8. テストの結果の通知がメールでしかこなかった • メールは開かないと詳細が見れないのでどのテストが失敗したのか分かりづ らかった • 業務上の優先度: Slack>>>>>>>>>>>>>>>>mailになっている • MagicPodのテスト結果のメールが英語と日本語のいずれかで届くのでZapier などの自動化には向いていなかった

9. 前に試したこと • 定期的にZapierからMagicPod APIを叩いて前回の結果を通知してみた • MagicPod Web API https://magic-pod.com/api/v1.0/doc/

10.

11. 定期的にZapierからMagicPod APIを叩いて前回の結果を通知してみた

12. 定期的にZapierからMagicPod APIを叩いて前回の結果を通知してみた

13. 定期的にZapierからMagicPod APIを叩いて前回の結果を通知してみた

14. 結果

15. 作ってみて • 結果が成功 or 失敗が可視化される点はよかった • 失敗していれば修正しなければと思える機会が増えた • とはいえリアルタイムに通知されるとより嬉しい

16. そんなところに 朗報🎉

17. https://github.com/Magic-Pod/japanese-issue-and-doc/issues/137

18. 設定方法 MagicPodのテスト一括実行画面 • (設定がなければ)テスト一括実行に設定を追加 • 共通設定を開く • テスト結果をSlack通知: するに変更 • 通知用webフックを追加(適当な名前を付与) • Slack連携を選択して通知先のチャンネルを設定 • 完了したら通知用webフックに作成したものを選択

19. 結果 テスト成功時 テスト失敗時

20. MagicPod APIでの設定方法

21. [beta]

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は設定したものに適宜書き換える

22. 同時並列数が2つまでしか対応してない • プラン次第ではあるがスタンダードプランだと現状2つまで • API経由でテスト一括実行を3つ目以降を追加しようとすると弾かれてエラー になってしまう(CIが失敗したステータスになる) • 大きな問題というわけではないがCIの失敗を目にするのは精神衛生に悪い • 開発人数が増えれば起きやすくなってしまう(現状masterブランチへのマ ージ時に一括テストを実行しているため) • MagicPodに関するエラーが当たり前になるとメンテナンスされなくなって しまう危惧

23. 試したこと • SlackのSlash commandで一括テストの実行状況を取得 • 実行中のテスト件数を取得して2件実行されている場合にはテストしない

24. SlackのSlash commandで一括テストの実行状況を取得 トリガー以外は 定期的にZapierからMagicPod APIを叩いて前回の結果を通知してみた と同じ

25. SlackのSlash commandで一括テストの実行状況を取得

26. SlackのSlash commandで一括テストの実行状況を取得 結果

27. [beta]

実行中のテスト件数を取得して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

28. まとめ • MagicPodも完全ではないので足りない部分は自分で補っていく • APIが公開されているものは色々活用していきたい • 定期的に発生する問題は自動化チャンス! • 細かいことでも積み重なると問題が常態化してしまい悪循環 • 例)毎回コケるテストはメンテナンスされなくなってしまう

29. https://open.talentio.com/r/1/c/note/pages/61276