pytest中命令行传参,以及三种参数化方式
命令行中传参
背景:有时候需要一些不同环境会变动的参数,比如测试环境和正式环境用的url地址不同
在conftest.py中添加如下代码
代表你命令行需要传两个参数,–file_name和–host_name,default为不传的话,默认值
file_name获取到了参数的值
def pytest_addoption(parser):
parser.addoption("--file_name", default="testcase.xlsx")
parser.addoption("--host_name", default="test")
@pytest.fixture
def file_name(request):
return request.config.getoption("--file_name")
在用例中使用
def test_001(file_name):
print(file_name)
第一种参数化,conftest中使用fixture的params参数
在conftest中
@pytest.fixture(params=range(5))
def id(request):
return request.param
在testcase中使用参数
def test_001(id):
print(f"+++++++++++++++++{id}")
运行后
第二种,conftest中使用钩子
在命令行获取参数后,参数化给测试用例使用
在conftest中
def pytest_addoption(parser):
parser.addoption("--file_name", default="testcase.xlsx") # 存测试用例数据的excel文件名称
parser.addoption("--host_name", default="test") # 测试环境名称,会根据这个名称找到对应的环境地址
def pytest_generate_tests(metafunc):
file_name=metafunc.config.getoption('--file_name')
host_name=metafunc.config.getoption('--host_name')
cases_data=generate_case_data(file_name,host_name) # 自己写的一个方法,根据传入的参数,构造所有测试用例数据,返回的一个列表
metafunc.parametrize("case_data", cases_data) #定义参数名称,给用例调用
在test_case中
把case_data直接传给测试
def test_requests_send(case_data):
"""
:param cases_data: 每一条用例数据
:return:
"""
print(case_data)
运行后