pytest中命令行传参,以及三种参数化方式

本文介绍了pytest框架中如何通过命令行传递参数,以及三种不同的参数化方法:使用fixture的params参数、conftest钩子和直接使用@ pytest.mark.parametrize。详细讲解了在conftest.py文件中配置及在测试用例中应用这些参数的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

命令行中传参

背景:有时候需要一些不同环境会变动的参数,比如测试环境和正式环境用的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)

运行后

在这里插入图片描述

第三种参数化,在测试用例中直接使用 @pytest.mark.parametrize

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值