pytest框架-常见参数、配置文件、高级参数化和报告生成

pytest 安装
a)安装
pip install pytest
b)验证安装
pytest --version

1、pytest的⽤例运⾏规则

1)pytest将在当前⽬录及其⼦⽬录中运⾏所有格式为test_.py或者_test.py⽂件
2)测试⽅法/测试函数 默认必须是test开头
3) 测试类必须是Test开头
4) 测试类不能有构造⽅法 init,会影响用例的收集

2、pytest常⽤运⾏参数

"-s" 参数 ⽤于关闭捕捉,从⽽输出打印信息到控制台,如果不输入【-s】,测试报告中会捕捉打印信息,输入后不再捕捉打印信息
"-v" 参数 ⽤于显⽰具体的⽤例执⾏信息‘
“-k” 参数+用例名:运⾏名称中包含某字符串的测试⽤例
"-q"参数:简化输出信息
“-x” 参数: 如果出现⼀条测试⽤例失败,则退出测试

 指定⽬录以及特定类或⽅法执⾏
pytest.main(['-s','./doc/test_112233.py::TestDemo::test_case_03'])

3、执行顺序-层级关系

  使用main运行的时候,是按照层级依次往下查找的,不会往上查找(***同一个目录下,最好只有一个main文件和用来执行框架***

if __name__ == '__main__':

    pytest.main(['-s'])

 图中这种层级,运行了4个同级的文件和一个下级test_112233.py文件,自动寻找Test_开头或者_Test结尾的类,和test_开头或_test结尾的方法/函数。

4、生成简单报告

pytest.main(['--junit-xml=./report/junit_report01.xml'])

5、执行失败控制

# 用例失败控制
    # pytest.main(['--maxfail=1'])  # 执行的时候最大失败次数为1,失败1条就停止运行。

6、通过标记表达式取执行

  通常用来版本控制,比如V1.0和V2.0版本的用例在一个文件中,只想执行V2.0的时候,表达式取V2.0

  先在项目中建立一个简单文件,命名为pytest.ini 的配置文件。写入一些信息。如下:

  (***同一个目录下,最好只有一个main文件和pytest.ini用来执行框架***

[pytest]
markers =
    smoke: marks tests as smoke
    slow
    happy
    serial

然后在脚本文件的用例前加装饰器

 然后执行,用标记表达式执行

# pytest.main(['-m', 'smoke'])

  7、指定.py文件执行

if __name__ == '__main__':
    pytest.main(['test_many.py'])     # 直接填写[".py文件名"]

8、多线程执行

    
# 需要先安装对应插件 pytest-xdist: pip install pytest-xdist(不安装会报错)
# 将测试执行发送给多个CPU
    # pytest.main(['-n', '2', 'test_many.py'])

    # 使用与计算机具有CPU内核一样多的进程
    # pytest.main(['-n', 'auto', 'test_many.py'])

9、失败重新运行用例

pytest-rerunfailures是⼀个可以使pytest重新运⾏测试的插件,以消除间歇性故障。
安装要求:
您需要具备以下先决条件才能使⽤pytest-rerunfailures:
安装:pip install pytest-rerunfailures
Python 3.5,最⾼3.8或PyPy3
pytest 5.0或更⾼版本
if __name__ == '__main__':
    # 重新运行失败的用例,指定失败次数最大为3
    # pytest.main(['--reruns', '3', 'test_rerun.py'])

    # 在每次失败重跑之前,增加一个延迟时间
    pytest.main(['--reruns', '3', '--reruns-delay', '2', 'test_rerun.py'])

10、pytest的setup和teardown函数

  ***自动化中的用途,举例:比如setup用作用例执行前的数据处理,,teandown用来关闭浏览器***

    不同的setup函数不要混用,在最新版本中,是不支持混用的
    setup_module/teardown_module:在当前文件中,所有的用例执行之前执行
    setup_function/teardown_function:在每个测试函数之前和之后执行
    setup_method/teardown_method:在每个测试函数之前和之后执行(在类中每次都执行,在类的外面,只执行一次)
 
  # 在每个测试函数之前和之后执行(在类中每次都执行,在类的外面,只执行一次)
类的外面:setup和teardown只运行一次

 类的里面:setup和teardown每次都执行

 

 11、pytest配置⽂件

  pytest.ini全局配置文件,是pytest单元测试框架的核心配置文件

作用:pytest.ini 可以改变 pytest 的默认行为
位置:一般放在项目的根目录(即当前项目的顶级文件夹下)
命名:pytest.ini,不能使用任何中文符号,包括汉字、空格、引号、冒号等等
新建配置文件,点击鼠标右键(New->File->pytest.ini)
编码格式:GBK或者ANSI,可以使用notepad++修改编码格式
运行的规则:不管是主函数模式运行,命令行模式运行,都会去读取这个全局配置文件。
格式一般是固定的,建议将中文删掉:
————————————————
版权声明:本文为CSDN博主「福多多的福」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Moonlight_16/article/details/122706934

[pytest]
;addopts:配置命令行参数,用空格进行分隔
;可执行标记为mark的对应用例,用or表示标记为demo或者smoke的用例都会执行
addopts = -vs  --alluredir=./results/json --clean-alluredir -m "demo or smoke"  # 这里输入了命令,pytest.main()中就不需要输入前面的参数了

;注册 mark 标记
markers =
    demo : marks tests as demo
    smoke: marks tests as smoke
    uat : marks tests as uat
    test : marks tests as test

minversion = 5.0  # 设置pytest的最低版本是5.0

;测试用例的路径,可自己配置,
;../pytestproject为上一层的pytestproject文件夹  
;./testcase为pytest.ini当前目录下的同级文件夹
;改变用例的查找路径规则,当前目录的testcase文件夹
testpaths =./testcase  # 这里设置了执行路径后,就会按照设置路径为准去找设置路径下的执行文件进行执行,这里只会查找testcase目录及子目录下的文件

;模块名的规则,配置测试搜索的模块文件名称 python_files = test*.py   # 这里如果改成auto_*.py 则不会执行test_*开头的文件了,而是执行auto_*开头的文件
;类名的规则,配置测试搜索的测试类名 python_classes = Test*      # 这里如果改成auto_*.py 则不会执行test_*开头的测试类了,而是执行auto_*开头的测试类
;方法名的规则,配置测试搜索的测试函数名 python_functions = test    # 这里如果改成auto_*.py 则不会执行test_*开头的方法了,而是执行auto_*开头的方法

12、pytest-html插件(测试报告)

pytest-html插件
安装:
pip install pytest-html
使⽤⽅法: 命令⾏格式:pytest --html=⽤户路径/report.html

13、Pytest⾼阶⽤法之函数数据参数化

⽅法:
 parametrize(argnames, argvalues, indirect=False, ids=None, scope=None)
常⽤参数:
 argnames:参数名
 argvalues:参数对应值,类型必须为list
 当参数为⼀个时格式:[value]
 当参数个数⼤于⼀个时,格式为:[(param_value1,param_value2.....),
(param_value1,param_value2.....)]
使⽤⽅法:
 @pytest.mark.parametrize(argnames,argvalues)
 参数值为N个,测试⽅法就会运⾏N次

  取多个值

   单个变量,多个value,元组中的value取单个值

  变量数量=value数量的情况下,元组中的value,value直接用数组的方式

 单个变量,列表里有多个VALUE

 

 

 


 

posted @ 2023-10-30 18:28  琉璃星眸  阅读(43)  评论(0编辑  收藏  举报