💬

Cloud BuildでPythonの単体テストを自動化する

2024/03/11に公開

はじめに

Cloud Buildは、Google Cloud のCI/CDサービスであり、アプリケーションの単体テストの自動化に最適なツールです。この記事では、Cloud Buildを使用してPythonアプリケーションの単体テストを自動化する方法を解説します。

単体テストは、アプリケーションの品質を確保するために欠かせないものです。しかし、手動でテストを実行すると時間がかかり、人為的なミスも起こりやすくなります。そのため、自動化することでテストの効率性とコードの正確性を向上させることができます。

この記事では、Pythonの単体テストの自動化について、以下の手順で解説します。

  1. テスト用のコードの作成
  2. Cloud Buildトリガーの作成
  3. Cloud Buildでのビルドとテストの実行

1. テスト用のコードの作成

コードを置くディレクトリの構成は以下の通りです。

project/
├── ci.yaml
├── src/
│   └── add_numbers.py
└── tests/
    └── test_add_numbers.py
  • Cloud Buildの設定を書いた構成ファイルを、ci.yamlという名前で置きます。
  • srcディレクトリ配下に、テスト対象の関数を記載したadd_numbers.pyというファイルを置きます。
  • testsディレクトリ配下に、テスト内容を記載したtest_add_numbers.pyというファイルを置きます。

add_numbers.py

テスト対象の関数が書かれているadd_numbers.pyの中身は、足し算をする関数です。

def add_numbers(x, y):
    return x + y

test_add_numbers.py

テスト内容を記載したtest_add_numbers.pyでは、srcディレクトリ配下のadd_numbers.pyから、add_numbers関数を参照し、2つの足し算テストを実行します。

テストには、pytestを使用しています。

from src.add_numbers import add_numbers

def test_add_numbers():
    assert add_numbers(2, 3) == 5
    assert add_numbers(100, -100) == 0

ci.yaml

Cloud Buildの設定を書いたci.yamlの中身は以下の通りです。

使用するpythonイメージは、軽量な 'python:3.11.2-slim'にしました。
pipでpytestをインストールした後、testsディレクトリ配下にあるファイルを対象にテストを実行します。

また、単体テストの量が増えると、実行時間も延びる可能性が高いため、timeout値を引き上げておきます。

steps:
  - name: 'python:3.11.2-slim'
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        pip install --upgrade pip
        pip install pytest
        python -m pytest tests -v
timeout: 600s

2. Cloud Buildトリガーの作成

テストコードの準備ができたら、 Cloud Buildトリガーを作成していきます。
トリガーのパラメータ値は、任意の値でよいのですが、この記事では以下で作成しました。

パラメータ名 パラメータ値
イベント ブランチに push
リポジトリ ソースコードのあるGitHubなどのリポジトリ
構成 Cloud Build 構成ファイル(yaml または json)
ロケーション リポジトリ /ci.yaml

3. Cloud Buildでのビルドとテストの実行

トリガーの作成が完了したら、リポジトリにコードをpushして、テストが自動で実行されるか確認しましょう。

Cloud Buildが起動して、単体テストに成功すると以下のようになると思います。

以上で、Cloud Buildによる単体テストの自動化ができました。

終わりに

この記事では、Cloud Buildを使用してPythonアプリケーションの単体テストを自動化する方法を解説しました。テスト用のコードの作成から、Cloud Buildのセットアップ方法、ビルドとテストの実行までの手順を紹介しました。

Google Cloudを使用している場合、Pythonアプリケーションの品質向上に向けて、ぜひCloud Buildを導入してみてください。

参考

https://cloud.google.com/build/docs/building/build-python?hl=ja

Discussion