15
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

モバイル 自動化 / 自動テストAdvent Calendar 2017

Day 3

simctlでXcodeのUI Testの画面を録画する

Last updated at Posted at 2017-12-03

iOS Simulatorを管理するsimctlにはスクリーンショットやビデオ録画を行えるオプションioが存在します。

スクリーンショットについてはXCTestがXCode9でサポートしているため、あまりsimctlで行うことはないかもしれません。

しかし、画面のスクリーンショットでは画面遷移時などのアニメーションについてどのように表示されたか分かりにくいという点があります。
そこでUI Test時の画面をビデオ録画する方法を試してみました。

simctl ioコマンドについて

具体的にsimctlを使った録画の方法は以下のようになります。

$ xcrun simctl io デバイス名 recordVideo 動画ファイル名

コマンドを実行後録画が始まり、録画を終了する際はCTRL+Cで録画を終わります。

// 実行例
$ xcrun simctl io 'iPhone SE' recordVideo uitest.mov
...
pics: 357, gop size in sec: 30.000000
Recording... (Press CTRL+C to stop)
^C
Recording completed.

UI Testの動画を撮影する

次に実際にxcodebuild testを実行し、その際の動画を撮影してみます。
ざっくり言えば以下の手順をコードに落とし込む必要があります。

  1. simctlで録画開始
  2. UI Test実行
  3. テスト完了後に録画終了

今回は私はPythonで書いてみました。

# uitest_with_video_record.py

import subprocess
import signal

video_record = subprocess.Popen("xcrun simctl io 'iPhone SE' recordVideo uitest.mov", shell=True)
xcodebuild_test = subprocess.run("xcodebuild test -scheme VideoRecordingOfUITestUITests -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone SE,OS=11.1'", shell=True)
video_record.send_signal(signal.SIGINT)

これを実行するとUI Testが始まり、完了後にsimctlの録画が終了され、uitest.movという動画ファイルが生成されるわけです。

$ python uitest_with_video_record.py

生成された動画

uitest_half.gif

課題🤔

かなり適当にpython書いてしまったのでシミュレータの起動中も動画が録画されてしまってます。
xcodebuildの標準出力を監視してテストが開始される適切なタイミングで録画開始が出来るように改善したい。
デバイス名やファイル名などもちゃんとパラメタで受け取ったり出来るようにしたいですね。

15
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?