Pytest是一个非常成熟的全功能的Python测试框架,主要有以下特点:
简单灵活,容易上手,文档丰富
支持参数化,可以细粒度地控制测试用例
支持简单的单元测试与复杂的功能测试,还可以用来做Selenium、Appium、Requests等UI、接口自动化测试
支持很多第三方插件,并且可以自定义扩展(Pytest插件下载地址)
支持测试用例的跳过与失败重试
可以很好的与CI工具结合,比如Jenkins
pip install pytest
import pytest
def test01():
print('第一条用例')
assert True
def test02():
print("第二条用例")
assert False
if __name__=="__main__":
# -s:显示用例中的输出
# -v:输出更详细的用例执行信息
# __file__:本文件
pytest.main(["-s", "-v", __file__])
运行结果如下图:
每执行一个测试用例就执行一次初始化&结束方法
import pytest
class Test:
def setup(self):
print("初始化")
def teardown(self):
print("结束")
def test01(self):
print('第一条用例')
assert True
def test02(self):
print("第二条用例")
assert False
if __name__=="__main__":
pytest.main(["-s",__file__])
执行结果图:
不管类中有多少条用例需要执行,仅仅只执行一次初始化&结束方法
import pytest
class Test:
def setup_class(self):
print("初始化")
def teardown_class(self):
print("结束")
def test01(self):
print('第一条用例')
assert True
def test02(self):
print("第二条用例")
assert False
if __name__=="__main__":
pytest.main(["-s",__file__])
执行结果图:
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036
安装测试报告插件
pip install pytest-html
在项目目录下创建 pytest.ini 配置文件,配置文件中新增测试报告存储路径。
[pytest]
# 在当前目录下创建report目录存放测试报告
addopts = --html=./report/report.html
执行测试,生成的测试报告如下图:
安装插件
pip install pytest-rerunfailures
全局重试:在配置文件中增加重试参数,控制所有用例失败后的重试及重试等待时间
[pytest]
addopts = --html=./report/report.html --reruns 3 --reruns-delay 2
# --reruns n,n是一个整数,表示重试次数
# --reruns-delay n,n是一个整数,表示重试等待时间,单位是s
测试报告中可以看出失败用例的重试情况
单个重试:在某个用例函数中增加装饰器,注意需要将 全局重试 的配置注释掉
# reruns指定重试次数,reruns_delay指定重试间隔
@pytest.mark.flaky(reruns=2, reruns_delay=1)
def test02(self):
print("第二条用例")
assert False
测试报告中看重试情况:
pytest-xdist的出现就是为了让自动化测试用例可以分布式执行,从而节省自动化测试时间
安装插件
pip install pytest-xdist
多CPU并行执行
pytest -n 并行测试数量
使用pytest进行断言判断的时候,为了用例的精准性,经常会多个方面进行断言,比如:
断言1:断言响应的http的状态
断言2:断言响应返回的code值
断言3:断言响应返回的json中的data字段是否符合预期。
如果使用原生python的assert,就会遇到一个断言失败则全部失败的情况。比如说,断言1结果为Failed,那么断言2和断言3都不会被执行。我们希望断言2和断言3继续执行,这样我们能获取更多的断言结果来判断出接口哪里出了问题,能够更好地进行问题定位,这时候就可以使用pytest-assume插件来实现。
安装插件
pip install pytest-assume
使用案例
import pytest
def test_add2():
pytest.assume(1 + 4 == 5)
pytest.assume(1 + 3 == 3)
pytest.assume(2 + 5 == 7)
pytest.assume(2 + 5 == 9)
print("测试完成")
if __name__=="__main__":
pytest.main(["-s", "-v", __file__])
执行结果如下图,可以看出总共执行了四个断言,其中失败的断言有2个
在我们进行自动化测试的时候,用例往往是成百上千,执行的时间是几十分钟或者是小时级别。有时,我们在调试那么多用例的时候,不知道执行到什么程度了,而pytest-sugar插件能很好解决我们的痛点。
安装pytest-sugar插件
pip install pytest-sugar
在命令行中执行用例文件,执行结果如下图,用例执行时会有进度条展示:
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!