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
780
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
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
420
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
190
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
300
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
hanhan1978
4
1.4k
Claude Opus 4.6以後の受託開発エンジニアの変化(Claude Code開発ノウハウ大公開スペシャルbyクラスメソッド)
iidatakuma
1
900
What's New in Android 2026
veronikapj
0
240
数百円から始めるRuby電子工作
tarosay
0
120
ここ半年くらいでAIに作らせたR用ツール
eitsupi
0
340
SREの積み重ねがAI駆動開発のガードレールになった ― 7つの実践/SRE Guardrails The 7
tomoyakitaura
9
5.8k
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
190
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
3
700
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
180
Featured
See All Featured
Accessibility Awareness
sabderemane
1
160
So, you think you're a good person
axbom
PRO
2
2.1k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
67
56k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.7k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
400
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
330
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
72
41k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
390
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
470
From π to Pie charts
rasagy
0
240
Designing for humans not robots
tammielis
254
26k
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