首页 > 解决方案 > 如何在休息时准备动态请求 Assured

问题描述

我是新来的放心。目前,我正在使用放心的 API 自动化。我有以下情况要处理

我们有两个 API(例如:API1、API2),API1 会给出 userdetails 的列表。我需要将这些详细信息作为第二个 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 请求。

标签: javarest-assuredrest-assured-jsonpath

解决方案


我不知道您是否熟悉 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");
    }
}

推荐阅读