Pythonのテスト自動化は、効率的な開発プロセスの鍵となります。本記事では、ユニットテストからCI/CD統合、パフォーマンステストまで、テスト自動化における実践的な技術を網羅的に解説します。
ユニットテストの作成
Pythonの標準ライブラリunittest
を使用して、ユニットテストを作成できます。
import unittest
# テスト対象の関数
def add(x, y):
return x + y
# テストクラス
class TestMathOperations(unittest.TestCase):
def test_add(self):
self.assertEqual(add(2, 3), 5)
self.assertEqual(add(-1, 1), 0)
if __name__ == '__main__':
unittest.main()
ユニットテストは個別の関数やメソッドの動作を確認するのに有効です。
テストケースの実行
テストケースの実行は、コマンドラインから行えます。
python -m unittest test_file.py
上記コマンドで、test_file.py
内のすべてのテストケースが実行されます。
モックオブジェクトの使用
外部依存を切り離してテストするために、unittest.mock
を活用します。
from unittest.mock import MagicMock
# モックの設定
mock = MagicMock()
mock.return_value = "mocked result"
# 使用例
result = mock()
print(result) # mocked result
モックは、外部サービスやデータベース接続をテストする際に便利です。
テストカバレッジの測定
coverage
ライブラリを使うと、テストカバレッジを確認できます。
pip install coverage
coverage run -m unittest test_file.py
coverage report
これにより、コードのどの部分がテストされているかが分かります。
CI/CDパイプラインとの統合
GitHub Actionsを使ったテスト自動化の例です。
name: Python CI
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.9
- name: Install dependencies
run: pip install -r requirements.txt
- name: Run tests
run: python -m unittest discover
CI/CDを導入することで、変更があるたびにテストが実行されます。
回帰テストの実行
回帰テストは、既存機能が変更によって壊れていないことを確認するテストです。pytest
を活用すると効率的です。
pip install pytest
pytest tests/
pytest
は、シンプルな記述でテストケースを作成でき、回帰テストに最適です。
パフォーマンステスト
コードの性能を確認するには、timeit
モジュールが役立ちます。
import timeit
code = '''
def add(x, y):
return x + y
add(2, 3)
'''
print(timeit.timeit(code, number=100000))
高負荷なシナリオを模擬して性能を測定できます。
ストレステスト
ストレステストには、locust
のようなツールが有効です。
pip install locust
以下は、HTTPサーバーへのストレステストの例です。
from locust import HttpUser, task
class WebsiteUser(HttpUser):
@task
def load_page(self):
self.client.get("/")
テストデータの生成
faker
ライブラリを使って、テストデータを動的に生成します。
pip install faker
from faker import Faker
fake = Faker()
print(fake.name()) # ランダムな名前
print(fake.email()) # ランダムなメールアドレス
エラーログの解析
テスト中に生成されたエラーログを解析し、問題箇所を特定します。
try:
1 / 0
except ZeroDivisionError as e:
with open("error.log", "a") as log_file:
log_file.write(str(e))
エラーログは継続的な品質改善に不可欠です。
まとめ
テスト自動化は、ソフトウェア開発の効率化と品質向上に欠かせません。本記事では、Pythonを使ったテスト自動化の基本から応用までを解説しました。これらのテクニックを活用して、信頼性の高いコードを実現しましょう。
コメント