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
640
運用プロジェクトにおける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
Cursor AI Agentと伴走する アプリケーションの高速リプレイス
daisuketakeda
1
130
生成AIコーディングとの向き合い方、AIと共創するという考え方 / How to deal with generative AI coding and the concept of co-creating with AI
seike460
PRO
1
350
エンジニア向け採用ピッチ資料
inusan
0
180
dbt民主化とLLMによる開発ブースト ~ AI Readyな分析サイクルを目指して ~
yoshyum
2
240
アンドパッドの Go 勉強会「 gopher 会」とその内容の紹介
andpad
0
290
Webの外へ飛び出せ NativePHPが切り拓くPHPの未来
takuyakatsusa
2
460
Azure AI Foundryではじめてのマルチエージェントワークフロー
seosoft
0
150
AIエージェントはこう育てる - GitHub Copilot Agentとチームの共進化サイクル
koboriakira
0
480
datadog dash 2025 LLM observability for reliability and stability
ivry_presentationmaterials
0
420
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
380
ソフトウェア品質を数字で捉える技術。事業成長を支えるシステム品質の マネジメント
takuya542
0
470
イベントストーミング図からコードへの変換手順 / Procedure for Converting Event Storming Diagrams to Code
nrslib
1
570
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
51
8.5k
A Modern Web Designer's Workflow
chriscoyier
694
190k
Gamification - CAS2011
davidbonilla
81
5.3k
Mobile First: as difficult as doing things right
swwweet
223
9.7k
Agile that works and the tools we love
rasmusluckow
329
21k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
107
19k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.9k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
138
34k
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