CI/CDパイプラインでのPythonユニットテストの自動化

この記事では、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バージョンでのテストやテストカバレッジの計測も容易です。

コメント

コメントする

目次