Python | テストデータを外部ファイルにして、CI/CDで環境ごとに切り替える方法(例:開発用と本番用で別データ)

Python
スポンサーリンク

実務では「開発用と本番用でテストデータを切り替える」仕組みをCI/CDに組み込むことで、環境ごとに適切なテストを自動実行できます。


基本の考え方

  1. テストデータを外部ファイルに分ける
    • 例:test_cases_dev.jsontest_cases_prod.json
  2. 環境変数でどのファイルを使うか指定する
    • CI/CDパイプラインで ENV=devENV=prod を設定
  3. テストコードで環境変数を読み込む
    • os.environ を使ってファイルを切り替える
  4. CI/CD設定ファイルで環境ごとにジョブを分ける

プロジェクト構成例

project/
├── myapp.py
├── tests/
│   ├── test_app.py
│   ├── test_cases_dev.json
│   └── test_cases_prod.json
└── .github/
    └── workflows/
        └── ci.yml

テストコード例(環境変数で切り替え)

import json
import os
import pytest
from myapp import can_access

def load_cases():
    env = os.environ.get("ENV", "dev")  # デフォルトは開発用
    filename = f"tests/test_cases_{env}.json"
    with open(filename) as f:
        return json.load(f)

@pytest.mark.parametrize("case", load_cases())
def test_can_access(case):
    assert can_access(case["age"], case["is_member"], case["has_invite_code"]) == case["expected"]
Python
  • ENV=devtest_cases_dev.json を読み込む
  • ENV=prodtest_cases_prod.json を読み込む

GitHub Actions設定例(CI/CD)

name: CI

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  test-dev:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with:
          python-version: "3.11"
      - run: pip install -r requirements.txt pytest
      - name: Run dev tests
        run: ENV=dev pytest

  test-prod:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with:
          python-version: "3.11"
      - run: pip install -r requirements.txt pytest
      - name: Run prod tests
        run: ENV=prod pytest
  • test-dev ジョブ → 開発用データでテスト
  • test-prod ジョブ → 本番用データでテスト

実務的な工夫

  • 環境ごとに異なるテストデータを管理(開発用は簡易ケース、本番用は厳密ケース)
  • CI/CDで並列実行 → 開発・本番両方のテストを同時に走らせる
  • 環境変数や設定ファイルで切り替え → GitHub Actionsだけでなく、GitLab CIやAzure DevOpsでも同様に可能
Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました