文系プログラマの勉強ノート

スマホアプリ開発やデザインなどについて勉強したことをまとめています

【Xcode】XCUITest + fastlane/snapshotで始めるUIテスト(後編)

後編では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