5

Travis CI を Fastlane と組み合わせて使用​​し、自動ビルドと夜間の UI Espresso テストを行っています。インストルメンテーション テストでは、gcloud コマンドライン ツールを使用して Firebase Test lab を使用しようとしています。

作業しやすい形式でテスト結果を取得して、内部で Slack に報告できるようにしています。たとえば、いくつのテストが成功または失敗したか、どのテストが失敗したかなどです。

./google-cloud-sdk/bin/gcloud beta firebase test android run \
--type instrumentation \
--app ourapp/app/build/outputs/apk/mock/debug/app-mock-debug-local.apk \
--test ourapp/app/build/outputs/apk/androidTest/mock/debug/ourapp-mock-debug-androidTest.apk \
--device-ids hammerhead \
--os-version-ids 22 \
--locales en \
--orientations portrait \
--project ourappgoogleprojectid \
--timeout 15m

これにより、すべてテストが正常に実行され、Google Cloud Storage バケット内の生の結果への 2 つのリンクがランダムなリンクと次のようなログとともに出力されます。

Raw results will be stored in your GCS bucket at [https://console.developers.google.com/storage/browser/test-lab-vx5ak1y4tt3sw-yrzyhxjh4r1r6/]

13:25:59 Test is Pending
13:26:06 Starting attempt 1
13:26:06 Test is Running
13:26:46 Logging into the device
13:26:53 Installing APK: com.ourcompany.ourapp.debug
13:27:13 Installing APK: com.ourcompany.ourapp.test
13:27:33 Running instrumentation test. Package: com.ourcompany.ourapp.test testrunner: android.support.test.runner.AndroidJUnitRunner orchestrator: false options: []
13:34:34 Instrumentation test has finished
13:34:34 Generating video
13:34:41 Retrieving performance samples
13:35:00 Retrieving test artifacts
13:35:13 Retrieving any crash results
13:35:20 Retrieving logcat
13:35:53 Done. Test time=416 (secs)
13:36:00 Test is Finished

Instrumentation testing complete.

最後に、私が最も興味を持っているものを出力します。

┌─────────┬───────────────────────────┬──────────────────────┐
│ OUTCOME │      TEST_AXIS_VALUE      │     TEST_DETAILS     │
├─────────┼───────────────────────────┼──────────────────────┤
│ Passed  │ hammerhead-22-en-portrait │ 60 test cases passed │
└─────────┴───────────────────────────┴──────────────────────┘

しかし、結果の優れた、実行可能な、迅速な要約を得ることができるものは他にありません。

次の方法しかできないと思います。

grep/awk/sed/出力に表示されるバケット URL は何でも。しかし、その URL にはランダムな ID などがあります。次に、Travis の bash スクリプトから、何らかの方法でそのバケットに xml ファイルをダウンロードしようとします。ただし、すべてのテスト結果の xml は、テストが実行されたデバイスにちなんで名付けられたそれぞれのフォルダーにあります。たとえばhammerhead-22-en-portrait。簡単なテストの要約を取得するだけでも、このような手間がかかります。必要なのは、上に出力された表の情報だけです。

gcloud不足しているコマンド オプションはありますか? ドキュメントはひどいです。適切なxmlファイルをすぐにダウンロードするか、適切な情報などで環境変数を設定するオプションがあることを望んでいました.

または、そのテーブルから値を簡単に抽出する方法はありますか?

編集: Android Studio が、自動的にビルドし、apk をアップロードし、Firebase テスト ラボ マトリックスでテストを実行する実行構成のセットアップをサポートしていることを知りました。その後、Android Studio の [実行] タブに、すばらしいテスト レポートが表示されます。ここから、これらのテスト結果を HTML または XML にエクスポートできます。その XML はまさに私が欲しいものです。Android Studioがこれを行うために使用するツール、またはコマンドラインツールを使用して同じことを行う方法を誰かが知っていますか?

4

1 に答える 1

13

ここでは、あなたがやろうとしていることを助けるヒントをいくつか紹介します。

結果パスのデフォルトのランダム ID について: フラグを使用して、そのパスをより詳細に制御でき--results-dir=my/results/pathます (実行するテストごとに一意の値を選択してください)。--results-bucket=gs://my-bucketテスト結果が保存される最上位のバケットを制御するように指定することもできます。--results-bucket を使用する場合、GCP 請求先アカウントが必要であり、結果に対して Cloud Storage 料金が発生することに注意してください。提供されたデフォルトのバケットは無料で使用でき、そのバケットへのパスはスクリプト用に安定している必要があります。

gcloud firebase test android runコマンドのすべてのフラグ オプションは、ここに記載されているか、gcloud コマンドまたはコマンド スニペットに --help を追加して CLI 経由で文書化されています。

gsutil cp <src> <dst>これらのフラグを使用すると、コマンドを使用して生の結果から junit.xml ファイルを直接取得できるはずです。

gcloud の出力を直接解析する場合は、テスト結果テーブルが stdout に出力され、すべてのステータス更新が stderr に出力されることを知っておくと便利です。そのため、コマンドに追加することで、結果だけを分離でき1>results.outます。フラグを使用して出力テーブルの形式を制御することもできます--format=<format>(すべての gcloud コマンドで使用できます)。たとえば、--format=json 1>results.out上記のコマンドに追加すると、出力は次のようになります。

[
  {
    "axis_value": "hammerhead-21-en-portrait",
    "outcome": "Failed",
    "test_details": "5 test cases failed, 187 passed"
  }
]

を実行すると、gcloud 形式の詳細を確認できますgcloud topic formats

于 2017-07-12T17:28:14.663 に答える