Upgrade to Pro — share decks privately, control downloads, hide ads and more …

XCUITestのつらさを乗り越えて、iOSアプリにUITestを導入する

Sato Takeshi
September 21, 2020

 XCUITestのつらさを乗り越えて、iOSアプリにUITestを導入する

Sato Takeshi

September 21, 2020
Tweet

More Decks by Sato Takeshi

Other Decks in Technology

Transcript

  1. Who am I
 • Name
 • 佐藤剛士(さとうたけし)
 • Company
 •

    Merpay, Inc.(2019/01 ~)
 • Role
 • Software Engineer (iOS)
 • Account
 • Twitter: @hatakenokakashi
 • Facebook: 佐藤剛士
 • GitHub: SatoTakeshiX

  2. メルカリリリースタイムライン
 リリース
 ブランチ
 カット
 App Store
 リリース
 リグレッション
 テスト
 App

    Store
 申請
 2営業日
 2営業日
 1営業日
 定期的な作業を自動化で効率化!

  3. XCUITestの重要なクラス
 XCUIApplication
 • アプリを起動/停止するプロキシ
 • 環境変数を指定可能
 XCUIElementQuery
 • UI要素を検索するクエリー 


    • UI要素はXCUIElementとして取得
 XCUIElement
 • 検索されたUI要素 
 • UI操作や状態取得が可能 

  4. Page Object Patternとは
 • 画面単位(一部も可)でクラスを定義する
 • UI要素やその操作メソッドを定義する
 • UI要素はprivateにし、外部に公開しない
 •

    PageObjectの内部にアサーションは書かない
 • メソッドはPage Objectを返すとメソッドチェーンできて便利

  5. iOS13とiOS12でUI階層が異なる問題
 
 
 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要素が取得できる
  6. XCTestHTMLReportを使おう
 • XcodeのUnit Test, UITestの 結果をHTMLに変換してくれ るツール
 • Xcode 11から登場したResult

    Bundleも整形可能
 • CircleCI上で出力された xcresultファイルを変換する
  
 https://github.com/TitouanVanBelle/XCTestHTMLReport
  7. 参考文献
 • Appleの公式ドキュメント「Testing Your Apps in Xcode」の紹介
 • iOSアプリ開発自動テストの教科書
 •

    SeleniumHQ/selenium Page Objects
 • Swift での UI テストの雑なまとめ
 • https://github.com/TitouanVanBelle/XCTestHTMLReport