fixture返回值(实现参数化)
阅读目录:
1. 特点
2. 示例: fixture返回值
3. 示例: ficture返回params中的值
4. 示例: 使用yield返回值
5. 笛卡尔积
特点
-
fixture 可以通过设计params, 让依赖该fixture的用例迭代执行 -
params数据可以为【列表】、(元组)、{集合}、{字典} -
params数据在fixture中通过request变量来接收
示例 fixture返回值
import pytest
@pytest.fixture()
def setup_teardown():
return '这是一个返回值'
def test_case1(setup_teardown):
assert '返回值' in setup_teardown
print(" ------------- 判断正确 ---------- ")
print("setup teardown: {}".format(setup_teardown))
class TestClass1:
def test_case2(self, setup_teardown):
print(" ------------- 这是测试类 --------------")
print("setup teardown返回的值是: {}".format(setup_teardown))
结果:
注意: 若fixture有返回值,用@pytest.mark.usefixtures()
报错,无法获取到返回值

示例: fixture返回params中的值
## fixture 返回params中的值
@pytest.fixture(params=['M_Haynes','全栈测试','自动化测试','性能测试'])
def setup_teardown(request):
return request.param # 一次返回params中的值
class TestClass2:
def test_case3(self, setup_teardown):
print('----------------- test case3 :{}--------------'.format(setup_teardown))
结果:

示例: 可以用yield返回值
@pytest.fixture(params=['M_Haynes','全栈测试','自动化测试','性能测试'])
def setup_teardown2(request):
print("----------------- 前置 --------------")
yield request.param
print("-------------------- 后置 --------------")
def test_case4(setup_teardown2):
print("----------------- test case4 :{}".format(setup_teardown2))
结果:
示例: 可以结合 fixture 的返回值和参数化来进行更复杂的测试
## 可以结合 fixture 的返回值和参数化来进行更复杂的测试
import pytest
# 定义一个复杂的参数化 fixture
@pytest.fixture(params=[{"key": "value1"}, {"key": "value2"}, {"key": "value3"}])
def complex_data(request):
return request.param
# 使用复杂参数化 fixture 的测试函数
def test_complex_data(complex_data):
assert complex_data["key"] in ["value1", "value2", "value3"]
print(" ------------- 判断成功 ----------------------")
结果:

高级用法:fixture 的依赖关系
fixture 之间也可以有依赖关系。一个 fixture 可以依赖另一个 fixture,从而形成复杂的依赖图。例如:
import pytest
# 定义一个基础 fixture
@pytest.fixture
def base_data():
return {"base_key": "base_value"}
# 定义一个依赖基础 fixture 的参数化 fixture
@pytest.fixture(params=[1,2,3])
def dependent_data(base_data, request):
print("此时的base_data", base_data)
base_data["param"] = request.param
return base_data
# 使用依赖 fixture 的测试函数
def test_dependent_data(dependent_data):
assert dependent_data["base_key"] == "base_value"
print("dependent_data", dependent_data)
assert dependent_data["param"] in [1,2,3]
结果: 在这个例子中,dependent_data
fixture 依赖于base_data
fixture, 并且被参数化为多个值,测试函数test_dependent_data
会运行多次,分别使用不同的参数值,同时保留了base_data
中的基础数据
笛卡尔积
应用场景:需要传多个参数的不同组合,比如注册接口
### 笛卡尔积 --- 应用场景: 需要传多个参数的不同组合,比如注册接口
import pytest
data = ['zcs','全栈测试','性能测试','自动化测试']
data2 = [1,2,3]
@pytest.fixture(params=data)
def denglu_name(request): # 必须是request这个参数名
return request.param # 依次取列表中的每一个返回值
@pytest.fixture(params=data2)
def denglu_mima(request):
return request.param
def test_denglu_mima(denglu_name, denglu_mima):
print(f" ---------------登录密码组合: data={denglu_name},{denglu_mima}")
结果:
更多交流和持续更新 请扫码 + VX
本文由 mdnice 多平台发布