目录
Pytest框架详解+mark标记+fixture夹具
1,pytest介绍
pytest是python的一种单元测试的框架,同自带unittest测试框架比较类型,相比于unittest框架使用起来更加简洁,效率更高,功能更加强大。
2,pytest特点
容易上手,入门比较简单,文档比较丰富,有很多实例可以进行参考支持参数化
执行测试用例过程中可以将某些测试用例进行跳过,或者直接标记预期失败支持重复的执行失败用例
便捷管理用例,方便和持续集成工具集成,便于生成测试报告具有很多的第三方插件,并且可以自定义的扩展功能
3,框架的核心作用:
找到测试用例执行测试用例断言测试结果生成测试报告
所有步骤和流程都是自动化的过程,需要自己搭建测试的框架。
4,pytest详解和常用的插件安装
pytest有很多的强大的插件:
生成测试报告:pytest-html多线程运行:pytest-xdist
控制用例的执行顺序:pytest-ordering失败用例重跑:pytest-rerunfailures
生成企业级专业版的测试报告:allure-pytest测试框架本身:pytest
管理基础路径:pytest-base-url
。。。
如何安装插件:
在项目当中取新建一个requirements.txtt文件(房子要装修)
需要把第三方插件安装上:
安装命令: pip install -r requirements.txt
5,pytest默认的测试用例的规则
新建一个用例管理包:testcases,里面创建测试用例文件
1,所有的文件名(模块名)都要test开头或者以test结尾
2,测试类必须以Test开头,并且类里面不能有init魔法方法
3,测试用例必须要以test开头
测试用例脚本一般会定义成:类里面的实例方法,函数。
6,pytest执行2种方式
1,通过命令执行:pytest -s 2,主函数执行:新建一个run.py文件
import pytest
if name == ' main ': pytest.main()
7,pytest里面配置文件:ini
[pytest]
# 命令行参数,多个参数之间可以使用空格分开
# 详细输出信息和调试信息
addopts = -vs
# 指定测试用例的文件夹
testpaths = ./testcases
# 修改默认文件(模块)的规则
python_files = test_*.py demo_*.py
# 修改默认规则类
python_classes = Test* Dome*
# 修改默认的用例的规则
python_functions = test_* demo_*
注意:如果配置文件ini当中,使用了中文注释信息,如果运行不成功:需要修改编码格式
pytest:
8,pytest常用功能标记的使用
- 标记跳过 无条件跳过:
class DomeLogin:
@pytest.mark.skip(reason="当前版本不测试直接跳过") def demo_login_shop(self):
print("登录商城的用例开始执行")
- 有条件跳过
class TestLogin:
# 条件成立时跳过该用例。不成立则执行用例 @pytest.mark.skipif(2 > 10, reason="条件成立跳过") def test_login_shop(self):
print("登录商城的用例开始执行")
- 标记执行顺序 默认情况下:按照文件名去识别执行,从上往下,如果需要调整执行顺序:使用ordering插件进行调控
import pytest
def test_f():
print("这是第1条用例")
def test_f2():
print("这是第2条用例")
@pytest.mark.run(order=1) def test_f3():
print("这是第3条用例")
def test_f4():
print("这是第4条用例")
@pytest.mark.run(order=2) def test_f5():
print("这是第5条用例")
- 标记失败的用例 标记预期会出现异常的测试用例,只有出现异常才对(XFAIL),不出现异常反而不对(XPASS )
test.mark.xfail(reason="失败原因") def test_f2():
# print(a)
print("这是第2条用例")
- 标记参数化
对于类似过程,但是数据不一样的时候,可以使用参数化
ytest.mark.parametrize(["a", "b"], [(1, 2), (3, 4), (5, 6), (666, 888)]) def test_register(self, a, b):
print("现在开始执行注册用例...")
print(f"参数相加的结果:{a + b}")
数据驱动测试:从:excel,csv,yaml,text,等等文件中读取数据,进行参数化使用
9,pytest前后固件(夹具)
作用:在用例执行之前和用例执行之后需要固定的测试环境。夹具:pytest自带三种类型,以及自定义类型
模块夹具,类夹具,方法夹具(函数夹具)
# 方法夹具
def setup_methood(self):
print("方法用例执行之前,需要的操作:热身")
def teardown_methood(self):
print("方法用例执行之前,需要的操作:拉伸")
# 类夹具:
def setup_class(self)
pass
def teardown_class(self): pass
# 函数夹具:
def teardown_function(): print("函数执行之前:拉伸")
def setup_function(): print("函数执行之前:热身")
# 模块夹具:
def teardown_module():
print("模块执行之前:拉伸")
def setup_module():
print("模块执行之前:热身")
fixture自定义夹具
pytest: