今日、ネリーはPytestは、パラメータの外から入ってくるクラスTestClassををサポートすることができない私に尋ねましたか?各試験バッチ式方法の外から渡されたパラメータが必要です。データファイルは例がたくさんあるかもしれないので、不便な試合をオンにします。
しかし、我々は例を分類し、外側のクラスを介して横断するクラスデータと多重化するために使用する必要があります。これは、直接pytest.mark.parametrize使用することはできません。
ここで撮影したアプローチは次のとおりです。
- --dataコマンドラインオプションを追加し、ファイルYAMLを受け入れます
- このフィクスチャのデータの方法、ファイルパスに渡さ--dataを得ること、及び開放負荷、すべてのデータ、実施形態の名前からの発呼要求により取得されたデータ、例えば、戻り値データの全てと記事から抽出されたデータ
次のコードを特に参照して:
data.yamlファイルの内容、データフィールドは、テストメソッド名は、自動容易にするために、データに対応すると一致することがあることに注意してください。
test_a:
a: 1
b: 2
test_b:
a: 3
b: 4
conftest.pyファイルの内容
import pytest
import yaml
def pytest_addoption(parser): # 添加运行参数
parser.addoption("--data", action="store", help="data file")
@pytest.fixture
def data(request):
file_path = request.config.getoption("--data") # 获取--data参数传的文件路径
with open(file_path) as f: # 加载所有数据
all_data = yaml.safe_load(f)
test_case_name = request.function.__name__ # 获取调用的data这个fixture方法的测试方法名称
return all_data.get(test_case_name) # 只返回指定用例的数据
テストモジュールtest_demo3.pyコンテンツ
import pytest
class TestDemo(object):
def test_a(self, data): # 所有用例要带上data这个fixture参数
print(data)
def test_b(self, data):
print(data)
if __name__ == '__main__':
pytest.main(['test_demo3.py', '-sq', '--data=data.yaml'])