是否可以使用 Java Stream api 重写具有 Rest-Assured 请求尝试的 WHILE 循环
Is it possible to rewrite WHILE loop with Rest-Assured requests attempts using Java Stream api
我有一个通过 Rest-assured 发送请求的方法,如果响应不满足条件(响应状态代码为 200),它会进行多次尝试,除非我得到 200 作为响应状态代码
protected Response getResponseWithRetries(Map<String, Object> requestBody, String token, String url) {
Response response = null;
int statusCode = HttpStatus.SC_BAD_GATEWAY;
int count = 0;
while (statusCode != HttpStatus.SC_OK && count < 3) {
response = getResponse(requestBody, token, url);
statusCode = response.getStatusCode();
count++;
sleep(5000);
}
return response;
}
但是可以用 Stream api 重写这个循环吗?如果我可以将它应用到我的案例中,我正在努力理解。首先,我没有要流式传输的响应集合。但我也不想提出几个构建它的请求(例如,当它们都成功时)
您可以使用 IntStream.range
替换条件的 count
部分,然后过滤 http 状态代码的响应和 return 第一次出现 findFirst
.
Optional<Response> response = IntStream.range(0, 3)
.mapToObj(i -> getResponse(requestBody, token, url))
.filter(r -> r.getStatusCode() == HttpStatus.SC_OK)
.findFirst();
return response.orElse(null);
如果您可能 return null
而不是响应,则将 return 类型更改为 Optional<Response>
.
是有意义的
如果你想得到最后的响应,即使它失败了,你可以做 2 次迭代,然后使用 Optional.orElseGet
做最后的 getResponse
调用,如果没有积极的状态代码是 return 在 2 次迭代中编辑。
Optional<Response> response = IntStream.range(0, 2)
.mapToObj(i -> getResponse(requestBody, token, url))
.filter(r -> r.getStatusCode() == HttpStatus.SC_OK)
.findFirst();
return response.orElseGet(() -> getResponse(requestBody, token, url));
我有一个通过 Rest-assured 发送请求的方法,如果响应不满足条件(响应状态代码为 200),它会进行多次尝试,除非我得到 200 作为响应状态代码
protected Response getResponseWithRetries(Map<String, Object> requestBody, String token, String url) {
Response response = null;
int statusCode = HttpStatus.SC_BAD_GATEWAY;
int count = 0;
while (statusCode != HttpStatus.SC_OK && count < 3) {
response = getResponse(requestBody, token, url);
statusCode = response.getStatusCode();
count++;
sleep(5000);
}
return response;
}
但是可以用 Stream api 重写这个循环吗?如果我可以将它应用到我的案例中,我正在努力理解。首先,我没有要流式传输的响应集合。但我也不想提出几个构建它的请求(例如,当它们都成功时)
您可以使用 IntStream.range
替换条件的 count
部分,然后过滤 http 状态代码的响应和 return 第一次出现 findFirst
.
Optional<Response> response = IntStream.range(0, 3)
.mapToObj(i -> getResponse(requestBody, token, url))
.filter(r -> r.getStatusCode() == HttpStatus.SC_OK)
.findFirst();
return response.orElse(null);
如果您可能 return null
而不是响应,则将 return 类型更改为 Optional<Response>
.
如果你想得到最后的响应,即使它失败了,你可以做 2 次迭代,然后使用 Optional.orElseGet
做最后的 getResponse
调用,如果没有积极的状态代码是 return 在 2 次迭代中编辑。
Optional<Response> response = IntStream.range(0, 2)
.mapToObj(i -> getResponse(requestBody, token, url))
.filter(r -> r.getStatusCode() == HttpStatus.SC_OK)
.findFirst();
return response.orElseGet(() -> getResponse(requestBody, token, url));