差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

Both sides previous revision 前次修改
下次修改
前次修改
java:wiremock:record-disconnection-behavior [2021/08/07 23:48]
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,使工作的執行無法順利完成。本篇文章主要分享我的解決方法。(程式碼: [[https://​github.com/​frank007love/​wiremock-redfish|link]])+這導致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);​