この記事では、CI/CDパイプラインでのPythonユニットテストの自動化について詳しく解説します。具体的なコード例とその解説、さらには応用例までを含めています。
はじめに
Continuous Integration(CI)とContinuous Deployment(CD)は、ソフトウェア開発の現代的な手法であり、開発プロセスを効率的かつ確実にするために広く利用されています。この中で、ユニットテストの自動化は特に重要な要素です。今回はPythonを用いたユニットテストの自動化の方法をCI/CDパイプラインに組み込む過程を詳しく見ていきます。
基本的なユニットテストの書き方
Pythonでのユニットテストは、`unittest` モジュールを使用して行います。
サンプルコード
import unittest
class TestCalculator(unittest.TestCase):
def test_add(self):
self.assertEqual(1 + 1, 2)
if __name__ == "__main__":
unittest.main()
このサンプルコードでは、`TestCalculator` クラスに`test_add` メソッドを定義しています。`test_add` メソッドは、1 + 1 が 2 であるかをテストしています。このようにしてユニットテストを作成することができます。
CI/CDパイプラインにユニットテストを組み込む
継続的インテグレーションツール(例えば、Jenkins, GitLab CI, GitHub Actionsなど)を使用して、ユニットテストを自動的に実行することが可能です。
GitHub Actionsでの設定例
# .github/workflows/python-test.yml
name: Python Test
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Run tests
run: python -m unittest
この設定ファイルは、GitHubリポジトリにプッシュが行われる度にユニットテストが実行されるように設定しています。
応用例
複数のPythonバージョンでのテスト
GitHub Actionsではマトリックスビルドを使用することで、複数のPythonバージョンでテストを行うことが可能です。
# .github/workflows/python-matrix-test.yml
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [3.6, 3.7, 3.8, 3.9]
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Run tests
run: python -m unittest
テストカバレッジの計測
テストカバレッジを計測することで、どの程度のコードがテストされているのかを確認することができます。
# インストール
pip install coverage
# カバレッジ計測
coverage run -m unittest discover
# カバレッジレポート
coverage report
まとめ
CI/CDパイプラインにPythonでのユニットテストを組み込むことで、コードの品質を維持しながら効率的な開発が可能です。特にGitHub Actionsを使用すると、複数のPythonバージョンでのテストやテストカバレッジの計測も容易です。
コメント