一、前言
- 目前Python做自动化测试常用的框架有pytest和unittest
- unittest作为Python默认默认的单元测试框架是广为人知,由于其历史悠久,很多人都用来做自动化
- pytest是基于unittest开发的另一款更高级更好用的单元测试框架
- pytest能直接兼容unittest用例,易用性也更好
二、Pytest的特点
Pytest 可以用来做 系统测试 的自动化, 它的特点有
- 用 Python 编写测试用例,简便易用
- 可以用 文件系统目录层次 对应 手工测试用例 层次结构
- 灵活的 初始化清除 机制
- 可以灵活挑选测试用例执行
- 利用第三方插件,可以生成美观的可视化的报表
三、安装Pytest
直接执行 如下命令即可安装 pytest
pip install pytest
中文文档:https://www.osgeo.cn/pytest/contents.html
四、快速上手
4.1.Pytest 自动化测试用例规则
官方文档 给出了 pytest 寻找 测试项 的 具体规则:
- 如果未指定命令行参数,则从 testpath(如果已配置)或当前目录开始收集。
- 如果命令行参数, 指定了 目录、文件名 或 node id 的任何组合,则按参数来找
- 寻找过程会递归到目录中,除非它们匹配上 norecursedirs。
- 在这些目录中,搜索由其测试包名称导入的 test_*.py 或 *_test.py 文件。
从这些文件中,收集如下测试项:
- test为前缀 的 函数
- Test为前缀的 类 里面的 test为前缀的方法
- 以 Test 开头的类,不能包含 __init__ 方法
- 所有的包 package 必须要有__init__.py 文件
4.2.测试用例代码
编写的测试用例代码文件, 必须以 test_
_test
test_case01.py
下面。
内容如下:
class Test_pass:
def test_01(self):
print('********用例01********')
assert 1 == 1
def test_02(self):
print('********用例02********')
assert 2 == 2
def test_03(self):
print('********用例03********')
assert 3 == 2
注意:
- 如果把测试用例存放在类中, 类名必须以
Test
类
test
为前缀的方法。 - pytest 中用例的检查点 直接用 Python 的 assert 断言。
- assert 后面的表达式结果 为 True ,就是 检查点 通过,结果为False ,就是检查点 不通过。
4.3.运行测试
- 执行测试非常简单,打开命令行窗口,进入项目根目录(我们这里就是 test_case),执行命令程序 pytest ./test_case/test_case01.py 即可,上面的示例执行结果如下
显示找到3个测试项,2个执行通过,1个不通过。通过的用例 是用一个小点表示, 不通过的用例用一个F表示,并且会在后面显示具体不通过的用例 和不通过的检查点 代码细节。
- pytest 不会使用print打印的内容。如果我们希望 显示测试代码中print的内容,因为这些打印语句在调试代码时很有用,可以加上命令行参数 -s,例如:
pytest -s .\test_case\test_case01.py
执行后如下图:
- 如果我们希望得到更详细的执行信息,包括每个测试类、测试函数的名字,可以加上参数 -v,这个参数可以和 -s 合并为 -sv,如下:
pytest -sv .\test_case\test_case01.py
执行后如下图:
- 执行 pytest 时, 如果命令行没有指定目标目录 或者 文件, 它会自动搜索当前目录下所有符合条件的文件、类、函数。为了防止 pytest 到其他目录中找测试用例项,执行测试时,我们可以在命令行加上目标目录名字 ,就像上面这样:
#指定是从项目根目录下的test_case中查找执行
pytest -sv ./test_case
4.4.产生报告
前面在安装pytest,我们需要安装 pytest-html 插件,这个插件就是pytest用来产生测试报告的。
pip install pytest-html
要产生报告,在命令行加上 参数 --html=report.html --self-contained-html
,如下
pytest ./test_case/test_case01.py --html=report.html --self-contained-html
这样就会产生名为 report.html 的测试报告文件,可以在浏览器中打开
五、Pycharm运行Pytest
平时写代码都在Pycharm写的,怎么可能一直用cmd来跑用例呢,现在我们就来看看在Pycharm中如何运行Pytest
- 首先,我们先要去settings里面设置单元测试框架为Pytest
- 如果是nosetests的话,右键运行是以python脚本运行的哦
- 如果设置了unittest则是以unittest框架去运行
如下图所示
运行如下:
注意
- pytest 可以兼容 unittest 用例,之前写的 unittest 用例也能用 pytest 框架去运行