Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
CIを用いたAndroidのAPI29以上でのVisual_Regression_Test_...
Search
MasatoHaruta
May 21, 2024
16
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CIを用いたAndroidのAPI29以上でのVisual_Regression_Test__1_.pdf
MasatoHaruta
May 21, 2024
More Decks by MasatoHaruta
See All by MasatoHaruta
CIを用いたAndroidのAPI29以上でのVisual_Regression_Test.pdf
blurfour
0
89
CIを用いたAndroidのAPI29以上でのVisual_Regression_Test__2_.pdf
blurfour
0
27
Featured
See All Featured
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
600
Designing Powerful Visuals for Engaging Learning
tmiket
1
610
Speed Design
sergeychernyshev
33
2.2k
Navigating Team Friction
lara
192
16k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Large-scale JavaScript Application Architecture
addyosmani
516
110k
From π to Pie charts
rasagy
1
400
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.7k
Rails Girls Zürich Keynote
gr2m
96
14k
Designing for Timeless Needs
cassininazir
1
530
Transcript
00 自己紹介 ©NewsPicks Inc. All Rights Reserved. Masato Haruta
NewsPicks Androidエンジニア
CIを用いたAndroidのAPI29以上での Visual Regression Test Last updated:2024.05.21 NewsPicks Android Engineer /
Masato Haruta
1. VRT導入経緯 2. API28の壁 3. API29以上でVRTを手動実行する方法 4. VRTとCIを連携し、毎晩自動実行する 5. まとめ
00 目次 ©NewsPicks Inc. All Rights Reserved.
01 VRT導入経緯 ©NewsPicks Inc. All Rights Reserved. 特定のユーザーに対してや特定のタイミングでしか出ないモジュールがあったり、 実装上の都合で影響が広範囲に及ぶケースもあるため、
確認事項も多いことから抜け漏れが多々あった。 VRTを自動化して毎晩テストをすることで上記は解消できそうだ、となり導入することになりました。
02 API28の壁 ©NewsPicks Inc. All Rights Reserved. 2023年夏頃導入決定(この時の最新OSはAPI33) 見渡す限り参考になりそうな導入事例サイトは全て API28以下のものばかり
試しにAPI29にして、多くの参考サイトで使われていた Google製のScreenShotterで動作させてみる→ どうやらスクリーンショットを保存する場所が NG ※ScreenShotterを使う最大のメリットは、スクリーンショットを撮ったら端末内への保存及びテスト実行 環境のローカルにコピーしてくれるという 2つだが、これがAPI29以上ではエラーになるため使えない
03 API29以上でVRTを手動実行する方法 ©NewsPicks Inc. All Rights Reserved. スクリーンショットを保存する場所を変えればよかったので諸々の理由から /sdcard/Android/media/com.hoge/
に置くことで回避しました (上記パスはgetExternalMediaDirsで取得したものになります ) 実際にスクリーンショットを撮る方法ですが、 UiDevice#takeScreenshotを採用しました ここまで来たら、reg-cliを使って正解データと端末保存されたデータで VRTが実行可能となります 例えば以下のような adbコマンドで簡単に端末保存されたものを取り出せます $ adb pull $(adb shell 'ls /sdcard/Android/media/com.hoge/screenshottest_*.png') .
04 VRTとCIを連携し、毎晩自動実行する ©NewsPicks Inc. All Rights Reserved. 1. CI経由でFirebaseTestLabにあるAndroid端末を起動し、テストを実行
2. テスト実行内で所定の画面のスクリーンショットを撮り、端末内に保存 3. 上記2で端末内に保存したスクリーンショットを実行環境のローカルにコピー 4. reg-suitを用いて上記3でコピーしたスクリーンショットと、予め GoogleCloudStorageに置いてあ る正解データとでテストを実行 5. 結果をSlackに通知
04 実装例1(bitrise.ymlのFirebase設定部分抜粋) ©NewsPicks Inc. All Rights Reserved. - virtual-device-testing-for-android@1: inputs:
- test_type: instrumentation - test_timeout: '3600' - inst_test_targets: "$E2E_CLASS" - test_devices: MediumPhone.arm,30,en,portrait - environment_variables: additionalTestOutputDir=/sdcard/Android/media /com.hoge/ - directories_to_pull: /sdcard/Android/media/com.hoge/ - download_test_results: “true" • environment_variables: additionalTestOutputDir は前述のス クリーンショット保存時エラー回避で取 得したパスを入れる • directories_to_pullは、テスト完了後に デバイスのストレージからダウンロード されるパスになる • download_test_resultsは、false に設 定するとダッシュボードにのみダウン ロードされるようになる
04 実装例2(bitrise.ymlのファイルコピー部分抜粋) ©NewsPicks Inc. All Rights Reserved. 以下スクリプトをbitrise.ymlに追記することでテスト端末から CIのローカルに取り出します。 (取り出し時
ファイルをreg-suitのためにリネームします ) ${VDTESTING_DOWNLOADED_FILES_DIR}はBitriseでVirtualDeviceTesting実行時 ファイルが一次保存される場所を示した環境変数です $SAVED_ACTUAL_DIRは実行環境ローカル保存パスが入る $IMAGE_PREFIXは端末内保存パスが入 る(oriole-30-en-portrait_artifacts/sdcard/Android/media/com.hoge/) $ mv ${VDTESTING_DOWNLOADED_FILES_DIR}/screenshottest_*.png ./${SAVED_ACTUAL_DIR}/ $ cd ${SAVED_ACTUAL_DIR} $ ls | sed -r "s/($IMAGE_PREFIX)(screenshottest[_a-z0-9]+)\.png/mv & \2.png/g" | bash
04 実装例3(bitrise.ymlのreg-suit実行部分抜粋) ©NewsPicks Inc. All Rights Reserved. reg-suitで画像比較検証を行います。
API28以下もAPI29以上も、予めGoogle Cloud Storageに置いてある正解データ とローカルに移動してきたスクショを比較 検証します。 テストフロー④と⑤を実行します。 Bitriseで対話式のプラグインインストール を何も考えず行うとFailしていたため以下 のように echo N | を用いて回避する必 要がありました。 npm install -g reg-suit npm install # Pluginのインストール npm i reg-notify-slack-plugin -D echo N | reg-suit prepare -p notify-slack npm i reg-publish-gcs-plugin -D echo N | reg-suit prepare -p publish-gcs npm i reg-simple-keygen-plugin -D echo N | reg-suit prepare -p simple-keygen # 実行 reg-suit run
04 まとめ ©NewsPicks Inc. All Rights Reserved. AndroidのOSが9から10になったことでストレージまわりの権限が厳しくなりました。
これにより、巷にある方法ではうまく VRTができませんでしたが Bitriseで指定しているFirebaseのパラメータについては、 公式ドキュメントも見当たらず実ソースから読み解くことでやりたいことが実現できました