這是本文件的舊版!
WireMock - Record Disconnection Behavior
Problem
我有一隻待測程式(SUT)會相依於外部服務(External Service),操作流程如下:
- SUT觸發一個async command。
- 接著外部服務將會重置而導致SUT無法連線。
- SUT會不停的Get去等待外部服務再次連線。
在我導入WireMock要替代外部服務並錄製腳本過程中,發現WireMock只要發生網路連線問題就會回應以下內容:
Network failure trying to make a proxied request from WireMock to https://10.146.125.169/api/v1 Connect to 10.146.125.169:443 [/10.146.125.169] failed: Connection timed out: connect
這導致SUT接到非預期的500 status code,使工作的執行無法順利完成。本篇文章主要分享我的解決方法。
How to?
(對嘗試過程沒興趣可以直接看方法2)
方法1
我的第一個方法,是直接找到造成500問題的地方(linkProxyResponseRenderer),修改WireMock程式碼直接retry。可會讓工作能夠繼續執行並完成。最後我透過修改錄製出來的腳本,加上長時間的response delay強迫client timeout去模擬類似情境:
"response": { "status": 200, "fixedDelayMilliseconds": 120000 }
方法2
後來研究了一下Exteding WireMock內容後,覺得應該有機會可以透過擴充的方式去達到我的目的,因此有了方法2。