pytestpython的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。根据pytest的官方网站介绍,它具有如下特点:

 

1.非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考

 

2.能够支持简单的单元测试和复杂的功能测试

 

3.支持参数化

 

4.支持重复执行(rerun)失败的case

 

5.支持运行由 unittest编写的测试case

 

6.方便的和持续集成工具jenkins集成

 

7.可支持执行部分用例

 

8.具有很多第三方插件,并且可以自定义扩展

 

 

安装:pip install –U pytest

接下来通过一些小demo对pytest有一个初步的认识。

test_demo.py内容如下:

pytest win10运行结果乱码 pytest运行原理_pytest win10运行结果乱码

两个测试函数,断言通过assert即可,相比unittest更加灵活,运行结果如下:

(在test_demo.py所在目录中执行pytest或py.test命令)

pytest win10运行结果乱码 pytest运行原理_python_02

pytest会自动查找当前目录及其子目录下以test_*.py或*_test.py文件,找到文件后,在文件中找到以test开头函数并执行,如上可见执行结果断言通过一个,失败一个。

这里需要注意一点,模块名与测试函数的命名规则,如不遵循pytest会找不到用例,如下:

pytest win10运行结果乱码 pytest运行原理_测试框架_03

只发现了test_two测试函数,或将测试文件的名称修改看下结果,如下将test_demo.py修改为demo.py,执行名后并不会发现测试文件:

pytest win10运行结果乱码 pytest运行原理_测试类_04

虽然找不到测试文件但是可以通过指定文件来运行里面的测试函数

pytest win10运行结果乱码 pytest运行原理_pytest win10运行结果乱码_05

 

当测试函数较多的时候可以写在一个测试类里面便于管理:

pytest win10运行结果乱码 pytest运行原理_pytest_06

需要注意基于pytest的测试类下不能含有__init__构造方法:否则执行会报错

pytest win10运行结果乱码 pytest运行原理_python_07

总结以下规则:

1.如果pytest命令行有指定目录,则从该目录中开始查找测试用例文件,如果没有指定,则从当前运行目录开始查找文件。

2.并不是能够查找到目录下的所有文件,只有符合命名规则的文件才会被查找。默认规则是以test_开头或者以_test结尾的.py文件。

3.在测试文件中查找Test开头的类,以及类中以test_开头的方法,查找测试文件中test_开头的函数。

4.除非pytest命令指定到测试用例文件,否则测试用例文件命名应该以 test_开头或者以_test结尾。

5.测试函数命名,测试类的方法命名应该以test_开头。

6.测试类命名应当以Test开头,并且不能包含__init__方法。

当然这种规则不是一成不变的,如果因为某种需要,可以通过pytest.ini配置文件来修改命名规则, 在测试系统的顶层目录创建pytest.ini文件,在pytest.ini文件中写入如下配置:

pytest win10运行结果乱码 pytest运行原理_测试类_08


此时文件必须以a开头,测试类以b开头,测试函数以c开头,如下:

pytest win10运行结果乱码 pytest运行原理_pytest_09

 

执行结果:

pytest win10运行结果乱码 pytest运行原理_pytest win10运行结果乱码_10