前言:
和unittest一样,pytest也有一套用例设计的规则和执行顺序。
一、用例设计原则:
1、文件必须以 test_*开头 或 *_test结尾。 |
2、测试用例类必须以 Test开头。 |
3、测试用例必须以 test 开头。 |
二、验证用例收集规则:
有这样一个目录结果:有2个package(模块包,有__init__.py文件),一个directory(文件夹,无__init__.py文件)。
其中,package和directory中都有2个.py文件,一个以test开头,一个非test开头。
每个.py文件中有要给Test类和非Test类,而Test类中有一个test开头的方法和非test开头的方法。
执行结果如下:
我们可以看到:
1、无论是package还是directory,都是pytest的收集对象。
2、非test*_开头或*_test结尾的.py文件不会被收集。
3、非Test开头的类不会被收集。
4、非test开头的方法不会被收集。
这样我们就得出并验证了规则:
1、test_* 开头 或 *_test结尾的.py文件。
2、Test开头的类。
3、test开头的方法或函数。
二、执行顺序:
和unittest一样,遵循ASCII码的顺序:0~9,a~z, A-Z
重点:
pytest会收集当前目录及其子目录下的符合用例设计规则的用例:
runner.py有pytest执行入口:pytest.main(["-s"]),我们看运行时收集的用例从哪里来:
我们可以看到,runner.py收集了和他同一目录中的package或directory(如果有子目录,也会收集)
我们在看下面的示例:
该实例时在testcase1文件夹中加了一个runner1.py(和runner.py代码一样,有pytest执行入口)
收集的用例如下:
我们可以看到,runner1只收集了他所在目录(当前目录)下的test_1.py文件。
所以,我们的出来一个结论:pytest会收集当前目录或子目录中的测试用例。
思考:那我们如果从右上角并用pytest框架运行整个项目呢?
可参考小菠萝的测试笔记:https://www.cnblogs.com/poloyy/p/12641505.html