pytest是python的一种单元测试框架,与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内容如下:
两个测试函数,断言通过assert即可,相比unittest更加灵活,运行结果如下:
(在test_demo.py所在目录中执行pytest或py.test命令)
pytest会自动查找当前目录及其子目录下以test_*.py或*_test.py文件,找到文件后,在文件中找到以test开头函数并执行,如上可见执行结果断言通过一个,失败一个。
这里需要注意一点,模块名与测试函数的命名规则,如不遵循pytest会找不到用例,如下:
只发现了test_two测试函数,或将测试文件的名称修改看下结果,如下将test_demo.py修改为demo.py,执行名后并不会发现测试文件:
虽然找不到测试文件但是可以通过指定文件来运行里面的测试函数
当测试函数较多的时候可以写在一个测试类里面便于管理:
需要注意基于pytest的测试类下不能含有__init__构造方法:否则执行会报错
总结以下规则:
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文件中写入如下配置:
此时文件必须以a开头,测试类以b开头,测试函数以c开头,如下:
执行结果: