说我在tests.py
中有此测试
def test_user(username='defaultuser'):
案例1
我想通过命令行传递用户名以进行测试,例如
$ pytest tests.py::test_user user1 # could be --username=user1
我该怎么做?
案例2
我想传递用户名列表进行测试,例如
$ pytest tests.py::test_user "user1, user2, user3"
我想实现类似的目标
@pytest.mark.parametrize("username", tokenize_and_validate(external_param))
def test_user(username):
pass
def tokenize_and_validate(val):
if not val:
return 'defaultuser'
return val.split(',')
我该怎么做?
谢谢
答案 0 :(得分:1)
首先从命令行传递参数时,您需要创建一个生成器方法以从命令行获取值,该方法将运行每个测试。
def pytest_generate_tests(metafunc):
# This is called for every test. Only get/set command line arguments
# if the argument is specified in the list of test "fixturenames".
option_value = metafunc.config.option.name
if 'name' in metafunc.fixturenames and option_value is not None:
metafunc.parametrize("name", [option_value])
然后,您可以使用命令行参数从命令行运行:
pytest -s tests/my_test_module.py --name abc
答案 1 :(得分:0)