You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pytest中存储测试用例响应并在其他用例中复用

解决Pytest测试用例间共享component_id的问题

方案一:利用现有test_inputs对象存储(贴合现有代码结构)

你的项目中已经定义了Inputs类并通过test_inputs fixture注入,直接复用这个对象存储component_id是最直接的方案:

步骤1:修改test_component_approval_request存储component_id

更新test.component_approval.py中的第一个测试用例,将接口返回的component_id赋值给test_inputs的属性:

import pytest
from . import custom_assertions

GROUP = 'component_approval'

def test_component_approval_request(api, test_inputs):
    code, res = api.component_approval.test_component_approval_request(test_inputs.parameters)
    print("Response:", res)
    assert code == 200
    assert isinstance(res, dict)
    print(res)
    assert res["status"] == '1'
    # 将获取到的component_id存入test_inputs对象
    test_inputs.component_id = res["data"][0]
    print(f"Component ID set to: {test_inputs.component_id}")

步骤2:修改test_approve_request使用存储的component_id

同样在test.component_approval.py中,修改第二个测试用例,直接从test_inputs中读取component_id,同时修正参数拼写错误(paramaetes改为parameters):

def test_approve_request(api, test_inputs):
    # 先校验component_id是否已被正确设置
    assert test_inputs.component_id != "", "component_id未初始化,请确保test_component_approval_request已执行"
    # 使用test_inputs中存储的component_id作为参数
    code, res = api.component_approval.approve_request(test_inputs.parameters, test_inputs.component_id)
    assert code == 200
    assert isinstance(res, dict)
    print(res)
    assert res["status"] == '1'

注意事项

  • Pytest默认按函数名字母顺序执行测试用例,test_component_approval_request会在test_approve_request之前执行,确保component_id已被存储。
  • 如果需要强制指定执行顺序,可以使用pytest-ordering插件,给测试用例添加装饰器:
    @pytest.mark.order(1)
    def test_component_approval_request(api, test_inputs):
        # ... 代码 ...
    
    @pytest.mark.order(2)
    def test_approve_request(api, test_inputs):
        # ... 代码 ...
    

方案二:使用Pytest Fixture(更符合Pytest最佳实践)

如果希望解耦测试用例间的依赖,可以创建一个模块级别的fixture来获取并返回component_id,供后续测试用例使用:

步骤1:在conftest.py中添加fixture

import os
import pytest
import random
import string
import json
import fossidsdk

class Inputs:
    # 保留原有参数定义
    component_id = ""

@pytest.fixture(scope="module")
def component_id(api, test_inputs):
    # 在fixture中执行接口请求并获取component_id
    code, res = api.component_approval.test_component_approval_request(test_inputs.parameters)
    assert code == 200
    assert res["status"] == '1'
    return res["data"][0]

步骤2:修改测试用例使用fixture

def test_component_approval_request(component_id):
    # 验证component_id的有效性
    assert isinstance(component_id, int)
    print(f"Component ID obtained: {component_id}")

def test_approve_request(api, test_inputs, component_id):
    code, res = api.component_approval.approve_request(test_inputs.parameters, component_id)
    assert code == 200
    assert isinstance(res, dict)
    print(res)
    assert res["status"] == '1'

这种方式下,component_id fixture只会执行一次,所有依赖它的测试用例都能复用这个值,同时保持测试用例的独立性。


内容的提问来源于stack exchange,提问作者Abilash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 21:55:02