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

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

Avatar for Sato Takeshi Sato Takeshi
September 21, 2020

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

Avatar for Sato Takeshi

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