差異處
這裏顯示兩個版本的差異處。
Both sides previous revision 前次修改 下次修改 | 前次修改 | ||
java:wiremock:record-disconnection-behavior [2021/08/09 12:26] tony [方法1] |
java:wiremock:record-disconnection-behavior [2023/06/25 09:48] (目前版本) |
||
---|---|---|---|
行 14: | 行 14: | ||
{{:java:wiremock:wm_test_connection_reset_and_get_500_error_code.png|}}\\ | {{:java:wiremock:wm_test_connection_reset_and_get_500_error_code.png|}}\\ | ||
\\ | \\ | ||
- | 這導致SUT接到非預期的500 status code,使工作的執行無法順利完成。本篇文章主要分享我的解決方法。 | + | 這導致SUT接到非預期的500 status code,使工作的執行無法順利完成。本篇文章主要分享我的解決方法。(code: [[https://github.com/frank007love/wiremock-redfish|link]]) |
===== How to? ===== | ===== How to? ===== | ||
(對嘗試過程沒興趣可以直接看方法2) | (對嘗試過程沒興趣可以直接看方法2) | ||
===== 方法1 ===== | ===== 方法1 ===== | ||
- | 我的第一個方法,是直接找到造成500問題的地方([[https://github.com/tomakehurst/wiremock/blob/1e7c07e9ff845b3253c8177159775ddd070c22a4/src/main/java/com/github/tomakehurst/wiremock/http/ProxyResponseRenderer.java|link]] ProxyResponseRenderer),修改WireMock程式碼直接retry。可會讓工作能夠繼續執行並完成。最後我透過修改錄製出來的腳本,加上長時間的response delay強迫client timeout去模擬類似情境: | + | 我的第一個方法,是直接找到造成500問題的地方([[https://github.com/tomakehurst/wiremock/blob/1e7c07e9ff845b3253c8177159775ddd070c22a4/src/main/java/com/github/tomakehurst/wiremock/http/ProxyResponseRenderer.java|link]] ProxyResponseRenderer),修改WireMock程式碼直接retry。這會讓工作能夠繼續執行並完成。最後我透過修改錄製出來的腳本,加上長時間的response delay強迫client timeout去模擬類似情境: |
<code json> | <code json> | ||
"response": { | "response": { | ||
行 47: | 行 47: | ||
@Override | @Override | ||
public Response transform(Request request, Response response, FileSource files, Parameters parameters) { | public Response transform(Request request, Response response, FileSource files, Parameters parameters) { | ||
- | if(response.getStatus()==500&&response.getBodyAsString().contains("timed out")) { | + | if(response.getStatus()==500&&response.getBodyAsString().contains("Network failure")) { |
return Response.Builder.like(response) | return Response.Builder.like(response) | ||
.body(String.valueOf(Fault.CONNECTION_RESET_BY_PEER)) | .body(String.valueOf(Fault.CONNECTION_RESET_BY_PEER)) | ||
行 78: | 行 78: | ||
private Fault getFault(ResponseDefinition responseDef) { | private Fault getFault(ResponseDefinition responseDef) { | ||
- | String body = Objects.toString(responseDef.getBody(), ""); | + | String body = Objects.toString(new String(responseDef.getByteBody()), ""); |
try { | try { | ||
return Fault.valueOf(body); | return Fault.valueOf(body); |