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

swift-snapshot-testingでVisual Testingを効率化

Sato Takeshi
December 18, 2020

swift-snapshot-testingでVisual Testingを効率化

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

参考
メルペイ iOS にスナップショットテストを導入した話https://engineering.mercari.com/blog/entry/ios-snapshot-test-case/

Sato Takeshi

December 18, 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. 今日話すこと
 • Snapshot Testingの位置づけ
 • メルペイが実施していたSnapshot Testing
 • swift-snapshot-testingの紹介
 •

    swift-snapshot-testingの苦手分野
 • swift-snapshot-testingの導入方針
 • 実行端末を削減して実行時間を短縮
 • 出力画像ガチャ問題
 • Snapshot Testingを開発フローに導入しやすくする

  3. Snapshot Testingの位置づけ
 種類 目的 実行時間 Unit Test ロジックを担保する 小 Snapshot

    Testing Viewの画像を出力しレイアウトを 確認 中 UI Test 実際のユーザーとほぼ同じ環境で アプリを動かし動作を確認 大
  4. 公式のIssue
 • Test results depends on Mac device #109
 ◦

    2019年10月投稿
 ◦ https://github.com/uber/ios-snapshot-test-case/issues/109
 • Catalinaにバージョンアップしたときから画像の差異が出るように なった
 • Xcode 11からシュミレーターのプロセスにGPUが使われるようになっ たそう
 ◦ GPUのベンダーによって処理が異なる?
 • 透過処理の画像を使うと時々差異が出てしまう

  5. swift-snapshot-testingとは?
 • Swiftと関数型言語を解説するWebマガジンPoint-Freeが運営
 • Swiftで実装
 • 各端末の画面サイズのプリセットあり
 ◦ iPhoneSE, 8,

    8 Plus, X, XsMax, Xr, iPadMini など
 ◦ iPadは縦向き、横向きを指定可能
 • 画像だけでなく、View階層をtextファイルに出力も可能
 • Dynamic TypeのSnapshot Testにも対応
 • SwiftUI対応

  6. 出力画像ガチャ問題
 • どうやっても解決できず
 • iOSSnapshotTestCaseもswift-snapshot-testingも画像出力処理は 同じ実装
 • しきい値を下げることで解決
 ◦ precisionプロパティ


    • swift-snapshot-testingではrecursiveDescriptionでView階層をtext に出力できる
 • recursiveDescriptionをもってレイアウト変更がないことの担保をする