在最短时间内进行多次 API 调用和 return 组合响应
Make multiple API calls and return combined response in minimum time
我有 10 个健康检查 URL,它们只是获取服务
我正在像下面这样循环打他们
for(int i=0;i<10;i++){
Response response = given().when().relaxedHttpsValidation().get(url[i]);
list.add(response);
}
return list;
现在的问题是它连续命中 API 并等待所有响应,我只想并行命中所有 API 但合并结果,我尝试使用线程但无法了解如何在多线程的情况下组合响应
如果我没看错你的问题,我相信你想进行并行调用并合并结果,在这种情况下我建议你使用 TestNG。我过去有过类似的需求,这个 link 帮助我解决了问题
这是示例代码
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
感谢您的快速回复我现在只想分享我是如何做到的
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)
我有 10 个健康检查 URL,它们只是获取服务 我正在像下面这样循环打他们
for(int i=0;i<10;i++){
Response response = given().when().relaxedHttpsValidation().get(url[i]);
list.add(response);
}
return list;
现在的问题是它连续命中 API 并等待所有响应,我只想并行命中所有 API 但合并结果,我尝试使用线程但无法了解如何在多线程的情况下组合响应
如果我没看错你的问题,我相信你想进行并行调用并合并结果,在这种情况下我建议你使用 TestNG。我过去有过类似的需求,这个 link 帮助我解决了问题
这是示例代码
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
感谢您的快速回复我现在只想分享我是如何做到的
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)