Azure Pipelinesでappium screen recordingを試してみた
先日の日記でAzure Pipelinesを使ってAppiumの試験を走らせてみました。
Azure Pipelines便利に使わせてもらっていたのですが、テストが失敗したときのデバッグが辛かったので(あるある過ぎますが)、AppiumのScreen recordingの機能を使って失敗後に何が問題だったかデバッグできるようにしてみました。
テストスクリプト側の実装
まずはテストスクリプト側からAppiumのScreen recordingのAPIを叩いて画面を録画しましょう。
Start Screen Recording - Appium
Stop Screen Recording - Appium
appiumのscreen recordingのAPIはとっても簡単に扱えます。基本的に、録画開始時と終了時にAPIを叩くのみ。で、終了時に叩くAPIの返り値であるBase64 String formatをデコードしてファイルに書き出すだけです。
録画開始時と終了時に呼ぶ必要があるので、それぞれをpytestのsetup/teardown method内で呼ぶのが簡単で良いかと思います。さっそく書いてみたのが以下のコードになります。
順に説明していきますと、
- 10行目: setup関数内で
start_recording_screen
を呼び録画開始。 - 13行目: teardown関数内で
stop_recording_screen
を呼び録画終了。返り値をresultとして保存。 - 14~20行目: pythonのファイル保存のためのお作法ですね。
getcwd
で現在の作業ディレクトリを取得し、screen_recording
というフォルダを掘り、その中にscreen_recording_{current_time}.mp4
なファイルパスを作っています。 - 21行目:
base64.b64decode
を使ってstop_recording_screen
で取得したBase64 stringをデコードし、ファイルに保存しています。
TestVolleyBall
はPytestのテストクラスで、上記に記述されているsetup/teardown以外にも実際のテストケースがいくつか存在しています。なので、上記の処理がテストの初めと最後で都度実施され、それぞれのテストの実行画面が動画として保存されることになります。
テストスクリプト側は上記で完了となります。(簡単!)
Azure Pipelines側の対応
続いてAzure Pipelines側( azure-pipelines.yml
に対する修正)についてです。
ベースとなるazure-pipelines.yml
は前回の記事で使ったものとします。そのベースに対して、今回は
- 必要なパッケージ (ffmpeg) のインストール
- 録画データの保存
を追加していきます。
ffmpegのインストール
appiumのscreen recordingのAPIを使うにはffmpegがインストールされている必要がありますが、Azure Pipelinesで提供されているmacOSのイメージにはffmpegが入っていないようです。なので別途インストールが必要になります。
macではbrewを使って簡単にインストールが可能なので、そのようなステップをazure-pipelines.yml
に追加します。
- bash: | brew install ffmpeg
上記だけで、必要なパッケージが揃うはずです。
録画データの保存
録画データの保存のためには Azure Pipelinesのタスクである Publish Build Artifacts task
を使うことになります。
Publish Build Artifacts task - Azure Pipelines | Microsoft Docs
このタスクでは保存したいファイル (or フォルダ) を指定するだけで良いです。
- task: PublishBuildArtifacts@1 inputs: PathtoPublish: 'tests/screen_recording'
私のアプリのレポジトリの関係で、tests
というフォルダの下に(上述の通り)screen_recording
というフォルダを掘って録画ファイルを保存するので、そのフォルダを PathtoPublish
のinputs
として指定します。
設定は以上のみとなります。
結果
上記の実装を施したazure-pipelines.yml
がこちらになります。
ffmpegのインストール部分が37行目、録画ファイルの保存の箇所が48行目あたりにあるのがわかると思います。
一点注意して欲しいのが43行目。continueOnError
というoptionをbash
のタスク内で有効にしているのがわかると思います。Azure PipelinesのPipelineでは、Pipeline内のTaskが失敗するとその後の処理をスキップしてしまう仕様のようなので、このoptionを有効にすることで、bash
内のpytestでテストが失敗するケースでも動画を保存するようにすることができます。
実際にAzure Pipelinesを上記のymlを使って走らせビデオの保存に成功したときのスクリーンショットが以下になります。
保存した動画は画面右上のArtifactsのボタンからダウンロード可能です。
まとめ
今回はAzure Pipelinesからappiumで提供されているScreen recordingのAPIを使ってテスト実施中のデバイス(Simulator)の画面を録画・保存を試してみました。
便利に使わせてもらっているAzure Pipelinesですが、まだまだ遊ぶ余地がありそうなので、今後もがっつり遊び倒していきたいと思います。なんて言ったって無料ですし!
乞うご期待。