如何在 Pytest 中调用其他用例返回的接口参数?

回答重点

在 Pytest 中,我们可以通过使用共享夹具(fixtures)来调用和复用其他用例返回的接口参数。在 Pytest 中,fixtures 提供了一种灵活且有组织的方式来共享测试数据或对象。

具体步骤如下:

1)首先,在 conftest.py 文件中定义一个 fixture 函数,该函数会返回你希望共享的参数。这个 fixture 可以通过标识符传递给任何测试函数。

2)在需要复用该参数的测试函数中,通过传递相应的参数名来引用该 fixture。

下面是一个示例代码,可以帮助你理解:

复制代码
# conftest.py
import pytest

@pytest.fixture
def api_response():
    # 假设这是你从接口获取的参数
    response = {
        "token": "abc123",
        "user_id": 1
    }
    return response

# test_example.py
def test_first_example(api_response):
    assert api_response["token"] == "abc123"
    
def test_second_example(api_response):
    assert api_response["user_id"] == 1
    # 你可以继续使用 `api_response` 进行其他测试或接口调用

在上述示例中, api_response 是一个 fixture,它返回一个包含 tokenuser_id 的字典。任何需要这些数据的测试函数,只需声明它们的参数即可自动获取此数据,从而实现复用。

扩展知识

1) Fixture 的 作用域

Fixture 可以设置不同的作用域级别(如 function, class, module, session),这决定了 fixture 的生命周期。作用域越大,fixture 的创建和销毁次数越少。

复制代码
@pytest.fixture(scope="module")
def api_response():
    # 模块级别的 fixture,在整个模块中共享
    ...

2) Fixture 的依赖

Fixture 之间也可以相互调用,从而构建更加复杂的数据依赖。

复制代码
@pytest.fixture
def auth_token():
    return "secret-token"

@pytest.fixture
def api_response(auth_token):
    return {
        "token": auth_token,
        "user_id": 1
    }

3) 动态生成数据

有时我们需要为每个测试生成不同的数据,可以用 yield 关键字或者动态计算的方法来实现。

复制代码
@pytest.fixture
def dynamic_response():
    token = generate_token()
    return {
        "token": token,
        "user_id": random_user_id()
    }
相关推荐
ERP老兵_冷溪虎山4 小时前
从ASCII到Unicode:"国际正则"|"表达式"跨国界实战指南(附四大语言支持对比+中医HIS类比映射表)
后端·面试
律品4 小时前
pytest的前置与后置
开发语言·python·pytest
一块plus5 小时前
创造 Solidity、提出 Web3 的他回来了!Gavin Wood 这次将带领波卡走向何处?
javascript·后端·面试
Aphasia3115 小时前
性能优化之重绘和重排
前端·面试
掘金安东尼6 小时前
代理式AI,从被动响应到主动执行的技术演进
面试
帧栈7 小时前
Jenkins+GitLab在CentOS7上的自动化部署方案
自动化·gitlab·jenkins
Java技术小馆9 小时前
InheritableThreadLoca90%开发者踩过的坑
后端·面试·github
诗和远方149395623273410 小时前
iOS 异常捕获原理详解
面试
希尔伯特旅馆10 小时前
市值残差Alpha策略
面试
IT成长日记10 小时前
【自动化运维神器Ansible】Playbook调用Role详解:从入门到精通
运维·自动化·ansible·playbook·role