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

Cucumber BDD Selenium自动化:如何跨场景复用首个场景返回的Card ID

跨测试场景传递Card ID变量的实现方案

Postman 实现方式

  • 全局变量存储:第一个场景请求完成后,在Tests标签中编写代码提取Card ID并存储为全局变量:
    // 假设响应为JSON格式,Card ID位于response.body.data.cardId路径
    const cardId = pm.response.json().data.cardId;
    pm.globals.set("cardId", cardId);
    
  • 第二个场景调用:在请求的URL、参数、请求体或Headers中直接引用{{cardId}}即可,例如:
    https://api.example.com/cards/{{cardId}}
    

Java 测试框架(TestNG/JUnit)实现方式

  • 类成员变量传递:若两个测试方法在同一测试类中,定义类级别成员变量存储Card ID:
    public class CardTest {
        private String cardId;
    
        @Test(priority = 1)
        public void createCardTest() {
            // 执行创建卡片请求,获取响应
            String response = HttpRequest.sendPost("/api/cards");
            // 解析响应提取Card ID(示例用Jackson解析)
            ObjectMapper mapper = new ObjectMapper();
            CardResp resp = mapper.readValue(response, CardResp.class);
            cardId = resp.getCardId();
        }
    
        @Test(priority = 2, dependsOnMethods = {"createCardTest"})
        public void queryCardTest() {
            // 使用cardId执行查询请求
            String response = HttpRequest.sendGet("/api/cards/" + cardId);
            // 后续断言或操作
        }
    }
    
  • TestNG上下文传递:通过ITestContext存储和读取变量,适合跨类场景:
    @Test(priority = 1)
    public void createCard(ITestContext context) {
        String cardId = extractCardIdFromResponse();
        context.setAttribute("cardId", cardId);
    }
    
    @Test(priority = 2)
    public void queryCard(ITestContext context) {
        String cardId = (String) context.getAttribute("cardId");
        // 执行查询逻辑
    }
    

Python pytest 实现方式

  • Fixture共享变量:使用pytest的fixture定义共享变量,设置合适的作用域:
    import pytest
    import requests
    
    @pytest.fixture(scope="class")
    def card_id():
        # 执行第一个场景,获取Card ID
        resp = requests.post("https://api.example.com/cards")
        card_id = resp.json()["data"]["cardId"]
        yield card_id
    
    class TestCard:
        def test_query_card(self, card_id):
            # 调用第二个场景,传入card_id
            resp = requests.get(f"https://api.example.com/cards/{card_id}")
            assert resp.status_code == 200
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:45:42