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
相关产品推荐
相关产品推荐

