【Xcode】XCUITest + fastlane/snapshotで始めるUIテスト(後編)
後編ではfastlane/snapshotを導入して、任意のタイミングでスクリーンショットを取得します。
前編はこちらから。
【Xcode】XCUITest + fastlane/snapshotで始めるUIテスト(前編) - 文系プログラマの勉強ノート
fastlane/snapshotとは
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テストディレクトリ以下に移動しました。
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 ディレクトリ以下に保存されます。
公式ドキュメントによると、ストア申請用にデバイスフレームをつけたりもできるようです。