繁体   English   中英

如何验证 Json 中的响应值 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM