考虑场景:

  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):
parser.addoption(
"--cmdopt", action="store", default="type1", help="my option: type1 or type2"
)
parser.addoption(
"--env", action="store", default="dev", help="env:表示测试环境,默认dev环境"
) @pytest.fixture()
def cmdopt(pytestconfig):
return pytestconfig.getoption("cmdopt") @pytest.fixture()
def env(request):
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))
else:
print("环境错误,当前环境{}不存在".format(env)) if __name__ == '__main__':
pytest.main(['-s', 'test_option.py'])

上面例子是获取env的值,针对env值的不同做不同的操作。

不带参数运行:

命令行中输入指令:pytest test_option.py -s,运行结果:

因为我们在conftest.py文件中定义的参数env的默认值为dev,所以当运行时命令行不传env参数,则使用默认值dev。

带参数运行:

命令行中输入指令:pytest test_option.py -s --env=test,运行结果:

从结果中可以看到,命令行中输入参数env=test,在测试用例中获取到通过fixture获取到env的值为test。

pytest动态添加命令行参数并获取(钩子函数:pytest_addoption)的更多相关文章

  1. 给go程序添加命令行参数

    操作系统: CentOS 6.9_x64 go语言版本: 1.8.3 问题描述 需要应用程序根据不同的配置文件访问不同的服务器,希望程序启动时可以指定配置文件. 解决方案 package main i ...

  2. pytest框架之命令行参数1

    前言 pytest是一款强大的python自动化测试工具,可以胜任各种类型或者级别的软件测试工作.pytest提供了丰富的功能,包括assert重写,第三方插件,以及其他测试工具无法比拟的fixtur ...

  3. pytest框架之命令行参数2

    前言 上篇博客说到命令行执行测试用例的部分参数如何使用?今天将继续更新其他一些命令选项的使用,和pytest收集测试用例的规则! pytest执行用例命令行参数 --collect-only:罗列出所 ...

  4. 命令行参数 main()函数设计

    一.main()函数的形式 int main( void )--无参数形式 { ... return 0; } int main( int argc, char *argv[] )--带参数形式 { ...

  5. VS添加命令行参数main(int argc, char** argv)

  6. VS调试-添加命令行参数

    Project -> Properties -> Configuration Properties -> Debugging 在Command Arguments里填上即可

  7. pycharm调试添加命令行参数

    UI界面: Run->Edit Configurations->Parames

  8. visual studio 中添加命令行参数

    argc argv

  9. Pytest(13)命令行参数--tb的使用

    前言 pytest 使用命令行执行用例的时候,有些用例执行失败的时候,屏幕上会出现一大堆的报错内容,不方便快速查看是哪些用例失败. --tb=style 参数可以设置报错的时候回溯打印内容,可以设置参 ...

随机推荐

  1. VScode 使用 CMake 入门

    参考 CMake 入门实战 在 linux 平台下使用 CMake 生成 Makefile 并编译的流程如下: 编写 CMake 配置文件 CMakeLists.txt . 执行命令 cmake PA ...

  2. react-native安卓运行报错:The number of method references in a .dex file cannot exceed 64K.

    错误原因:App里面方法数超过64K解决方法:在android/app/build.gradle中添加implementation 'com.android.support:multidex:1.0. ...

  3. 【Java基础】transient关键字

    1. transient的作用及使用方法 我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过 ...

  4. 『与善仁』Appium基础 — 22、获取元素信息的操作(一)

    目录 1.获取元素文本内容 (1)text()方法 (2)get_attribute()方法 (3)综合练习 2.获取元素在屏幕上的坐标 1.获取元素文本内容 (1)text()方法 业务场景: 进入 ...

  5. 01 - Vue3 UI Framework - 开始

    写在前面 一年多没写过博客了,工作.生活逐渐磨平了棱角. 写代码容易,写博客难,坚持写高水平的技术博客更难. 技术控决定慢慢拾起这份坚持,用作技术学习的阶段性总结. 返回阅读列表点击 这里 开始 大前 ...

  6. Java后端高频知识点学习笔记1---Java基础

    Java后端高频知识点学习笔记1---Java基础 参考地址:牛_客_网 https://www.nowcoder.com/discuss/819297 1.重载和重写的区别 重载:同一类中多个同名方 ...

  7. [BUUCTF]REVERSE——[BJDCTF 2nd]guessgame

    [BJDCTF 2nd]guessgame 附件 步骤: 例行查壳儿,64位程序,没有壳儿 64位ida载入,习惯性的检索程序里的字符串,看到了一串类似flag的字符串,拿去提交,成功 BJD{S1m ...

  8. android jni-dlerror报undefined symbol: JNI_OnLoad

    以下是很简单的一个官方的jni方法,在MainActivity的onCreate中调用 extern "C" JNIEXPORT jstring JNICALL Java_com_ ...

  9. MySQL 分区表,为什么分区键必须是主键的一部分?

    随着业务的不断发展,数据库中的数据会越来越多,相应地,单表的数据量也会越到越大,大到一个临界值,单表的查询性能就会下降. 这个临界值,并不能一概而论,它与硬件能力.具体业务有关. 虽然在很多 MySQ ...

  10. Springboot MVC 自动配置

    Springboot MVC 自动配置 官方文档阅读 https://docs.spring.io/spring-boot/docs/current/reference/html/web.html#w ...