【问题标题】:how to validate Json Response value in Rest Assured如何在 Rest Assured 中验证 Json 响应值
【发布时间】:2021-03-06 21:11:04
【问题描述】:

您好,我正在从 REST 请求中的 get 请求中获取 Json 响应正文。

{
  "outputData": {
    "data": {
      "leaveList": [
        {
          "leaveTypeID": 1,
          "leaveBalance": 2
        },
        {
          "leaveTypeID": 2,
          "leaveBalance": 9
        }
      ]
    }
  }
}

我想得到leaveBalanceleaveType 2leaveTypeID 的索引不断变化。

谢谢

【问题讨论】:

    标签: java api rest-assured json-api-response-converter


    【解决方案1】:

    您可以通过迭代 leaveListJsonArray 来实现。

        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

    【讨论】:

      【解决方案2】:

      您可以使用jackson-databind 库将 json 字符串转换为对象。我使用 maven 包管理器添加到我的项目中。

      我建议使用以下解决方案来为您的项目提供良好的结构。在我的解决方案中,我使用类来保留 json 值。您可以使用Json To Pojo 从 json 字符串生成对象。

      输出: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;
          }
      }
      

      【讨论】:

        【解决方案3】:

        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 的休假余额,该对象的索引可以在任何可行的地方。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多