$30 off During Our Annual Pro Sale. View Details »

複数端末のつらさを乗り越えてiOS UITestを実行

複数端末のつらさを乗り越えてiOS UITestを実行

merpay Tech Talk ~for iOS Engineers~
https://mercari.connpass.com/event/205129/

「参考文献」
iOSDC Japan 2020: XCUITestのつらさを乗り越えて、iOSアプリにUITestを導入する
https://speakerdeck.com/satotakeshi/xcuitestfalseturasawocheng-riyue-ete-iosahuriniuitestwodao-ru-suru

https://github.com/xcpretty/xcode-install

Safari not opening with supplied launch argument on real device iOS 12.2 #12517
https://github.com/appium/appium/issues/12517

Sato Takeshi

March 18, 2021
Tweet

More Decks by Sato Takeshi

Other Decks in Technology

Transcript


  1. 複数端末のつらさを

    乗り越えて

    iOS UITestを実行

    merpay Tech Talk ~for iOS Engineers~

    2021 年 3 月 18 日 

    #merpay_techtalk


    View Slide

  2. Who am I

    ● Name

    ● 佐藤剛士(さとうたけし)

    ● Company

    ● Merpay, Inc.(2019/01 ~)

    ● Role

    ● Software Engineer (iOS)

    ● Account

    ● Twitter: @hatakenokakashi

    ● Facebook: 佐藤剛士

    ● GitHub: SatoTakeshiX


    View Slide

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

    View Slide

  4. 今日話すこと

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

    ● iOS 12をCircleCIで実行

    ● iOS 12のXCUIElementQuery

    ● iOS 14.2におけるSafariの不具合


    View Slide

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


    View Slide

  6. UITest CircleCIパス件数

    平均
    120件数
    40件数
    2020年9月
 2021年3月


    View Slide

  7. 実行OS

    2020年9月
 2021年3月

    iOS 13
 iOS 12
 iOS 13
 iOS 14


    View Slide

  8. iOS 12をCircleCIで実行


    View Slide

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

    View Slide

  10. iOS 12 SDKをインストール

    config.yml


    View Slide

  11. CircleCIのworkflow

    ● iOS 14, 13, 12ごとにjobを走らせる

    ● 一つのjobで「アプリのビルド」「UITest実行」をする

    ● 各jobを並列実行させる


    View Slide

  12. ‘Unable to write data’ Error


    View Slide

  13. ‘Unable to write data’ Error

    report.xcresultが
    書き込めない様子

    View Slide

  14. SSHして容量確認

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


    View Slide

  15. SSHして容量確認

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

    そもそも30GBしか
    容量がない

    View Slide

  16. 利用しているファイルの規模

    ● もともとインストールされているruntime

    ○ iOS 13, iOS 14, tvOS, watchOS

    ■ それぞれ数GB

    ● プロジェクトファイル

    ○ CocoaPods, Carthageを含めると数GBに膨らむ

    ● さらにそこにiOS 12 runtimeをインストール

    ○ プラス数GB

    ● UITestのテスト結果、report.xcresult

    ○ 数百MB


    View Slide

  17. 利用しているファイルの規模

    ● もともとインストールされているruntime

    ○ iOS 13, iOS 14, tvOS, watchOS

    ■ それぞれ数GB

    ● プロジェクトファイル

    ○ CocoaPods, Carthageを含めると数GBに膨らむ

    ● さらにそこにiOS 12 runtimeをインストール

    ○ プラス数GB

    ● UITestのテスト結果、report.xcresult

    ○ 数百MB
 Disk Full Error!

    View Slide

  18. 最初に他のSDKを削除する

    ● iOS 12のjobの最初に実行

    ● シュミレーターとデフォルトインストールのruntimeを削除

    config.yml


    View Slide

  19. iOS 12のXCUIElementQuery


    View Slide

  20. 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要素が取得できる

    View Slide

  21. 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'

    View Slide

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


    View Slide

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

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

    View Slide

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

    テスト自体をSkipする

    View Slide

  25. TestRailに結果を送信

    ● テスト結果をTestRailで管理

    ● テスト結果をSkippedにし、キャプチャを添付する

    ● あとで目視でチェックしOKならテストを成功とみなす


    View Slide

  26. iOS 14.2以上における

    Safariの不具合


    View Slide

  27. UITestでSafariアプリを利用




    ● Safariを立ち上げURLを入力する

    ● Deep Linkで特定の画面に遷移するテストの一環


    View Slide

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

    ● iOS 14.2 以上からSafariの検索バーをタップす
    るとアプリが落ちるようになった

    ● どうやらSiri Suggestionsの機能が呼び出せなく
    なっている


    View Slide

  29. launchArgumentsに--Uオプションを使う

    ● Safariに--Uオプションを使うと指定したURLを入力した状態でアプリ
    が立ち上がる

    ● iOS 12.2以上から--Uオプションが使える

    https://github.com/appium/appium/issues/12517


    View Slide

  30. まとめ


    View Slide

  31. まとめ

    ● メルペイUITestの現状

    ● CircleCIでiOS 12をインストール

    ● Disk Full Errorの解消

    ● iOS 12で検索できないUI要素はキャプチャ+Skip

    ● iOS 14.2のSiri Suggestionsの不具合はSafariに--Uオプションで立ち
    上げる


    View Slide

  32. 参考文献

    ● 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


    View Slide