はじめに
前回、pytest の使用方法についてまとめました。今回は pytest を AWS CodeBuild に組み込んで自動テストを行う方法について解説します。
前回の記事はこちら
環境
今回使用する環境は以下の通りです。
$ python --version
Python 3.7.10
$ pytest --version
pytest 7.1.0
フォルダ構成は以下の通りです。
pytest_project
├── mypkg
│ ├── check_leapyear.py
├── tests
│ └── test_check_leapyear.py
各ファイルの内容です。
# check_leapyear.py
def check_leapyear(year):
if year % 100 == 0 and year % 400 != 0:
return False
elif year % 4 == 0:
return True
else:
return False
# test_check_leapyear.py
import pytest
from mypkg.check_leapyear import check_leapyear
@pytest.mark.parametrize(('year', 'expected'), [
(1900, False),
(2000, True),
(2001, False),
(2004, True),
])
def test_check_leapyear(year, expected):
assert check_leapyear(year) == expected
手順
ビルドプロジェクト の作成
AWS 公式ドキュメントに従って、ビルドプロジェクトを作成します。
今回、ソースプロバイダには CodeCommit を使用し、buildspec.yml ファイルは以下のものを使用しました。
version: 0.2
phases:
install:
runtime-versions:
python: 3.7
commands:
- pip3 install pytest
build:
commands:
- python -m pytest --junitxml=reports/pytest_results.xml
reports:
pytest_reports:
files:
- '**/*'
base-directory: reports/
file-format: JUNITXML
各セクションの詳細
report-group-name-or-arn
レポートの送信先のレポートグループを指定します。上記 buildspec.yml の pytest_reports: の部分。
名前を指定した場合、CodeBuild は、プロジェクト名と指定した <project-name>-<report-group-name> 形式でレポートグループを作成します。
reports/<report-group>/files
テストレポートのファイルを指定します。後述する base-directory が指定されている場合は base-directory から、設定されていない場合は CodeBuild 実行ディレクトリを基準にして、テストファイルを検索するディレクトリを表します。’**/*’を指定することで全てのファイルに再帰的にマッチさせることが可能です。
reports/<report-group>/file-format
レポートファイルのフォーマット形式を指定します。未指定の場合は JUNITXML が使用されます。
reports/<report-group>/base-directory
テストレポートファイルの探索先を指定します。
reports/<report-group>/discard-paths
レポートファイルが S3 にアップロードされる際に、パスを保持するかを指定します。例えばテスト結果のパスが com/myapp/mytests/TestResult.xml の場合に、このパラメータに yes を設定すると TestResult.xml としてアップロードされます。
実行結果の確認
ビルドを実行するとレポートが出力されます。今回は4つのテストを行い、4つとも成功したことがレポートから分かります。
おわりに
今回は、実際に pytest を AWS CodeBuild に組み込んで、自動テストを行う手順について解説しました。この記事がどなたかの参考になれば幸いです。
コメント