Python | テストケースを外部ファイル(CSVやJSON)にまとめて読み込む方法

Python
スポンサーリンク

複雑な条件チェックをテストするとき、テストケースを外部ファイル(CSVやJSON)にまとめて管理すると便利です。これにより、テストコードとテストデータを分離でき、追加や変更が簡単になります。


方法1:CSVファイルを使う

例:test_cases.csv

age,is_member,has_invite_code,expected
20,True,False,True
20,False,False,False
17,True,False,False
17,False,True,True
30,False,True,True

pytestコード

import csv
import pytest
from myapp import can_access

def load_csv_cases(filename):
    with open(filename, newline="") as f:
        reader = csv.DictReader(f)
        for row in reader:
            yield int(row["age"]), row["is_member"] == "True", row["has_invite_code"] == "True", row["expected"] == "True"

@pytest.mark.parametrize("age,is_member,has_invite_code,expected", load_csv_cases("test_cases.csv"))
def test_can_access(age, is_member, has_invite_code, expected):
    assert can_access(age, is_member, has_invite_code) == expected
Python
  • テストケースをCSVにまとめることで、非エンジニアでもExcel感覚で編集可能
  • 新しい条件を追加するときはCSVに行を足すだけ

方法2:JSONファイルを使う

例:test_cases.json

[
  {"age": 20, "is_member": true, "has_invite_code": false, "expected": true},
  {"age": 20, "is_member": false, "has_invite_code": false, "expected": false},
  {"age": 17, "is_member": true, "has_invite_code": false, "expected": false},
  {"age": 17, "is_member": false, "has_invite_code": true, "expected": true},
  {"age": 30, "is_member": false, "has_invite_code": true, "expected": true}
]
JSON

pytestコード

import json
import pytest
from myapp import can_access

def load_json_cases(filename):
    with open(filename) as f:
        return json.load(f)

@pytest.mark.parametrize("case", load_json_cases("test_cases.json"))
def test_can_access(case):
    assert can_access(case["age"], case["is_member"], case["has_invite_code"]) == case["expected"]
Python
  • JSONは構造化データなので、複雑な条件や多段階の入力に向いている
  • APIレスポンスや設定ファイルと同じ形式なので、実務で馴染みやすい

まとめ

  • CSV → シンプルな表形式、Excelで編集しやすい
  • JSON → ネスト構造や複雑なデータに強い
  • 外部ファイル化すると、テストコードはシンプルになり、テストデータの追加・変更が容易になる
Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました