概要
Testing with Google Cloud Test Labの意訳。
Google Cloud Test Labでのテスト
このガイドは現在β版で提供されいているGoogle Cloud Test Labのコマンドを元に作成しています。公式ドキュメントのOverviewを常に確認するようにしてください。
事前準備
CircleCIでCloud Test Labを使用する前に、以下のステップを完了させる必要があります。
1. gcloudのセットアップ
Using Cloud Test Lab from the Command Lineを参考にGoogle Cloudのプロジェクトを作成し、Cloud Test LabのBetaプログラムへの参加を申請します。そしてローカルにGoogle Cloud SDK環境を構築しましょう。CircleCIにはGoogle Cloud SDKの利用環境がデフォルトで用意されいていますが、コマンドの挙動を確認したりする際にローカルにも環境が構築してあると役立ちます。
2. サービスアカウントの作成
サービスアカウントを作成します。サービスアカウントを利用することで、gcloudは人間の代わりにプログラムをユーザーとして扱います。これによって、スパムチェックを回避し、ブロックまたはcaptchaを要求されることからアカウントを防ぐことができます。gcloud auth activate-service-account commandを参考にサービスアカウントの作成と有効化を行ってください。
3. 必要なAPIの有効化
サービスアカウントでログイン後、Google Developers ConsoleでGoogle Cloud Testing APIとCloud Tool Results APIを有効化します。これらのAPIを有効にするためには、コンソール上部の検索窓にAPI名を入力し、APIの概要ページで「APIを有効にする」をクリックします。
CircleCIのセットアップ
もしあなたがCircleCIのユーザーで無いのならば、Getting Started guideを参考にすることでセットアップをすぐに完了できます。
また、このセクションでは、説明のためのサンプルとしてNotepad example Android appを使用します。
プロジェクトの設定と環境変数
以前のセクションでサービスアカウントを作成した際に拡張子が.json
となっているprivate keyがダウンロードされたと思います。CircleCIがgcloud
を認証するために、CircleCIはこのkeyへアクセスする必要があります。しかし、keyをバージョンコントロール下で直接管理するのはセキュリティ的にスマートなやり方ではありません。
keyを直接管理する代わりにCircleCIの環境変数を利用して認証させましょう。どうすればいいかはこちらを参照してください。
circle.yml
dependencies:
pre:
- sudo pip install -U crcmod
post:
- ./gradlew :app:assembleDebug -PdisablePreDex
- ./gradlew :app:assembleDebugTest -PdisablePreDex
- echo $CLIENT_SECRET | base64 --decode > ${HOME}/client-secret.json
- sudo /opt/google-cloud-sdk/bin/gcloud config set project circle-ctl-test
- sudo /opt/google-cloud-sdk/bin/gcloud --quiet components update
- sudo /opt/google-cloud-sdk/bin/gcloud --quiet components install beta
- sudo /opt/google-cloud-sdk/bin/gcloud auth activate-service-account --key-file ${HOME}/client-secret.json
まずcrcmod
のインストールから始めます。これは、Googleのgsutilツールを利用するために必要になります。
dependenciesセクションでは、debug apk
とtest apk
の両方をビルドしています。そして、その次にgcloud
のセットアップを行っています。ここでは、.json keyを再生成し、プロジェクトの指定やCloud Test Labを利用するためのbetaコマンドのインストール、そして再生成したkeyを使用してgcloudへの認証を行います。上記サンプルのプロジェクト名は適宜置き換えてください。
test:
override:
- echo "y" | sudo /opt/google-cloud-sdk/bin/gcloud beta test android run --app app/build/outputs/apk/app-debug.apk --test app/build/outputs/apk/app-debug-test-unaligned.apk --results-bucket cloud-test-circle-ctl-test
post:
- sudo /opt/google-cloud-sdk/bin/gsutil -m cp -r -U `sudo /opt/google-cloud-sdk/bin/gsutil ls gs://cloud-test-circle-ctl-test | tail -1` $CIRCLE_ARTIFACTS/ | true
testセクションでは、CircleCIのgradle test
のデフォルトのアクションを上書きし、その代わりにgcloudにCloud Test Labでのテストの実行を指示します。apkネームやGoogle Cloud StorageのURLについては、適切なものに置き換えてください。
postはtestセクションにおいてデフォルトアクションやpre、overrideより後に実行されます。ここでgsutil
を使うことでCircleCIのartifactsにbucketのもっとも新しいファイルをダウンロードすることができます。これによって、Google Cloud StorageとCircleCIの両方でテスト結果を利用することができます。