首页 > 其他分享 >pytest框架学习-pytest_addoption钩子函数

pytest框架学习-pytest_addoption钩子函数

时间:2023-12-13 17:35:59浏览次数:34  
标签:addoption -- 钩子 pytest 参数 env test

适用场景:一套自动化代码,多套环境。

pytest_addoption 允许用户自定义注册一个命令行参数,方便用户通过命令行参数的形式给 pytest 传递不同的参数进行不同测试场景的切换。

pytest_addoption 钩子函数一般和内置 fixture pytestconfig 配合使用, pytest_addoption 注册自定义的命令行参数, pytestconfig 通过pytest配置对象读取参数的值。

pytest_addoption 钩子函数还可以与内置fixture函数request中 request.config.getoption 结合使用来读取用户注册的自定义命令行参数对应的参数值。

 opts:是要注册的命令行参数

可以看到,其他参数和add_argument()是一样的

咱们可以看官网解释:argparse --- 命令行选项、参数和子命令解析器 — Python 3.12.1 文档

注意:使用def pytest_addoption(parser) 需要放在conftest.py文件中

conftest.py中代码如下:

import pytest


def pytest_addoption(parser):
    """
    自定义命令行参数的名字,可以是:"foo", "-foo" 或 "--foo";
    action:指明应当如何处理一个参数  'store', 'store_const', 'store_true', 'append', 'append_const', 'count', 'help', 'version'
    nargs:参数可被使用的次数
    const:存储一个常量值
    default:默认为 None
    type:自动将参数转换为给定的类型    int, float, argparse.FileType('w') 或可调用函数
    choices:将值限制为指定的可选项集合
    required:指明某个参数是必需的还是可选的    True 或 False
    help:参数的帮助消息
    metavar:要在帮助中显示的参数替代显示名称
    dest:指定要在结果命名空间中使用的属性名称
    """
    parser.addoption(
        "--env",  # 添加命令行参数--env,用来表示运行环境
        action="store",
        default="dev",  # 默认为dev开发环境
        choices=["test", "dev", "auto"],  # name只能在这三个环境中选取,否则报错
        help="选择运行环境")

@pytest.fixture(scope='session')
def get_env(request):
    """
    获取命令行参数--env的值,即获取运行环境
    """
    name = request.config.getoption("--env")
    return name

然后在测试用例文件中,可以作为参数引用

class TestRunForAddoption:
    def test_normal_addoption(self, get_env):print(f"当前代码运行环境是:{get_env}")

 pytest -sv -k 'test_normal_addoption'

此时没有传入命令行参数--env,可以看到,取得是默认值dev

 pytest -sv -k 'test_normal_addoption' --env test

传入--env参数,并且赋值为test,可以看到,运行结果取值test

pytest -sv -k 'test_normal_addoption' --env uat

传入--env参数,赋值为uat,不在choices列表里,报错

 

标签:addoption,--,钩子,pytest,参数,env,test
From: https://www.cnblogs.com/luoshuai7394/p/17870557.html

相关文章

  • pytest 如何测试函数中抛出的异常
    一般Python中异常可以用raise来抛出,此时单测中想要测试错误用例是否触发异常了,可以用pytest中的 withpytest.raises(xxx)如下:importpytestimportunittestclassInfo(object):"""infoclass"""def__init__(self,name):"""......
  • React Hooks 钩子特性
    人在身处逆境时,适应环境的能力实在惊人。人可以忍受不幸,也可以战胜不幸,因为人有着惊人的潜力,只要立志发挥它,就一定能渡过难关。Hooks是React16.8的新增特性。它可以让你在不编写class组件的情况下使用state以及其他的React特性。ReactHooks表现形式是以use开头......
  • pytest + yaml 框架 -60.git+jenkins+allure+钉钉通知反馈
    前言当我们自动化用例写完后,接下来就是如何运行用例,生成报告以及反馈通知了。如果你们公司已经有jenkins了,那么直接集成到jenkins上构建你的自动化任务是非常方便的。用例上传git仓库第一步,将写好的自动化用例,上传到本公司的git仓库。jenkins自动拉取仓库代码在jenkins上......
  • pytest + yaml 框架 -59.用例失败重跑机制pytest-rerunfailures
    前言有些接口可能不太稳定,第一次跑的时候由于网络原因或者其它原因失败,但是重新跑2次又成功了。对于这种需要重新跑几次的场景,可以使用用例失败重跑机制,需安装pytest-rerunfailures插件。场景示例失败重跑需要依赖pytest-rerunfailures插件,使用pip安装就行pipinstallp......
  • 5.10 Windows驱动开发:摘除InlineHook内核钩子
    在笔者上一篇文章《内核层InlineHook挂钩函数》中介绍了通过替换函数头部代码的方式实现Hook挂钩,对于ARK工具来说实现扫描与摘除InlineHook钩子也是最基本的功能,此类功能的实现一般可在应用层进行,而驱动层只需要保留一个读写字节的函数即可,将复杂的流程放在应用层实现是一个非常明......
  • ModuleNotFoundError: No module named '_pytest.resultlog'
    新环境运行Python时报错 ModuleNotFoundError:Nomodulenamed'_pytest.resultlog'上网查,看到解决方法  https://www.cnblogs.com/QiKa/p/14457269.html解决办法:①升级pytest-rerunfailures版本到9.1.1②卸载pytest-rerunfailures使用pytest-reportlog代替③降低pytest版本......
  • pytest框架学习-fixture
    一、fixture是什么被@pytest.fixture()装饰器装饰的函数就是一个fixture,fixture可以灵活的为不同范围的测试用例提供前置和后置操作,以及向测试用例传递测试数据。 二、fixture定义@pytest.fixture(scope=“function”,params=None,autouse=False,ids=None,name=None)参数说明......
  • VUE四个生命阶段和8个钩子函数的执行及其实现效果------VUE框架
    VUE四个生命阶段和8个钩子函数的执行及其实现效果<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>D......
  • Pytest:Fixture参数
    Fixture作用域之scope用于控制Fixture的作用范围,作用类似于Pytest的setup/teardownscope参数可以是session,module,class,function,默认为function,作用范围顺序:session》module》class》function名称范围说明function函数级每一个函数或方法都会调用class类级别每个......
  • Pytest:Fixture调用
    fixture的优势fixture是在测试函数运行前后,由pytest执行的外壳函数。fixture中的代码可以定制,满足多变的测试需求,包括定义传入测试中的数据集,配置测试前系统的初始状态,为批量测试提供数据源,等等。命名方式灵活,不局限于setup和teardown这几个命名fixture调用方式1、使用fixtu......