如何在Rest Assured中动态传递复杂请求查询参数?
处理Rest Assured中复杂查询参数的动态传递
针对你需要动态传递查询参数而非硬编码的需求,这里提供几种实用的处理方式:
1. 用Map批量传递参数
把所有查询参数存入Map,一次性传给Rest Assured,方便快速修改参数值适配不同测试用例:
// 构建测试参数Map,可从外部文件/测试数据池读取 Map<String, Object> queryParams = new HashMap<>(); queryParams.put("from", "2022-11-29"); queryParams.put("to", "2022-11-30"); queryParams.put("monthEnd", true); // 测试用例1:monthEnd为true // 发送请求 Response res = httpRequest.queryParams(queryParams) .get("/master-data/v1/calendars/GBL"); // 切换测试用例,仅修改需要变更的参数 queryParams.put("monthEnd", false); Response res2 = httpRequest.queryParams(queryParams) .get("/master-data/v1/calendars/GBL");
2. 链式调用多个queryParam
如果参数数量不多,也可以逐个设置参数,动态替换变量值即可:
// 定义动态参数变量 String fromDate = "2022-11-29"; String toDate = "2022-11-30"; boolean isMonthEnd = true; // 测试用例1 Response res1 = httpRequest.queryParam("from", fromDate) .queryParam("to", toDate) .queryParam("monthEnd", isMonthEnd) .get("/master-data/v1/calendars/GBL"); // 测试用例2,仅修改monthEnd值 isMonthEnd = false; Response res2 = httpRequest.queryParam("from", fromDate) .queryParam("to", toDate) .queryParam("monthEnd", isMonthEnd) .get("/master-data/v1/calendars/GBL");
3. 测试数据驱动批量执行
如果有多组参数需要验证,把每组参数封装成集合,循环执行请求,彻底摆脱硬编码:
// 定义多组测试用例 List<Map<String, Object>> testCases = new ArrayList<>(); Map<String, Object> case1 = new HashMap<>(); case1.put("from", "2022-11-29"); case1.put("to", "2022-11-30"); case1.put("monthEnd", true); Map<String, Object> case2 = new HashMap<>(); case2.put("from", "2022-11-29"); case2.put("to", "2022-11-30"); case2.put("monthEnd", false); testCases.add(case1); testCases.add(case2); // 循环执行所有测试用例 for (Map<String, Object> params : testCases) { Response res = httpRequest.queryParams(params) .get("/master-data/v1/calendars/GBL"); // 这里可添加断言逻辑,比如验证响应状态码 res.then().statusCode(200); }
4. 从外部配置文件读取参数
如果参数需要频繁调整,可把参数存入properties/JSON/YAML文件,用工具类加载后使用:
比如创建test_params.properties文件:
from=2022-11-29 to=2022-11-30 monthEnd_case1=true monthEnd_case2=false
读取并使用参数:
Properties props = new Properties(); props.load(new FileInputStream("test_params.properties")); // 测试用例1 Response res1 = httpRequest.queryParam("from", props.getProperty("from")) .queryParam("to", props.getProperty("to")) .queryParam("monthEnd", Boolean.parseBoolean(props.getProperty("monthEnd_case1"))) .get("/master-data/v1/calendars/GBL"); // 测试用例2 Response res2 = httpRequest.queryParam("from", props.getProperty("from")) .queryParam("to", props.getProperty("to")) .queryParam("monthEnd", Boolean.parseBoolean(props.getProperty("monthEnd_case2"))) .get("/master-data/v1/calendars/GBL");
内容的提问来源于stack exchange,提问作者Pratik
相关产品推荐
相关产品推荐

