pytest官网:https://docs.pytest.org/en/stable/usage.html#cmdline
一、pytest 收集测试用例规则
1、收集测试用例的目录规则:
- 1、如果没有指定路径模块参数,默认从当前目录下收集用例
- 2、如果配置了
testpath
,即在配置目录中进行收集测试用例 - 3、默认会递归所有目录,除非匹配
norecursedirs
配置的目录
2、模块收集规则:
默认在目录下收集所有test_*.py
和*_test.py
的模块
3、类和函数的收集规则
- 1、默认以 test 作为前缀的类外面的函数
- 2、以 Test 为前缀且不包含
__init__
方法的的类里面的以test作为前缀的函数和方法
二、pytest执行方法
- pytest命令 pytest [options] [file_or_dir] [file_or_dir] [...]
- python 代码
pytest.main(['-s', '-v']) 参数是一个字符串列表
- 执行用例的顺序
- 在模块级别采用模块名的ascii码顺序,在模块内部根据从上往下的定义顺序来执行。
-s,-v表示的意义
三、脚手架 fixture 前置后置 夹具
-
经典的xunit风格
- 函数级(定义在模块中)
- setup_function
- teardown_function- 方法级(类中) - self.setup_method - self.teardown_method - 类级 - 类方法 - setup_class(cls) - teardown_class(cls) - 模块级别 - setup_module - teardown_module
unittest
- 方法级
self.setUp 前置
self.tearDown后置
- 类级
setUpClass
tearDownClass@pytest.fixture
-定义
- 通过装饰器@pytest.fixture可以定义夹具
- 使用
- 1. @pytest.mark.usefixtures(夹具的函数名字符串)
- 2. 在测试函数中以夹具函数名作为参数
- 使用这个夹具
- 接受这个夹具返回值
- 3. 通过yield语句实现后置
- 作用范围 @pytest.fixture(scope='function')
function 默认范围,函数范围,在测试完成后结束
class 在类中最后一个测试完成后结束
module 在模块中最后一个测试完成后结束
package 在包中的最后一个测试完成后结束
session 在一次会话中的最有一个测试完成后结束(整个项目)
- 自动执行 @pytest.fixture(autouse=True)