将几个列表传递到 Pytest 参数化
Pass several list into the Pytest parameterize
我想创建一个 PyTest,它根据环境验证我的文件夹是否存在。
是否可以为每个文件夹使用参数化创建单独的测试?
env
folder
dev
dev_data
dev
logs
dev
debug
prod
prod_data
我的代码现在看起来像那样(但它不工作):
env = ["dev", "prod"]
expectedFoldersDev = ["dev_data", "logs", "debug"] # count of folders can be > 30
expectedFoldersProd = ["prod_data"]
@pytest.mark.parametrize("env, folder", [(env[0], expectedFoldersDev),
(env[1], expectedFoldersProd)])
def test_are_folders_exist(env, folder):
expected_folders = get_folders(env)
assert folder in expected_folders
def get_folders():
...
您可以使用 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...
# .
我想创建一个 PyTest,它根据环境验证我的文件夹是否存在。
是否可以为每个文件夹使用参数化创建单独的测试?
env | folder |
---|---|
dev | dev_data |
dev | logs |
dev | debug |
prod | prod_data |
我的代码现在看起来像那样(但它不工作):
env = ["dev", "prod"]
expectedFoldersDev = ["dev_data", "logs", "debug"] # count of folders can be > 30
expectedFoldersProd = ["prod_data"]
@pytest.mark.parametrize("env, folder", [(env[0], expectedFoldersDev),
(env[1], expectedFoldersProd)])
def test_are_folders_exist(env, folder):
expected_folders = get_folders(env)
assert folder in expected_folders
def get_folders():
...
您可以使用 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...
# .