pytest全局配置+前后只固件配置
- 通过读取pytest.ini配置文件运行
- 通过读取pytest.ini配置文件运行
- 无条件跳过
- pytest.ini
- test_mashang.py
- run.py
- 有条件跳过
- test_mashang.py
- pytest框架实现的一些前后置(固件、夹具)处理
- 方法一(封装)
- 方法二(装饰器)
- YAML文件实现接口自动化
通过读取pytest.ini配置文件运行
pytest.ini是pytest单元测试框架的核心配置文件
- 位置:一般放在项目的根目录
- 编码:必须是ANSI,可以使用notepad++修改编码格式
- 作用:改变pytest默认的行为
- 运行规则:不管是主函数的模式运行还是命令行模式运行,都会读取这个文件
通过读取pytest.ini配置文件运行
无条件跳过
pytest.ini
[pytest] ; pytest配置部分addopts = -vs
;pytest的额外选项:
;-v: 详细模式,增加输出的详细程度
;-s: 不捕获stdout,允许显示print语句
;结合使用这些选项,可以提供详细的输出并允许在测试中显示print语句testpaths=./testcases
; 指定测试用例所在的目录python_files=test_*.py
; 测试文件的查找模式:
; 匹配以"ms_"开头并以".py"结尾的任何文件python_classes=Test*
; 测试类的查找模式:
; 匹配以"Test"开头的任何类名python_functions=test_*
; 测试函数的查找模式:
; 匹配以"test_"开头的任何函数名#测试用例分组执行
markers =smoke:冒烟用例mashang:码尚教育product_manage:商品管理模块用例user_manage:用户管理模块
test_mashang.py
from time import sleepimport pytestclass TestMashang:@pytest.mark.skip(reason="无理由跳过")# @pytest.mark.smokedef test_baili(self):sleep(3)print("测试百利老师")# raise Exception("百里老师开车")def test_tom(self):sleep(3)print("测试汤姆老师")# @pytest.mark.smokedef test_yiyao(self):sleep(3)print("测试一摇老师")# 主函数
if __name__ == '__main__':pytest.main()
run.py
import pytest
if __name__ == '__main__':pytest.main()
有条件跳过
test_mashang.py
from time import sleepimport pytestclass TestMashang:workage = 8@pytest.mark.skip(reason="无理由跳过")# @pytest.mark.smokedef test_baili(self):# sleep(3)print("测试百利老师")# raise Exception("百里老师开车")def test_tom(self):# sleep(3)print("测试汤姆老师")@pytest.mark.skipif(workage < 10, reason="工龄小于10跳过")# @pytest.mark.smokedef test_yiyao(self):# sleep(3)print("测试一摇老师")# 主函数
if __name__ == '__main__':pytest.main()
pytest框架实现的一些前后置(固件、夹具)处理
- setup/teardown,setup_class/teardown_class
def setup_class(self):print("在每个类之前执行一次")def teardown_class(self):print("在每个类之后执行一次")def setup(self):print("在每个用例之前执行一次")# sleep(3)def teardown(self):print("在每个用例之后执行一次")
方法一(封装)
class CommonUtil:def setup_class(self):print("在每个类之前执行一次")def teardown_class(self):print("在每个类之后执行一次")def setup(self):print("在每个用例之前执行一次")def teardown(self):print("在每个用例之后执行一次")
方法二(装饰器)
使用@pytest.fixture装饰器实现部分用例的前后置
@pytest.fixture装饰器的几个参数:
scope:表示被装饰器标记的方法的作用域
function:在函数之前和之后执行
class:在类之前和之后执行
package/session:在整个项目会话之前和之后执行
autouse:自动执行,默认是false
@pytest.fixture(scope="function",autouse=True)
def exe_database_sql():print("执行sql查询")yieldprint("关闭数据库连接")
YAML文件实现接口自动化
def read_yaml():return ['chenglong','zhenzidan','caiyilin']
@pytest.fixture(scope="function",autouse=False,params=read_yaml())
def exe_database_sql(request):print(request.param)print("执行sql查询")yield request.paramprint("关闭数据库连接")