10
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Github Actionsを使って自動テストをした話

Posted at

はじめに

今回はGithub Actionsを使って自動テストをした話を紹介していきたいと思います。

自動テストのタイミング

PR出したタイミングとかPR出したブランチにpushしたタイミングでいいのでは?
と思う方もいるかもしれません。

Github Actionsはpublicなレポジトリだと無料ですが、Organizationで使うと従量課金制になっています。
テストの量が多い場合、push毎にCIを走らせてしまうととんでもない実行時間になってしまいます。

またPR出したタイミングで修正があることに気付き新しくpushした場合、その部分はグリーンになっている保証はありません。

なので今回はレビュワーがapproveしたタイミング(LGTMしたタイミング)で自動テストを回すようにしました。

PR出す→修正がある場合は新たにpush→レビュワーがapprove→テスト→成功でも失敗でもslackに通知

レビュー時にテストをする方法

自動テストのやり方などはググればたくさん出てくるんですが、approveされたらという条件が合致するものがなかったので苦労しました。

まずGithub Actionsのトリガーを見てみると、pull_request_reviewというのが出てきます。
これがレビューされた時のトリガーです。

今回筆者はアクティビティタイプをsubmittedだけにしました。
レビュワーがapproveしてくれたけど、コメントを編集した場合や、取り消しした場合に毎回走るのは嫌だったので追加したタイミングだけCIが走るようにしました。

次にプルリクエストをレビューした時のWebHookを見ていきます。
ここのpayloadを見ていくと、reviewの中にstateというのがあるのがわかります。
ここには

  • commented
  • approved
  • change_requested(これ合ってるかわからない)

の3つの要素が入ってきます。

なのでこれがapprovedの時だけCIを走らせればいい感じですね。

一旦全体を見ていきましょう


name: UnitTest

on:
  pull_request_review:
    types: [ submitted ]
    branches: [ master ]

jobs:
  test:
    if: github.event.review.state == 'approved'
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - name: set up JDK 1.8
        uses: actions/setup-java@v1
        with:
          java-version: 1.8
      - name: UnitTest
        run: ./gradlew testDebugUnitTest

細かい解説

トリガー


on:
  pull_request_review:
    types: [ submitted ]
    branches: [ develop ]

まずはトリガーから
レビューをした時に走らせたいのでpull_request_review
アクティビティタイプはsubmitted
ブランチは適当にmaster指定にしてますが、任意で設定してください

条件

jobs:
  test:
    if: github.event.review.state == 'approved'
    runs-on: ubuntu-latest

次にテストを走らせる条件
jobsをスタートしてジョブ名はtest(ここも任意で)
ifに条件を書いていきます。
github.eventでそのトリガーに合ったWebHookのペイロードを取得できます。
今回は上記でも説明したようにreviewの中のstateを使いたかったのでgithub.event.review.state

ちなみに記法として2パターンあって


if: github.event.review.state == 'approve'

でも


if: ${{ github.event.event.review.state == 'approve' }}

でもOK
確かシングルクオーテーションじゃなきゃダメだったので気をつけてください

あとはいつも通り

steps:
      - uses: actions/checkout@v2
      - name: set up JDK 1.8
        uses: actions/setup-java@v1
        with:
          java-version: 1.8
      - name: UnitTest
        run: ./gradlew testDebugUnitTest

Androidのビルド環境を作ってテストするだけ
テストコマンドは

./gradlew test{buildVariantName}UnitTest

です。

まとめ

以上がレビューでapproveもらった時だけ自動でテストを走らせる方法です。

次はテスト結果をslackに通知する方法でいいかな?

10
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?