Magic Podの使い方 > 一括テスト実行・コマンドラインテスト実行(モバイルアプリテスト)
このページでは、Magic Podでテストの一括実行をする方法と、コマンドラインからテストを実行する方法を説明します。
目次
画面からのテスト一括実行
Magic Podでは、プロジェクトの全てのテストを一括で実行できます。一括実行を行うには、プロジェクトの画面から「Batch runs」タブを選択して、テスト一括実行ページに移動します。(図1)
この画面でターゲットOSとテスト対象アプリを指定し(図2)、「Run new batch」ボタンを押します。
するとクラウド環境の場合はクラウド上で、ローカルPC環境の場合はMagic Pod Desktopが起動して、テストが始まります。ブラウザ上でページを一度読込すると、batch runの一覧に実行中のテストが追加されているのが確認できます(図3)。
その後テストが完了すると「成功/失敗」のステータスや実行時間などをブラウザ上で確認できます(図4)。
一覧の右側にある「>」リンクをクリックすると、さらにテストごとの結果を確認することができます(図5)。
右側の「>」リンクをさらにクリックすると、テスト実行の詳細なログを確認できます。テストが失敗していた場合は、図6のようにエラーの内容やエラー時の画面キャプチャも確認できます(図6)。
テストが完了すると、テスト結果がプロジェクトの全メンバーにメール配信されます。(図7)
複数種類の端末に対するテスト一括実行 (外部クラウドサービス)
外部クラウドサービスを使っている場合、図8の「端末パターン」を追加ボタンを押すことで、複数種類のバージョン・機種の組み合わせに対し、まとめてテスト一括実行を行う設定を作成できます。
- Remote TestKitの場合、利用した端末の返却処理のために、テスト開始時に10分間の待機処理が発生することがあります。
- デフォルトでは1種類の端末のテストが終わるまで次の端末でのテストは実行されません。BrowserStackやRemote TestKitで複数端末で並列にテストを実行できるプランを契約している場合、Magic Pod側で図9のように同時並列数を指定することで、複数種類の端末で並列でテスト実行することができます。
コマンドラインからのテスト一括実行 (クラウド・外部クラウドサービス)
Magic Podのクラウド端末や外部クラウドサービスを使ったテストの場合、Web API経由で簡単に一括実行することが可能です。
手順としては、テスト一括実行画面でテスト対象を設定した後、図10のように、この設定で実行可能なコマンドをcurl(Mac/Linuxの場合)やInvoke-RestMethod(WindowsのPowerShellの場合)の形式で取得できます。
Web APIの詳細な仕様は、ユーザーメニューの「APIトークン」>「APIドキュメント」から確認できます。(図11)
magic-pod-api-client
curlやInvoke-RestMethod形式の場合、一括テスト実行が完了するまで待ってテスト結果をチェックすることができません(テスト結果はMagic Podの画面やテスト結果メールで確認する必要があります)。magic-pod-api-clientを使えばこの問題を解消できます。
magic-pod-api-clientを使うには、こちらのページから利用するOSに応じて、linux64_magic-pod-api-client.zip、mac64_magic-pod-api-client.zip、win64_magic-pod-api-client.exe.zipのいずれかをダウンロード、解凍し、適当な場所に配置します。
あとは、図10の「magic-pod-api-client形式でコピー」の機能を使って、magic-pod-api-clientを呼び出すコマンドを簡単に取得できます。
コマンドラインからのテスト一括実行 (ローカルPC)
ローカルPC環境の場合、テストの一括実行は、MacのコマンドラインからMagic Pod Desktopを使って行います。Windows(Webアプリケーションのテスト)の場合についてはこちらを参照してください。
設定ファイルを記述
まずは、テストのコマンドライン実行に必要な設定ファイルの記述を行います。
Magic Pod Desktopを一度でも起動していれば、ディレクトリ「/Users/<ユーザー名>/Library/Application Support/magic_pod_desktop」に「magic_pod_config.json」というファイルがあるはずなので(これがMagic Pod Desktopが利用している設定ファイルです)、これをデスクトップなど適当な場所にコピーします。
コピーしたら、図12の形式に従い設定ファイルをJSON形式で記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
{ "owner": <組織名。表示名でなくURL中のアルファベット表記のもの>, "project": <プロジェクト名。表示名でなくURL中のアルファベット表記のもの>, "capabilities": <ターゲットOSや対象アプリの設定。AppiumのCapabilitiesと同じ>, "sendMail": <テスト結果メールを配信するか。省略するとfalse>, "captureType": <テスト結果画面キャプチャの設定。on_error、on_ui_transit、on_each_stepのいずれか。省略するとon_each_step>, "xmlTestOutput": <JUnit形式のテスト結果XMLを出力するか。主にJenkins連携用。省略するとfalse>, "workDir": <作業ディレクトリのフルパス。省略するとデスクトップの「magicPod」>, "authTokenFilePath": <認証トークンファイルのフルパス。省略すると~/.magic_pod_token> "envVars": <KEY=VALUE形式の環境変数文字列のリスト。省略すると空リスト>, "testNumber": <実行対象のテスト番号をカンマ区切りで記載。空または省略すると全テストを実行。特定のテストを複数回実行したい場合は「1*100」のように記載(この例ではテスト番号1を100回実行)>, "includedTestCaseLabels": <テスト対象のラベルを文字列リスト形式で指定>, "excludedTestCaseLabels": <テスト対象外のラベルを文字列リスト形式で指定>, "logLevel": <ログを出す量の設定。beginner、expert、magic_pod_bug_investigationのいずれか。省略するとbeginner>, "retryCount": <失敗したテストを最大何回リトライするか。省略すると0(つまりリトライはしない)>, "externalAppium": <Magic Pod Desktopの外部のAppiumサーバを使用するか。省略するとfalse>, "externalAppiumUrl": <externalAppiumがtrueの場合、接続するAppiumサーバのURLを指定します。>, "language": <テスト実行ログの表示言語。jaまたはen。省略するとen> } |
共有変数を指定する場合はこちらを参考にしてください。
以上を踏まえると、設定の記述は、例えば図13のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ "owner": "TRIDENT", "project": "SampleApp", "capabilities": { "platformName": "iOS", "platformVersion": "10.3", "deviceName": "iPhone 7 Plus", "app": "/Users/<yourUserName>/magic_pod_demo_app.app", "automationName": "XCUITest" }, "sendMail": true, "workDir": "/Users/<yourUserName>/magic-pod-work" } |
テストを実行
設定ファイルを作成したら、以下の手順でテストを実行します。
- Magic Pod Desktopが起動している場合は終了しておきます。
- Macのターミナル上でMagic Pod Desktopのあるディレクトリに移動します。
- 次のコマンドを実行します。
1234# Magic Pod Desktopの最新版があれば更新"Magic Pod Desktop.app/Contents/MacOS/Magic Pod Desktop" update --magic_pod_config="<magic_pod_config.jsonのフルパス>"# テスト一括実行"Magic Pod Desktop.app/Contents/MacOS/Magic Pod Desktop" run --magic_pod_config="<magic_pod_config.jsonのフルパス>"
- magic_pod_config.jsonの設定に従い、テストが実行されます。テストが成功した場合はプロセスの返り値は0、失敗した場合は1、異常終了した場合は-1になります。
magic_pod_config.jsonをコピーすれば、他のMac PCでも同様にしてコマンドライン実行が可能です。
ただし、認証情報だけではmagic_pod_config.jsonに保存されていないので、一度Magic Pod Desktopを起動してメールアドレスとパスワードを入力し、認証情報をPCに保存しておく必要があります。
コマンドラインからの並列実機テスト一括実行 (ローカルPC)
複数のテストをローカルPCに接続した実機で並列に実行する場合は、iOSの場合は図14、Androidの場合は図15のようなmagic_pod_config.jsonを複数用意し、複数の実機を1つのPCに接続した上で、それぞれのmagic_pod_config.jsonを指定してMagic Pod Desktopを実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ .... "capabilities": { "udid": "<端末のUDID>", "wdaLocalPort": <他の設定と重複しないポート番号>, "webkitDebugProxyPort": <他の設定と重複しないポート番号>, .... }, "internalAppiumPort": <他の設定と重複しないポート番号>, "internalMagicPodPort": <他の設定と重複しないポート番号>, "workDir": "<他の設定と重複しないディレクトリ>", .... } |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ .... "capabilities": { "udid": "<端末のUDID>", "systemPort": <他の設定と重複しないポート番号>, "chromeDriverPort": <他の設定と重複しないポート番号>, .... }, "internalAppiumPort": <他の設定と重複しないポート番号>, "internalMagicPodPort": <他の設定と重複しないポート番号>, "workDir": "<他の設定と重複しないディレクトリ>", .... } |
端末のudidは、端末をUSBでマシンに接続した上で、iOSの場合はコマンドinstruments -s devices で(iOSシミュレータの情報もたくさん表示されるので注意してください。)、Androidの場合はコマンド ~/Library/Android/sdk/platform-tools/adb devices で取得することができます。