文章目录
测试用例执行前后的一些处理动作,也叫夹具。以下介绍使用前后置操作的几种方法。
方法1 setup/teardown
setup,每个测试用例执行前要进行的处理。
teardown,每个测试用例执行结束后要进行的处理。
python3.9中新版本改为setup_method\teardown_method
import pytest
classTestMyProject:defsetup(self):print("每个测试用例执行前的初始化")deftest_001(self):print("测试用例1")deftest_002(self):print("测试用例2")defteardown(self):print("每个测试用例执行结束后的收尾")
setup_class/teardown_class
每个测试类初始化前后的操作,如创建日志对象,连接数据库等操作。
classTestMyProject:defsetup_class(self):# 如连接数据库print("测试类初始化前的操作")defsetup(self):print("每个测试用例执行前的初始化")deftest_001(self):print("测试用例1")deftest_002(self):print("测试用例2")defteardown(self):print("每个测试用例执行结束后的收尾")defteardown_class(self):# 如关闭数据库print("测试类执行后的操作")
方法2 fixture 夹具
实现全部或者部分测试用例的前后置处理。
结构及参数
:
# scope 被标记方法的作用域(函数、类、模块、包)# params 被标记方法的参数化# autouse 是否自动使用# name 别名@pytest.fixture(scope, params, autouse, ids, name)defmy_func():print("前置操作")# yield分割前后置操作yieldprint("后置操作")
autouse=False
:
非自动使用时,要将my_func传入指定的测试用例(谁需要传给谁);
自动使用且scope="function"时, 将my_func前后置操作用于所有的测试用例。
scope="class"时(autouse=True),每个测试类执行前后置操作。
scope="module"时(autouse=True),每个模块中,执行一次前后置操作。
# 定义夹具操作@pytest.fixture(scope="function", autouse=False, name="别名")defmy_func():print("前置操作")# yield分割前后置操作yieldprint("后置操作")classTestMyProject:deftest_001(self, my_func):# 仅001测试用例有前后置操作,非自动使用要传入print("测试用例1")deftest_002(self):# 没有前后置操作print("测试用例2")
params
参数使用:
可以给被fixture装饰的函数传入参数。
类型为list/tuple、字典组成的列表&元组
import pytest
import time
params =[{#每个字典为一组参数,用例执行一次"name":"jack","age":23},{"name":"lucy","age":18}]# 夹具操作# ids 设置每个参数的变量名@pytest.fixture(scope="function", params=params, ids=["dict_1","dict_2"], autouse=False, name="func_lauf")deffunc(request):# 参数必须使用request且调用param属性拿到参数值print("前置操作...")yield request.param # 抛出值后执行外部函数体;外部执行结束再执行yield后面的部分print("前置操作...")classTestWebClass:# 部分测试用例使用夹具,传入函数的返回值# 变量必须与函数别名相同(无别名则用函数名)deftest_001(self, func_lauf):# func_lauf 为夹具别名,执行时传入夹具的返回值print("test 001 成功")print("********** 夹具返回值:", func_lauf)deftest_002(self):
time.sleep(3)assert1==1
方法3 conftest.py
- conftest.py需要结合fixture一起使用,将fixture装饰的函数放入该模块,实现全局的使用;
- conftest.py放入测试用例的同级目录;
- 当前包的子包可以使用当前包的conftest.py;
- 测试用例优先查找本包的conftest.py;
- 测试用例使用时,直接传入夹具即可,不需要导入;
版权归原作者 laufing 所有, 如有侵权,请联系我们删除。