Hook 方法之 pytest_addoption :

pytest_addoption 可以让用户注册一个自定义的命令行参数,方便用户将数据传递给 pytest;
这个 Hook 方法一般和 内置 fixture pytestconfig 配合使用,pytest_addoption 注册命令行参数,pytestconfig 通过配置对象读取参数的值;

 pytest_addoption 注册、pytestconfig 获取命令行参数

# conftest.pyimport pytest# 注册自定义参数 cmdopt 到配置对象
def pytest_addoption(parser):parser.addoption("--cmdopt", action="store",default="None",help="将自定义命令行参数 ’--cmdopt' 添加到 pytest 配置中")# 从配置对象获取 cmdopt 的值
@pytest.fixture(scope='session')
def cmdopt(pytestconfig):return pytestconfig.getoption('--cmdopt')# 然后任何 fixture 或测试用例都可以调用 cmdopt 来获得设备信息

parser.addoption() 参数说明:

  1. name:自定义命令行参数的名字,可以是:"foo", "-foo" 或 "--foo";
  2. action:在命令行中遇到此参数时要采取的基本操作类型;
  3. nargs:应该使用的命令行参数的数量;
  4. const:某些操作和nargs选择所需的常量值;
  5. default:如果参数不在命令行中,则生成的默认值。
  6. type:命令行参数应该转换为的类型;
  7. choices:参数允许值的容器;
  8. required:命令行选项是否可以省略(仅可选);
  9. help:对参数作用的简要说明;
  10. metavar:用法消息中参数的名称;
  11. dest:要添加到 parse_args() 返回的对象中的属性的名称;

挑几个比较常用的来演示:
1. name:这个不用多说,自定义的参数的名字;

2. action 、default 和 const、help :

action="store":默认,只存储参数的值,可以存储任何类型的值,此时 default 也可以是任何类型的值,而且命令行参数多次使用也只能生效一个,最后一个值覆盖之前的值;

# 注册自定义参数 cmdopt 到配置对象
def pytest_addoption(parser):parser.addoption("--cmdopt", action="store",default="这个是默认值...",help="将命令行参数 ’--cmdopt' 添加到 pytest 配置中")# 从配置对象中读取自定义参数的值
@pytest.fixture(scope="session")
def cmdopt(request):return request.config.getoption("--cmdopt")# 将自定义参数的值打印出来
@pytest.fixture(autouse=True)
def fix_1(cmdopt):print('\n --cmdopt的值:',cmdopt)if __name__ == '__main__':# 使用参数pytest.main(['-s', '--cmdopt=98k'])
# 控制台打印参数值:
============================= test session starts =============================
test_Z.py::TestDemoA::test_A_001 --cmdopt的值: 98k
PASS
============================== 1 passed in 0.02s ==============================

action="append":存储一个列表,用 append 模式 将可以同时多次使用自定义参数,并且 default  默认值必须是一个列表,pytest 会把 default  默认参数的值和多个自定义参数的值放在一个列表中:

# 注册自定义参数 cmdopt 到配置对象
def pytest_addoption(parser):parser.addoption("--cmdopt", action="append",default=['这是默认参数'],help="将命令行参数 ’--cmdopt' 添加到 pytest 配置中")if __name__ == '__main__':# 使用参数pytest.main(['-s', '--cmdopt=98k', '--cmdopt=毛瑟小手枪'])
# 控制台打印参数值:
============================= test session starts =============================
test_Z.py::TestDemoA::test_A_001 --cmdopt的值: ['这是默认参数', '98k', '毛瑟小手枪']
PASS
============================== 1 passed in 0.02s ==============================

action="store_const":使用 const 为命令行参数指定一个常量值,必须和 const 参数同时使用,使用这个模式后命令行参数不能赋值:

def pytest_addoption(parser):parser.addoption("--cmdopt", action="store_const",default='这是默认参数',const='这个是为命令行参数指定的常量值...',help="将命令行参数 ’--cmdopt' 添加到 pytest 配置中")if __name__ == '__main__':pytest.main(['-s','--cmdopt'])
# 控制台打印参数值:
============================= test session starts =============================
test_Z.py::TestDemoA::test_A_001 --cmdopt的值: 这个是为命令行参数指定的常量值...
PASS
============================== 1 passed in 0.02s ==============================

action="append_const":存储一个列表,使用 const 为命令行参数指定一个常量值,并将 default 默认值和 const  常量值添加到列表中,这个模式可以同时多次使用自定义参数,但是还是不能赋值,只能使用常量;

def pytest_addoption(parser):parser.addoption("--cmdopt", action="append_const",default=['这是默认参数'],const='这个是为命令行参数指定的常量值...',help="将命令行参数 ’--cmdopt' 添加到 pytest 配置中")if __name__ == '__main__':pytest.main(['-s','--cmdopt', '--cmdopt'])
# 控制台打印参数值:
============================= test session starts =============================
test_Z.py::TestDemoA::test_A_001 --cmdopt的值: ['这是默认参数', '这个是为命令行参数指定的常量值...', '这个是为命令行参数指定的常量值...']
PASS
============================== 1 passed in 0.02s ==============================

3. type:type 的类型可以是 python 的基础类型,比如:int,str,float,list 等类型,如果不指定类型的话,pytest会把接受到的参数值都默认为 str 类型,所以我们有时需要指定参数的类型:

注意:在使用 type 指定类型时,也需要把 default 的类型修改为同样的类型!

def pytest_addoption(parser):parser.addoption("--cmdopt", action="store",default=100,type=int,help="将命令行参数 ’--cmdopt' 添加到 pytest 配置中")if __name__ == '__main__':pytest.main(['-s', f'--cmdopt=888'])
# 控制台打印参数值:
============================= test session starts =============================
--cmdopt的值: 888
--cmdopt的类型: <class 'int'>
PASS
============================== 1 passed in 0.02s ==============================

4. choices:choices 可以指定几个值,自定义参数必须在这几个值中选择一个,否则会报错:

def pytest_addoption(parser):parser.addoption("--cmdopt", action="store",default='100',choices= ['python', 'java', 'c++'],help="将命令行参数 ’--cmdopt' 添加到 pytest 配置中")if __name__ == '__main__':pytest.main(['-s', f'--cmdopt=888'])
# 控制台打印结果:ERROR: usage: conftest.py [options] [file_or_dir] [file_or_dir] [...]
conftest.py: error: argument --cmdopt: invalid choice: '888' (choose from 'python', 'java', 'c++')

【pytest】Hook 方法之 pytest_addoption :注册命令行参数相关推荐

  1. Pytest之收集用例及命令行参数

    VOL 146 28 2020-07 今天距2021年156天 这是ITester软件测试小栈第146次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  2. pytest合集(3)— 命令行参数

    1.命令行参数大全 使用 pytest -h 可以查看 pytest 的命令行参数,有 10 大类共 132 个. 详见:Python pytest 132 个命令行参数用法 - 习久性成 - 博客园 ...

  3. NS3 Command Line Arguments 使用命令行参数改变脚本

    转自:http://blog.sina.com.cn/s/blog_7ec2ab360102wxgr.html 除了通过NS_LOG环境变量外,另一个不用编译就可以改变NS3脚本的方法就是通过使用命令 ...

  4. 3gpp文件头文件解析_居于LLVM 的命令行参数解析

    在写命令行程序的时候经常需要解析各种命令行参数.打印help信息等,觉得非常的麻烦.今天介绍一种超级棒的命令参数解析的方法:居于LLVM 的命令行参数解析,有了它妈妈再也不用担心我不会解析命令行参数^ ...

  5. python 命令行参数—argparse模块的使用

    简单示例 我们先来看一个简单示例.主要有三个步骤: 创建 ArgumentParser() 对象 调用 add_argument() 方法添加参数 使用 parse_args() 解析添加的参数 .示 ...

  6. Python 中的解析命令行参数

    argparse argparse 是 Python 内置的一个用于命令项选项与参数解析的模块,通过在程序中定义好我们需要的参数,argparse 将会从 sys.argv 中解析出这些参数,并自动生 ...

  7. 笨办法学 Python · 续 练习 4:处理命令行参数

    练习 4:处理命令行参数 原文:Exercise 4: Dealing with Command Line Arguments 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 在 ...

  8. 老李推荐:第8章2节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-解析处理命令行参数...

    老李推荐:第8章2节<MonkeyRunner源码剖析>MonkeyRunner启动运行过程-解析处理命令行参数 MonkeyRunnerStarter是MonkeyRunner启动时的入 ...

  9. 使用命令行参数接受输入数据,从中选出最大和最小值

    1.编写一段程序,接收用户从键盘上输入的三个整数x,y,z,从中选出最大和最小者. 要求:使用命令行参数接收用户数据 //若无强制要求使用命令行参数接受用户数据,则还可以用Scanner来进行输入 i ...

最新文章

  1. android的天气和时钟部件,Android的天气和时钟部件
  2. 怎样训练左右手协调_2019中考体育训练计划
  3. 基于MATLAB的语音信号的时域特性分析(一)——分帧、窗函数
  4. jetson nano 人脸
  5. php中单引号与双引号的区别
  6. SAP云平台里Run index.html和Run as SAP Fiori Launchpad的区别
  7. 牛客网SQL篇刷题篇(38-47)
  8. 【问题解决方案】CentOS7替换yum的问题:使用yum makecache出现File contains no section headers
  9. Linux环境下配置虚拟ip,方法2:单网卡绑定多IP
  10. Xshell_5安装与使用
  11. 苗条的生成树_苗条手册
  12. js实现word转换为html
  13. 什么是RTOS系统定义分析
  14. Creator新手引导 | 限制只能点击一个按钮 | 文字打字机效果
  15. 2020电子设计大赛E题复盘
  16. Android手机GPS卫星定位与通过WLAN与移动网络定位的区别?
  17. Windows程式开发设计指南(十六)调色盘管理器
  18. 压缩包文件的解压密码忘记了怎么办?
  19. 用友T3-出纳通多个账户合并制单
  20. 菜鸟学习网络以及ensp组网配置基础(一)

热门文章

  1. python中利用字典加密字符串_python 数字字典加密非汉字
  2. 集合中的实体类根据一个字段合并_JAVA中序列化与反序列化
  3. python读取nii文件_python 读取.nii格式图像实例
  4. Oracle 创建磁盘组报错ORA-15137的问题分析与解决思路
  5. 资源放送丨《一次特殊的Oralce硬解析性能问题的技术分享》PPT视频
  6. 再也不用担心无法将中断绑定到多队列网了
  7. JDK 动态代理与 CGLIB 动态代理,它俩真的不一样
  8. GaussDB(DWS)应用实践丨负载管理与作业排队处理方法
  9. 耦合层:撮合物联网的理论与实践牵手的“月老”
  10. 基于React-Native0.55.4的语音识别项目全栈方案