![](/img/trans.png)
[英]How to validate a response and extract a value from Response body in Rest Assured?
[英]how to validate Json Response value in Rest Assured
嗨,我正在从 REST 请求中的获取请求中获取 Json 响应正文。
{
"outputData": {
"data": {
"leaveList": [
{
"leaveTypeID": 1,
"leaveBalance": 2
},
{
"leaveTypeID": 2,
"leaveBalance": 9
}
]
}
}
}
我想获得leaveBalance
leaveType 2
的 leaveBalance。 leaveTypeID
的索引不断变化。
谢谢
您可以通过遍历leaveList
JsonArray 来实现。
Response response = given()
.when()
.get("URL")
.then()
.extract()
.response();
int leaveTypeId = 2; // You can change this get the required leaveBalance
int leaveBalance = 0;
JSONObject responseObject = new org.json.JSONObject(response.body().asString());
JSONObject object1 = responseObject.getJSONObject("outputData");
JSONObject dataObject = object1.getJSONObject("data");
JSONArray jsonArray = dataObject.getJSONArray("leaveList");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
if (jsonObject.get("leaveTypeID").equals(leaveTypeId)) {
leaveBalance = Integer.parseInt(jsonObject.get("leaveBalance").toString());
}
}
System.out.println("leaveBalance = " + leaveBalance);
这将打印;
leaveBalance = 9
您可以将值动态分配给leaveTypeId
并获得所需的leaveBalance
。
您可以使用jackson-databind库将 json 字符串转换为 object。 我使用 maven package 管理器添加到我的项目中。
我建议以下解决方案为您的项目提供良好的结构。 在我的解决方案中,我使用类来保留 json 值。 您可以使用Json To Pojo从 json 字符串生成对象。
output: 9
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
public class RestAssuredDemo {
public static void main(String[] args) {
String json = """
{
"outputData": {
"data": {
"leaveList": [
{
"leaveTypeID": 1,
"leaveBalance": 2
},
{
"leaveTypeID": 2,
"leaveBalance": 9
}
]
}
}
}
""";
ObjectMapper om = new ObjectMapper();
Root root = null;
try {
root = om.readValue(json, new TypeReference<Root>() {});
for (LeaveList leave: root.outputData.data.leaveList) {
if(leave.leaveTypeID == 2) {
System.out.println(leave.leaveBalance);
}
}
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
public static class LeaveList{
public int leaveTypeID;
public int leaveBalance;
}
public static class Data{
public List<LeaveList> leaveList;
}
public static class OutputData{
public Data data;
}
public static class Root{
public OutputData outputData;
}
}
GroovyPath = "outputData.data.leaveList.find{it.leaveTypeID==2}.leaveBalance"
String leaveBalance = response.extract().jsonPath().getString("outputData.data.leaveList.find{it.leaveTypeID==2}.leaveBalance");
它将为您提供 leaveTypeID 为 2 索引的休假余额 object 可以在任何可以工作的地方。
这是一篇非常好的文章,介绍了如何使用 jsonPath 验证 json 响应。 但是,还有其他方法可以验证响应,例如使用 POJO class。 这也在同一个博客中进行了解释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.