将几个列表传递到Pytest参数化中



我想创建一个PyTest,它根据env验证我的文件夹是否存在。

是否可以使用parameterize为每个文件夹创建一个单独的测试?

env 文件夹
dev dev_data
dev 日志
dev 调试
产品 prod_data

您可以使用dict(本例中为FOLDERS(来存储测试值,并定义一个方法(本例为get_items(来通过生成器对其进行扩展,该生成器可以直接传递给@pytest.mark.parametrize装饰器。下面是一个工作示例。

import pytest

FOLDERS = {"dev": ["dev_data", "logs", "debug"], "prod": ["prod_data"]}

def get_items():
for key, value in FOLDERS.items():
for val in value:
yield key, val

@pytest.mark.parametrize("env, folder", get_items())
def test_are_folders_exist(env, folder):
print(f"Checking folder {folder} on env {env}...")
expected_folders = get_folders(env)
assert folder in expected_folders

def get_folders(env):
# just for the example, it should be the method to be tested
return FOLDERS.get(env)

它给出了这个输出。

pytest -s folders.py
# fixture.py Checking folder dev_data on env dev...
# .Checking folder logs on env dev...
# .Checking folder debug on env dev...
# .Checking folder prod_data on env prod...
# .

最新更新