Pytest使用介绍

之前做接口自动化测试接触的都是python+unittest+ requests+HTMLTestRunner,现在公司用的是pytest,趁周末的时间先整体熟悉下~
 
一、概述
pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点:
  • 1、简单灵活,容易上手,文档丰富;
  • 2、支持参数化,可以细粒度地控制要测试的测试用例;
  • 3、能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests);
  • 4、pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等;
  • 5、测试用例的skip和xfail处理;
  • 6、可以很好的和CI工具结合,例如jenkins
 
二、安装
1、安装:
pip install pytest
2、验证安装:
pytest --version
 
三、简单使用说明
1、pytest框架约束
所有的单测文件名都需要满足test_*.py格式或*_test.py格式。
在单测文件中,测试类以Test开头,并且不能带有 init 方法(注意:定义class时,需要以T开头,不然pytest是不会去运行该class的)
在单测类中,可以包含一个或多个test_开头的函数
在执行pytest命令时,会自动从当前目录及子目录中寻找符合上述约束的测试函数来执行。
 
2、简单示例
下面是最简单的一个示例
下面我们以这个最简单的例子来举例
 
3、pytest运行方式
(1)测试函数模式,如上图:
pytest.main(['test_demo.py'])
(2)命令行模式:pytest 文件路径/测试文件名
例如:
pytest pytest_demo.py
4、控制测试用例执行
(1)在第N个用例执行失败后,结束测试执行
pytest -x  pytest_demo.py                  # 第01次失败,就停止测试
pytest --maxfail=2  pytest_demo.py         # 出现2个失败就终止测试
(2)指定测试模块
pytest pytest_demo.py 
(3)指定测试目录
pytest pytest_test/
(4)通过关键字表达式过滤执行
pytest -k "not 3"  #执行的时候会跳过test_3,只执行test_1和test_2
(5)通过node id指定测试用例
node id由模块名、分隔符、类名、方法名、参数构成,举例:
运行模块中的指定用例: 
pytest test_demo.py::test_1 #只运行test_1
因为上面的例子上没有类,如果存在类的话指定的方法是一致的
(6)通过标记表达式执行
pytest -m slow # 这条命令会执行被装饰器 @pytest.mark.slow 装饰的所有测试用例
(7)通过包执行测试
pytest --pyargs pkg.testing # 这条命令会自动导入包 pkg.testing,并使用该包所在的目录,执行下面的用例。
 
5、多进程运行cases
如果cases量比较大的话,运行的时间可能会很长,这时候就需要多进程来运行
安装pytest-xdist:
pip install -U pytest-xdist
运行模式:
pytest test_demo.py -n NUM # 其中NUM填写并发的进程数。
 
6、重试运行cases
在做接口测试后,503或者网络波动,可能导致case运行失败,此时可以通过重试运行case的方式来解决
安装pytest-rerunfailures:
pip install -U pytest-rerunfailures
运行
 pytest test_se.py --reruns NUM # 其中NUM填写重试的次数
 
7、如何显示print内容
在运行脚本时,我们会通过print来调试或者打印一些内容,加上-s就可以了。
pytest test_demo.py -s
另外,pytest的多种运行模式是可以叠加执行的,比如说,你想同时运行个进程,又想打印出print的内容。可以用:
pytest test_demo.py -s -n 3
 
 
 
 

 

原文地址:https://www.cnblogs.com/daydayup-lin/p/13458960.html