Testing with Google Cloud Test Lab in CircleCI


# 概要

[Testing with Google Cloud Test Lab](https://circleci.com/docs/google-cloud-test-lab)の意訳。

# Google Cloud Test Labでのテスト
このガイドは現在β版で提供されいているGoogle Cloud Test Labのコマンドを元に作成しています。公式ドキュメントの[Overview](https://developers.google.com/cloud-test-lab/overview)を常に確認するようにしてください。

## 事前準備
CircleCIでCloud Test Labを使用する前に、以下のステップを完了させる必要があります。

### 1. gcloudのセットアップ

[Using Cloud Test Lab from the Command Line](https://developers.google.com/cloud-test-lab/command-line#choosing_test_configurations)を参考にGoogle Cloudのプロジェクトを作成し、Cloud Test LabのBetaプログラムへの参加を申請します。そしてローカルにGoogle Cloud SDK環境を構築しましょう。CircleCIにはGoogle Cloud SDKの利用環境がデフォルトで用意されいていますが、コマンドの挙動を確認したりする際にローカルにも環境が構築してあると役立ちます。

### 2. サービスアカウントの作成

サービスアカウントを作成します。サービスアカウントを利用することで、gcloudは人間の代わりにプログラムをユーザーとして扱います。これによって、スパムチェックを回避し、ブロックまたはcaptchaを要求されることからアカウントを防ぐことができます。[gcloud auth activate-service-account command](https://cloud.google.com/sdk/gcloud/reference/auth/activate-service-account)を参考にサービスアカウントの作成と有効化を行ってください。

### 3. 必要なAPIの有効化

サービスアカウントでログイン後、[Google Developers Console](https://console.developers.google.com/)でGoogle Cloud Testing APIとCloud Tool Results APIを有効化します。これらのAPIを有効にするためには、コンソール上部の検索窓にAPI名を入力し、APIの概要ページで「APIを有効にする」をクリックします。

## CircleCIのセットアップ

もしあなたがCircleCIのユーザーで無いのならば、[Getting Started guide](https://circleci.com/docs/getting-started)を参考にすることでセットアップをすぐに完了できます。

また、このセクションでは、説明のためのサンプルとしてNotepad example Android appを使用します。

### プロジェクトの設定と環境変数

以前のセクションでサービスアカウントを作成した際に拡張子が`.json`となっているprivate keyがダウンロードされたと思います。CircleCIが`gcloud`を認証するために、CircleCIはこのkeyへアクセスする必要があります。しかし、keyをバージョンコントロール下で直接管理するのはセキュリティ的にスマートなやり方ではありません。

keyを直接管理する代わりにCircleCIの環境変数を利用して認証させましょう。どうすればいいかは[こちら](http://qiita.com/Horie1024/items/54fd0611a6def88fde22)を参照してください。

### circle.yml

```bash:
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への認証を行います。上記サンプルのプロジェクト名は適宜置き換えてください。

```bash
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の両方でテスト結果を利用することができます。