钩子函数之 pytest_addoption介绍:
① pytest_addoption
钩子函数可以让用户注册一个自定义的命令行参数,以便于用户在测试开始前将数据从外部(如:控制台)传递给程序;【程序根据获取的用户传递的自定义的参数值来做一些事情】
② pytest_addoption
钩子函数一般和内置 fixture pytestconfig
配合使用, pytest_addoption
注册自定义的命令行参数, pytestconfig
通过pytest配置对象读取参数的值;
③ pytest_addoption
钩子函数还可以与内置fixture函数request中 request.config.getoption
结合使用来读取用户注册的自定义命令行参数对应的参数值。如下所有的例子都是通过此方法。
可能的应用场景:
- 我们的自动化用例需要支持在不同的测试环境运行,有时候在dev环境运行,有时候在test环境运行,有时候在uat环境运行;
- 有时候需要根据获取某个参数不同的参数值,执行不同的业务逻辑;
上面的场景我们都可以通过【在命令行中输入参数,然后用例中接收这个参数,通过判断这个参数的值来做不同的逻辑】来实现。
那么我们的需求就变为pytest中如何自定义一个命令行参数呢?这时候我们就需要用到pytest的钩子函数: pytest_addoption
。
pytest.addoption() 钩子函数的参数说明:
①name:自定义命令行参数的名字,可以是:"foo", "-foo" 或 "--foo";
②action:在命令行中遇到此参数时要采取的存储该参数对应的参数值的基本操作类型;
③nargs:应该使用的命令行参数的数量;
④const:某些操作和nargs选择所需的常量值;
⑤default:如果参数不在命令行中,则生成的默认值。
⑥type:注册的自定义到pytest配置对象中的命令行参数对应的参数值应该转换为的类型;
⑦choices:参数允许值的容器;
⑧required:命令行选项是否可以省略(仅可选);
⑨help:对参数作用的简要说明;
⑩metavar:用法消息中参数的名称;
①①dest:要添加到 parse_args() 返回的对象中的属性的名称;
对pytest.addoption()钩子函数的参数解释:
1、组合使用一:
action
: action="store"
:默认只存储参数的值【命令行参数添加到pytest配置对象中的参数的参数值】;可以存储任何数据类型的值;
default
:可以是任何数据类型的值;而且在pytest命令行方式执行测试用例时pytest命令行参数中多次传递该参数也只能生效一个参数值;最后一个值覆盖之前的值;【即当出现命令行参数中添加到pytest配置对象中的参数的参数值多个时,默认最后一个将会被传递到程序内】
【注意】当pytest命令行方式运行测试用例没有传递指定参数对应的参数值时,程序中默认读取默认值。如果命令行参数中包含自定义注册的参数且注册参数存在对应的参数值时,则该参数值会覆盖之前的参数默认值
实例1:当 action="store"
时,pytest命令行方式执行且不传递自定义参数值
实例2:当 action="store"
时,在pytest命令行方式执行测试用例时pytest命令行参数中多次传递该参数也只能生效一个参数值:最后一个值覆盖之前的值(首先覆盖默认值,然后后面的覆盖前面的)
实例3:当 action="store" 时,pytest命令行方式执行且传递自定义参数值
实现步骤:
①注册一个自定义参数,并为其命名为【--cmdopt】,添加到pytest配置对象。
②定义一个fixture函数,作用是从pytest配置对象中读取自定义参数【--cmdopt】的值。该fixture函数的返回值是 request.config.getoption("--cmdopt")
。(即从pytest配置对象中获取的【--cmdopt】参数值)
③再次定义一个fixture函数,调用②中定义的fixture函数,用来接收②中定义的fixture函数的返回值。
④在测试方法中调用③中定义的fixture函数,获取【--cmdopt】参数值到测试用例中使用。
⑤pytest命令行方式执行测试用例并