在最短的时间内进行多个API调用并返回组合响应。

问题描述 投票:0回答:1

我有10个健康检查URL,它们只是简单的获取服务,我在循环中打它们,就像下面这样。

for(int i=0;i<10;i++){
  Response response = given().when().relaxedHttpsValidation().get(url[i]);
   list.add(response);
  }
   return list;

现在的问题是,它串联了所有的API,并等待所有API的响应,我只是想并行地打所有的API,但合并结果,我尝试使用线程,但无法得到一个想法,如何在多线程的情况下合并响应。

java multithreading rest-assured
1个回答
2
投票

如果我没有看错的话,我相信你是想进行并行调用并结合结果,在这种情况下,我建议你使用TestNG。我过去也有过类似的需求,而这个 联系 帮我

下面是一个示例代码

public class Parallel {

    @DataProvider(parallel = true)
    public Object[] getURL() {
        return new Object[] { "https://reqres.in/api/users/1", "https://reqres.in/api/users/2",
                "https://reqres.in/api/users/3", "https://reqres.in/api/users/4", "https://reqres.in/api/users/5",
                "https://reqres.in/api/users/6" };
    }

    ArrayList<String> original = new ArrayList<String>();

    @Test(dataProvider = "getURL")
    public void stack(String url) {

        Response response = given().when().get(url);

        JsonPath js = response.jsonPath();

        String email = js.getString("data.email");

        original.add(js.getString("data.email"));
    }

    @AfterTest
    public void simple() {
        System.out.println("List : " + original);
    }

}

移除 (parallel = true) 来看看它是如何依次工作的。我已经用JSONPath从响应中提取了电子邮件字段,并添加到列表中。

不要忘记更新POM


1
投票

谢谢你的快速反应,我只是想分享现在我是如何实现的。

List responseList = new ArrayList();
ExecutorService exec = Executors.newFixedThreadPool(10);
for (int i = 0; i < 10; i++) {
exec.submit(new Runnable() {
    public void run() {
        String response = executeServiceCall(urlArray[i]);
        responseList.add(response);
     }
   });
} exec.shutdown();
 try {
exec.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);
 } catch (InterruptedException e) {
  LOGGER.error(e.toString());
}
 LOGGER.info("response list is " + responseList)
© www.soinside.com 2019 - 2024. All rights reserved.