pytest中pytest_addoption用法 动态添加命令行参数 (钩子函数)

考虑场景:

  1. 我们的自动化用例需要支持在不同测试环境运行,有时候在dev环境运行,有时候在test环境运行;
  2. 有时候需要根据某个参数不同的参数值,执行不同的业务逻辑;

上面的场景我们都可以通过“在命令行中输入参数,然后用例中接收这个参数,通过判断这个参数的值来做不同的逻辑”来实现。那么我们的需求就变为pytest中如何自定义一个命令行参数呢?这时候我们就需要用到pytest的钩子函数:pytest_addoption

通过conftest.py配置
  新建一个conftest.py文件,然后在conftest.py文件中通过pytest_addoption方法来添加命令行参数,通过定义的fixture来获得参数的值。

# file_name: conftest.py


import pytest


def pytest_addoption(parser):
	# 注册自定义参数cmdopt到配置对象
    parser.addoption(
        "--cmdopt", action="store", default="type1", help="my option: type1 or type2"
    )
    # 注册自定义参数env到配置对象
    parser.addoption(
        "--env", action="store", default="dev", help="env:表示测试环境,默认dev环境"
    )


@pytest.fixture()
def cmdopt(pytestconfig):
	# 从配置对象获取cmdopt的值
    return pytestconfig.getoption("cmdopt")


@pytest.fixture()
def env(request):
	# 从配置对象获取env的值
    return request.config.getoption("--env")

上面conftest.py文件中新增了两个命令行参数:–cmdopt和–env;然后定义了两个fixture,在测试用例中想要获得参数–cmdopt的值,就可以调用cmdopt函数;调用env函数可以获取参数–env的值。
编写测试用例:

# file_name: test_option.py

import pytest


def test_option(env):
    if env == 'dev':
        print("当前测试环境为:{},域名切换为开发环境".format(env))
    elif env == 'test':
        print("当前测试环境为:{},域名切换为测试环境".format(env
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一叶知秋的BLOG

创作不易 请多多关注

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值