pytest_框架(9)_fixture返回值(实现参数化)

fixture返回值(实现参数化)

阅读目录:
 1. 特点
 2. 示例: fixture返回值
 3. 示例: ficture返回params中的值
 4. 示例: 使用yield返回值
 5. 笛卡尔积

特点

  1. fixture 可以通过设计params, 让依赖该fixture的用例迭代执行
  2. params数据可以为【列表】、(元组)、{集合}、{字典}
  3. 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))

结果:
image

注意: 若fixture有返回值,用@pytest.mark.usefixtures()报错,无法获取到返回值

image
image

示例: 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))

结果:

image
image

示例: 可以用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))

结果: image

示例: 可以结合 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(" ------------- 判断成功 ----------------------")

结果:

image
image

高级用法: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中的基础数据 image

笛卡尔积

应用场景:需要传多个参数的不同组合,比如注册接口

### 笛卡尔积 --- 应用场景: 需要传多个参数的不同组合,比如注册接口
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}")

结果: image

更多交流和持续更新 请扫码 + VX image

本文由 mdnice 多平台发布

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周承森

敲键盘不易~ 给点鼓励~ 感恩

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值