Slide 1

Slide 1 text


 複数端末のつらさを
 乗り越えて
 iOS UITestを実行
 merpay Tech Talk ~for iOS Engineers~
 2021 年 3 月 18 日 
 #merpay_techtalk


Slide 2

Slide 2 text

Who am I
 ● Name
 ● 佐藤剛士(さとうたけし)
 ● Company
 ● Merpay, Inc.(2019/01 ~)
 ● Role
 ● Software Engineer (iOS)
 ● Account
 ● Twitter: @hatakenokakashi
 ● Facebook: 佐藤剛士
 ● GitHub: SatoTakeshiX


Slide 3

Slide 3 text

https://www.youtube.com/watch?v=0XGRjJBZKEY

Slide 4

Slide 4 text

今日話すこと
 ● 現状のメルペイiOSチームのUITest
 ● iOS 12をCircleCIで実行
 ● iOS 12のXCUIElementQuery
 ● iOS 14.2におけるSafariの不具合


Slide 5

Slide 5 text

現状のメルペイiOSチームのUITest


Slide 6

Slide 6 text

UITest CircleCIパス件数
 平均 120件数 40件数 2020年9月
 2021年3月


Slide 7

Slide 7 text

実行OS
 2020年9月
 2021年3月
 iOS 13
 iOS 12
 iOS 13
 iOS 14


Slide 8

Slide 8 text

iOS 12をCircleCIで実行


Slide 9

Slide 9 text

https://circle-macos-docs.s3.amazonaws.com/image-manifest/v4519/index.html

Slide 10

Slide 10 text

iOS 12 SDKをインストール
 config.yml


Slide 11

Slide 11 text

CircleCIのworkflow
 ● iOS 14, 13, 12ごとにjobを走らせる
 ● 一つのjobで「アプリのビルド」「UITest実行」をする
 ● 各jobを並列実行させる


Slide 12

Slide 12 text

‘Unable to write data’ Error


Slide 13

Slide 13 text

‘Unable to write data’ Error
 report.xcresultが 書き込めない様子

Slide 14

Slide 14 text

SSHして容量確認
 ● 失敗したJobにSSHでログインして容量確認


Slide 15

Slide 15 text

SSHして容量確認
 ● 失敗したJobにSSHでログインして容量確認
 そもそも30GBしか 容量がない

Slide 16

Slide 16 text

利用しているファイルの規模
 ● もともとインストールされているruntime
 ○ iOS 13, iOS 14, tvOS, watchOS
 ■ それぞれ数GB
 ● プロジェクトファイル
 ○ CocoaPods, Carthageを含めると数GBに膨らむ
 ● さらにそこにiOS 12 runtimeをインストール
 ○ プラス数GB
 ● UITestのテスト結果、report.xcresult
 ○ 数百MB


Slide 17

Slide 17 text

利用しているファイルの規模
 ● もともとインストールされているruntime
 ○ iOS 13, iOS 14, tvOS, watchOS
 ■ それぞれ数GB
 ● プロジェクトファイル
 ○ CocoaPods, Carthageを含めると数GBに膨らむ
 ● さらにそこにiOS 12 runtimeをインストール
 ○ プラス数GB
 ● UITestのテスト結果、report.xcresult
 ○ 数百MB
 Disk Full Error!

Slide 18

Slide 18 text

最初に他のSDKを削除する
 ● iOS 12のjobの最初に実行
 ● シュミレーターとデフォルトインストールのruntimeを削除
 config.yml


Slide 19

Slide 19 text

iOS 12のXCUIElementQuery


Slide 20

Slide 20 text

iOS 12のXCUIElementQuery
 
 
 iOS 12 Button, 0x6000024e3100, {{203.0, 475.5}, {145.0, 29.0}}, label: '振込申請とスケジュール ’ iOS 13 Button, 0x600000754700, {{203.0, 475.5}, {145.0, 29.0}}, label: '振込申請とスケジュール ' StaticText, 0x6000007547e0, {{203.0, 481.5}, {145.0, 17.0}}, label: '振込申請とスケジュール ' iOS 13にはStaticText要素が取得できる

Slide 21

Slide 21 text

Buttonのテキストを確認したい
 ● 「¥5000 | P0」という文字列を確認し たい
 ● Buttonの中のテキストなのでiOS 12 では検索ができない
 iOS 12 Button, 0x6000017841c0, {{193.7, 319.0}, {165.3, 48.0}}, identifier: 'com.merpay.merpay_mercari_wallet_kit.cash_in_control_view.switch_bu tton_view'

Slide 22

Slide 22 text

iOS 12のみキャプチャを撮影


Slide 23

Slide 23 text

iOS 12のみキャプチャを撮影
 iOS 12のみ画面キャプチャを撮影

Slide 24

Slide 24 text

iOS 12のみキャプチャを撮影
 テスト自体をSkipする

Slide 25

Slide 25 text

TestRailに結果を送信
 ● テスト結果をTestRailで管理
 ● テスト結果をSkippedにし、キャプチャを添付する
 ● あとで目視でチェックしOKならテストを成功とみなす


Slide 26

Slide 26 text

iOS 14.2以上における
 Safariの不具合


Slide 27

Slide 27 text

UITestでSafariアプリを利用
 
 
 
 ● Safariを立ち上げURLを入力する
 ● Deep Linkで特定の画面に遷移するテストの一環


Slide 28

Slide 28 text

iOS 14.2以上におけるSafariの不具合
 ● iOS 14.2 以上からSafariの検索バーをタップす るとアプリが落ちるようになった
 ● どうやらSiri Suggestionsの機能が呼び出せなく なっている


Slide 29

Slide 29 text

launchArgumentsに--Uオプションを使う
 ● Safariに--Uオプションを使うと指定したURLを入力した状態でアプリ が立ち上がる
 ● iOS 12.2以上から--Uオプションが使える
 https://github.com/appium/appium/issues/12517


Slide 30

Slide 30 text

まとめ


Slide 31

Slide 31 text

まとめ
 ● メルペイUITestの現状
 ● CircleCIでiOS 12をインストール
 ● Disk Full Errorの解消
 ● iOS 12で検索できないUI要素はキャプチャ+Skip
 ● iOS 14.2のSiri Suggestionsの不具合はSafariに--Uオプションで立ち 上げる


Slide 32

Slide 32 text

参考文献
 ● iOSDC Japan 2020: XCUITestのつらさを乗り越えて、iOSアプリに UITestを導入する
 ● https://github.com/xcpretty/xcode-install
 ● Safari not opening with supplied launch argument on real device iOS 12.2 #12517