我必须在要存储在pytest addoption
中的pytest命令中传递一个参数。我想在pytest parametrize
函数中使用这些值。
命令:
pytest --range-from 3 --range-to 5 test.py
conftest.py :
def pytest_addoption(parser):
parser.addoption("--range-from", action="store", default="default name")
parser.addoption("--range-to", action="store", default="default name")
test.py :
@pytest.mark.parametrize('migration_id', migration_list[range-from:range-to])
def test_sync_with_migration_list(migration_id):
migration_instance = migration.parallel(migration_id=migration_id)
migration_instance.perform_sync_only()
我想在range-from
中使用range-to
和parametrize
的值。
我无法使用这些值。请提出如何做到这一点。
答案 0 :(得分:1)
您无法直接从parametrize
访问这些选项,因为它们在加载时不可用。您可以在运行时在pytest_generate_tests
中配置参数化,在此您可以从config
参数访问metafunc
:
test.py
@pytest.hookimpl
def pytest_generate_tests(metafunc):
if "migration_id" in metafunc.fixturenames:
# any error handling omitted
range_from = int(metafunc.config.getoption("--range-from"))
range_to = int(metafunc.config.getoption("--range-to"))
metafunc.parametrize("migration_id",
migration_list[range_from:range_to])
def test_sync_with_migration_list(migration_id):
migration_instance = migration.parallel(migration_id=migration_id)
migration_instance.perform_sync_only()
答案 1 :(得分:1)
一种简单的方法是将命令行参数分配给环境变量,然后在任何需要的地方使用。我不确定您要以哪种方式使用变量,所以在这里我将简单的print语句放入测试中。
conftest.py
def pytest_addoption(parser):
parser.addoption("--range-from", action="store", default="default name") #Let's say value is :5
parser.addoption("--range-to", action="store", default="default name") #Lets's say value is 7
def pytest_configure(config):
os.environ["range_from"]=config.getoption("range-from")
os.environ["range_to"]=config.getoption("range-to")
test.py:
@pytest.mark.parametrize('migration_id', [os.getenv("range_from"),os.getenv("range_to")])
def test_sync_with_migration_list(migration_id):
print(migration_id)
Output :
5
7
希望这会有所帮助!