後編ではfastlane/snapshotを導入して、任意のタイミングでスクリーンショットを取得します。

前編はこちらから。
【Xcode】XCUITest + fastlane/snapshotで始めるUIテスト(前編) - 文系プログラマの勉強ノート


fastlane/snapshotとは

github.com

fastlaneは、iOS/Androidアプリのリリース作業を自動化するツール群です。
そのうちの一つであるsnapshotを使うと、UIテストをしながらストア申請時のスクリーンショットを自動作成できます。

開発環境

  • Mac OS Sierra
  • Xcode8.3
  • Swift3

導入手順

1.Xcode command line toolsをインストールする

ターミナルを起動し、Xcode command line toolsをインストールします

$ xcode-select --install
2.fastlaneをインストールする

ターミナルからRubygemsを使ってインストールします。
この他、Homebrew、Zipで入れる方法もあります

$ sudo gem update
$ sudo gem install fastlane -NV
3.snapshotを初期化する

snapshotを取りたいアプリの .xcodeproj ファイルがあるディレクトリに移動し、下記のコマンドを実行します。

$ cd /Users/xxx/XCUITestSample
$ fastlane snapshot init
$ sudo gem install fastlane -NV

下記のファイルが生成されます。

  • Snapfile
  • SnapshotHelper.swift
4.SnapshotHelper.swiftをプロジェクトに追加する

Xcodeを起動し、生成されたSnapshotHelper.swift をUIテストターゲットに追加します。
SnapshotHelper.swift は移動可なので、私はファイル本体も UIテストディレクトリ以下に移動しました。
f:id:an3714106:20170702105701p:plain

5.テストコードを編集する

前編で作成した ***UITests.swift の setUp() を修正します。

//XCUIApplication().launch()
let app = XCUIApplication()
setupSnapshot(app)
app.launch()

UIテストコード(ここではtestExample())のスクリーンショットを取得したい箇所に下記のコードを追加します。
""の文字列は任意の文字列です。画像ファイル名に使用されますので、重複しないようにします。

snapshot("ScreenShot_01")
6.Snapfileを編集する

スクリーンショットを取得したい端末と言語をSnapfileに記載します。
以下は iPhone7 の日本語の場合です。

devices([
  "iPhone 7",
  "iPhone 7 Plus",
])

languages([
  "en-US",
  "ja-JP",
])
7.fastlane/snapshotを実行する

ターミナルから下記のコマンドでfastlane/snapshotを実行します。
(snapshotを取りたいアプリの .xcodeproj ファイルがあるディレクトリで実行してください)

$ fastlane snapshot

設定ファイルやテストコードに問題がなければ、自動的にシミュレータが起動し、テストが実行されます。
完了すると screenshots/screenshots.html が表示されます。
screenshots/screenshots.html には作成されたスクリーンショットが環境別に一覧になっています。
画像は screenshots ディレクトリ以下に保存されます。

公式ドキュメントによると、ストア申請用にデバイスフレームをつけたりもできるようです。

参考URL

fastlane docs