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
0
660
運用プロジェクトにおけるUITestの運用事例紹介
a_z_k
December 08, 2021
Tweet
Share
More Decks by a_z_k
See All by a_z_k
[Roppongi.unity #9] AddressableAssetSystemをプロダクトで使ってみた
azukizuki
0
1.5k
Other Decks in Programming
See All in Programming
JSONataを使ってみよう Step Functionsが楽しくなる実践テクニック #devio2025
dafujii
0
410
CloudflareのChat Agent Starter Kitで簡単!AIチャットボット構築
syumai
2
430
アプリの "かわいい" を支えるアニメーションツールRiveについて
uetyo
0
200
AIエージェント開発、DevOps and LLMOps
ymd65536
1
380
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
360
速いWebフレームワークを作る
yusukebe
5
1.7k
機能追加とリーダー業務の類似性
rinchoku
2
1.1k
MCPで実現するAIエージェント駆動のNext.jsアプリデバッグ手法
nyatinte
7
1.1k
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
240
Improving my own Ruby thereafter
sisshiki1969
1
160
2025 年のコーディングエージェントの現在地とエンジニアの仕事の変化について
azukiazusa1
18
9.7k
「待たせ上手」なスケルトンスクリーン、 そのUXの裏側
teamlab
PRO
0
300
Featured
See All Featured
Faster Mobile Websites
deanohume
309
31k
KATA
mclloyd
32
14k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
The Cult of Friendly URLs
andyhume
79
6.6k
The Straight Up "How To Draw Better" Workshop
denniskardys
236
140k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
840
Code Reviewing Like a Champion
maltzj
525
40k
The Language of Interfaces
destraynor
161
25k
Speed Design
sergeychernyshev
32
1.1k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
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