如何在ReadyAPI中从JSON响应提取多值生成列表填充请求体?
在ReadyAPI中生成列表的两种方案
一、从数据源获取所有值生成列表
可行,但默认数据源是逐行迭代执行请求,要收集所有值生成列表需通过脚本实现,步骤如下:
- 在测试用例中添加数据源(如Excel、CSV),配置好对应数据列
- 在数据源之前添加Groovy脚本测试步骤,初始化全局列表变量:
// 初始化全局列表,用于存储所有数据源值 context.testCase.setPropertyValue("ALL_DATA_VALUES", new ArrayList().toString())
- 在数据源之后、目标请求之前,添加另一个Groovy脚本,将当前行的值追加到全局列表:
// 获取当前数据源行的目标值(假设列名为"bookId") def currentValue = context.expand('${DataSource#bookId}') // 解析全局列表并转为集合 def allValues = new groovy.json.JsonSlurper().parseText(context.testCase.getPropertyValue("ALL_DATA_VALUES")) // 添加当前值并转换为整数类型 allValues.add(currentValue as Integer) // 更新全局列表的JSON字符串 context.testCase.setPropertyValue("ALL_DATA_VALUES", new groovy.json.JsonBuilder(allValues).toString())
- 在目标请求的请求体中,直接引用全局列表变量:
{"booksId":${#TestCase#ALL_DATA_VALUES},"reference":"test"}
- 调整执行逻辑:设置数据源循环遍历所有行,待所有值收集完成后,再执行目标请求(可通过测试用例的执行顺序或条件判断实现)
二、从API JSON响应提取所有书籍ID填充请求体
这是你当前场景更高效的方案,具体步骤:
1. 提取ID并存储为全局变量
在返回书籍列表的API请求后,添加Groovy脚本测试步骤,用以下代码提取所有id:
// 获取API响应内容 def response = context.expand('${BookListRequest#Response}') // 解析JSON响应 def json = new groovy.json.JsonSlurper().parseText(response) // 提取所有书籍的id并转为整数列表 def bookIds = json.store.book.collect { it.id as Integer } // 将列表转为JSON字符串,存入测试用例全局变量 context.testCase.setPropertyValue("BOOK_ID_LIST", new groovy.json.JsonBuilder(bookIds).toString())
2. 在目标请求体中引用变量
编辑目标请求的请求体,替换booksId数组为全局变量:
{"booksId":${#TestCase#BOOK_ID_LIST},"reference":"test"}
3. 验证结果
执行测试用例,查看目标请求的实际发送内容,确认booksId已填充为[1,2,3]
补充说明
你使用数据源时仅能获取最后一个值,是因为默认每次迭代都会覆盖变量值而非累加,必须通过脚本主动收集所有值才能生成完整列表。
内容的提问来源于stack exchange,提问作者amlbenmansour
相关产品推荐
相关产品推荐

