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
680
運用プロジェクトにおける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
理論と実務のギャップを超える
eycjur
0
140
Flutterで分数(Fraction)を表示する方法
koukimiura
0
130
Claude CodeによるAI駆動開発の実践 〜そこから見えてきたこれからのプログラミング〜
iriikeita
0
220
そのpreloadは必要?見過ごされたpreloadが技術的負債として爆発した日
mugitti9
2
3.4k
CSC509 Lecture 03
javiergs
PRO
0
340
CSC509 Lecture 04
javiergs
PRO
0
300
monorepo の Go テストをはやくした〜い!~最小の依存解決への道のり~ / faster-testing-of-monorepos
convto
2
490
(Extension DC 2025) Actor境界を越える技術
teamhimeh
1
250
非同期jobをtransaction内で 呼ぶなよ!絶対に呼ぶなよ!
alstrocrack
0
910
bootcamp2025_バックエンド研修_WebAPIサーバ作成.pdf
geniee_inc
0
110
ALL CODE BASE ARE BELONG TO STUDY
uzulla
19
4.7k
いま中途半端なSwift 6対応をするより、Default ActorやApproachable Concurrencyを有効にしてからでいいんじゃない?
yimajo
2
420
Featured
See All Featured
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
Reflections from 52 weeks, 52 projects
jeffersonlam
353
21k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.5k
Designing Experiences People Love
moore
142
24k
Fireside Chat
paigeccino
40
3.7k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Building Better People: How to give real-time feedback that sticks.
wjessup
369
20k
How STYLIGHT went responsive
nonsquared
100
5.8k
Code Reviewing Like a Champion
maltzj
526
40k
Typedesign – Prime Four
hannesfritz
42
2.8k
Context Engineering - Making Every Token Count
addyosmani
6
250
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
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