Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
運用プロジェクトにおけるUITestの運用事例紹介
Search
a_z_k
December 08, 2021
Programming
770
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
運用プロジェクトにおけるUITestの運用事例紹介
a_z_k
December 08, 2021
More Decks by a_z_k
See All by a_z_k
[Roppongi.unity #9] AddressableAssetSystemをプロダクトで使ってみた
azukizuki
0
1.7k
Other Decks in Programming
See All in Programming
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
wagyu
0
270
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
180
Creating Composable Callables in Contemporary C++
rollbear
0
180
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
140
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
230
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
230
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
220
act1-costs.pdf
sumedhbala
0
140
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
180
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
290
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
450
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
Featured
See All Featured
A Soul's Torment
seathinner
6
3k
My Coaching Mixtape
mlcsv
0
160
Java REST API Framework Comparison - PWX 2021
mraible
34
9.4k
Navigating Weather and Climate Data
rabernat
0
260
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Are puppies a ranking factor?
jonoalderson
1
3.7k
Site-Speed That Sticks
csswizardry
13
1.2k
Unsuck your backbone
ammeep
672
58k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
440
A Tale of Four Properties
chriscoyier
163
24k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
630
Transcript
ӡ༻ϓϩδΣΫτʹ͓͚Δ UITestͷӡ༻ࣄྫհ
ࣗݾհ Speaker 紹介 Twitter:Azukiidx (あんま技術的な話してないアカウント) 所属:Gra ffi ty,Inc (一応リードエンジニア) 過去登壇・記事など
- Roppongi.Unity ( https://speakerdeck.com/azukizuki/roppongi-dot-unity-number-9- addressableassetsystemwopurodakutodeshi-tutemita ) - 会社の技術ブログ ( https://note.com/gra ff i ty/m/m896f454ae562 ) - 個人Qiita ( https://qiita.com/AzuQiita )
What's Gra ff i ty, Inc Gra ffi tyについて USにてLeapTriggerというARシューティングゲームを運用/開発中!
What's Gra ff i ty, Inc 今回の話 このタイトルのUITestを構築した話
UITestͱ - ゲームのUIがちゃんと動くか確認する - 自動でUI操作を行い、動作チェックを行うもの Gra ff i tyでは現在UITestの拡充を行っています。
ԿނΔͷʁ Gra ff i tyではアプリのアップデートを行う際、QA会社のデバッグとは別で本番ビルド作成前に 全機能を触って正常に動作するかチェックするリリースチェックというものを実施しています これが超大変で、膨大な量のチェック項目を全てチェックするので チームのエンジニアが丸一日余裕で拘束されます。
ԿނΔͷʁ 流石にしんどい! でもこれで見つかって事前に修正できたバグもある事実。。 じゃあ自動化じゃね? インゲームはともかくアウトゲームはチェックを自動化したい! そこでAirTestさんの出番です
AirTestͱ NetEaseが開発しているUITest開発IDE Pythonで画像ベースで処理が書けるのでとても直感的にテストが書ける 詳細は日本語で記事書かれている先人たちがたくさんいらっしゃるので 調べてみてね!
Gra ff i tyͰͷࣄྫ 弊社ではJenkinsを使用して毎日深夜0時頃にUITest用のAndroidアプリをビルドし、UITestを回す という仕組みを構築しています ↑成功したとき ↑何かしら問題が発生して失敗したとき 結果はSlackに通知され、失敗したときは直ぐに気づける体制になっています。
Gra ff i tyͰͷࣄྫ リンクをクリックすると GitLabPagesにテスト結果のhtmlがアップロードされます テスト中にクリックされた場所なども表示されてとっても見やすい!
Jenkinsߏ ここからは実際にどういう実装をしているのか解説していきます Jenkinsジョブはこのような構成・処理になっています 毎日0時にJenkinsおじさんが UITestジョブ始動 最新の開発ブランチをビルド ビルドされたApkを 元にUITestを全件実行 リザルトページ作成 リザルトのHTMLを
GitlabPagesにデプロイ&Slackへ 完了通知をポスト
Jenkinsߏ 今回紹介する実装事例はこの部分 毎日0時にJenkinsおじさんが UITestジョブ始動 最新の開発ブランチをビルド ビルドされたApkを 元にUITestを全件実行 リザルトページ作成 リザルトのHTMLを GitlabPagesにデプロイ&Slackへ
完了通知をポスト
AirTestϓϩδΣΫτߏ それではまずAirTestプロジェクトの実装について紹介します LeapTriggerのUITestではまず、テスト用の基底クラスを用意し、 それを継承し画面単位でテストを書く様にしています。 ςετجఈΫϥε جఈΛܧঝͨ͠ը໘"ͷ ςετέʔεΫϥε جఈΛܧঝͨ͠ը໘#ͷ ςετέʔεΫϥε جఈΛܧঝͨ͠ը໘$ͷ
ςετέʔεΫϥε アプリのインストールや Abstractメソッドなどの定義 こっちはテストの中身だけ書く
AirTestϓϩδΣΫτߏ 基底クラスはこんな感じで、PythonのABCモジュールを使い、 必ず実装しないといけないAbstractメソッドを定義しています アカウントが既にある場合・ない場合 (新規インストールから実施する場合)のテスト を書くようにします。 こうすることで画面Aだけテストを実行したい! という時に便利です
AirTestϓϩδΣΫτߏ 基底を継承し実装した例 TestFromInstallはサインアップのテストを自動実行してから テストケースを実行するように書くことで、テストごとの 実行順番の依存性が極力少なくなるようにしています
AirTestϓϩδΣΫτߏ テストケースを全部実行するエントリーポイント テストケースをリストを作成し、forで回しな がら順番に実行していきます。 例外が発生した(テストが止まった)際は 失敗したテストのクラス名を出力するようにし、 問題のあるテストケースがすぐにわかるようにしています
ςετ࣮ߦ このテストケースを全部実行するエントリーポイントクラスをJenkins上で実行しています。 —device android:/// でPCにつながってるAndroidデバイスでテストが走ります(2台以上繋いでる ときはちゃんと指定が必要) Recordingオプションをつけるとテスト中を録画してくれます (後述のhtml生成したほうが良いと思う)
ςετ࣮ߦ テストが完了した後、reportコマンドを叩くことでテスト結果のHTMLページを出力できます ログファイルを指定してやる必要があります。
Ϧβϧτੜ 最後に、生成されたHTMLファイルをGitLabPagesにアップロードします (GitLabPages用のリポジトリにコミット&プッシュする) 何故gitlabかというと、GitLabPagesは特定ユーザーのみページを閲覧できる、という設定が可能 だったから(流石にPublicにはできない情報ですし自前でサーバ用意も面倒だったので) 現在はGithubPagesでも同様の設定があるらしいです。 当時はなかったのでGitLabPages使ってます
Slackϙετ そして最後にSlackにもポストしてやれば終了です🎉 このような仕組みを構築し、毎日UITestを定期実行しています
ಈ࡞͍ͯ͠Δ༷ࢠ 最後に動作している様子(実機) 毎日元気に動いてくれています🎉
ࠓޙ 今後の展望 - 現状はまだ全画面を網羅できてないのでアウトゲーム全画面のUITest整備に向けてテスト実装を進 めています - ARをフルに使うインゲームをテストしたいが、ジャイロセンサーの値などを制御しないといけない のでいい方法がないか検証中 まだUITestはベストプラクティスが見つけれてない感じあるので今後も検証は続けていきます!
Thanks! ご清聴ありがとうございました! 質問などありましたらTwitterなどでメンションいただければ(分かる範囲で)お答えします! Twitter:@azukiidx