有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在rest-Assured中准备动态请求

我是新来的,请放心。目前,我正在使用rest assured进行API自动化工作。我要处理以下场景

我们有两个API(例如:API1,API2),API1将给出用户详细信息列表。我需要将这些详细信息作为第二个API请求的一部分发送

API1-响应

    [ {
  "userSourceMeta" : {
    "userId" : "xyz@gmail.com",
    "source" : "BOX",
    "organisationId" : 1,
    "emailId" : "xyz@gmail.com",
    "sourceUserId" : "16231222289",
    "sourceTeamId" : null
  },
  "connectionStatus" : null
}, {
  "userSourceMeta" : {
    "userId" : "xyz@gmail.com",
    "source" : "DROPBOX",
    "organisationId" : 1,
    "emailId" : "xyz@gmail.com",
    "sourceUserId" : "88888222768",
    "sourceTeamId" : null
  },
  "connectionStatus" : null
}, {
  "userSourceMeta" : {
    "userId" : "xyz@gmail.com",
    "source" : "GDRIVE",
    "organisationId" : 1,
    "emailId" : "xyz@gmail.com",
    "sourceUserId" : "8888873554753473",
    "sourceTeamId" : null
  },
  "connectionStatus" : null
}]

API2-请求::在API2请求中,我需要发送“sourceUserId”、“source”详细信息

    {
  "query": "hi",
  "timeZone": "Asia/Calcutta",
  "sourceFilterInfo": [
    {
      "sourceUserId": "16055292089",
      "source": "BOX"
    },
    {
      "sourceUserId": "88888222768",
      "source": "DROPBOX"
    },
    {
      "sourceUserId": "8888873554753473",
      "source": "GDRIVE"
    }
  ],
  "contextIds": []
}

userSourceMeta详细信息会根据用户动态更改。 请向我建议如何根据之前的API响应准备API2请求


共 (1) 个答案

  1. # 1 楼答案

    我不知道你是否喜欢POJO方法,但就个人而言,这是最简单的方法

    注:

    • 您可以将静态类提取为独立类,不需要它必须在这里
    • 我使用LombokJackson作为外部库
    public class DynamicResponse {
    
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        static class SourceMeta{
            private UserSource userSourceMeta;
        }
    
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        static class UserSource {
            private String userId;
            private String source;
        }
    
        @Data
        static class Request2 {
            private String query;
            private String timeZone;
            private List<UserSource> sourceFilterInfo;
        }
    
        @Test
        void test() {
            //Save response of request 1
            List<SourceMeta> res1 = given().get("http://localhost:8000/req1")
                    .as(new TypeRef<>() {});
    
            // Convert response 1 to list of UserSource
            List<UserSource> userSource = res1.stream()
                    .map(SourceMeta::getUserSourceMeta)
                    .collect(Collectors.toList());
    
            // Add list of UserSource to Request 2
            Request2 req2 = new Request2();
            req2.setQuery("hi");
            req2.setTimeZone("Asia/Calcutta");
            req2.setSourceFilterInfo(userSource);
    
            // Send the Request 2
            given().log().body().contentType(ContentType.JSON)
                    .body(req2)
                    .post("http://localhost:8000/echo");
        }
    }