背景
在測試過程中,被測系統經常會依賴其它模塊、下游接口或外部接口。由於依賴系統的穩定性和可用性對於整個項目的進度至關重要,任何依賴系統出現問題都可能導致嚴重的延誤和成本增加。此外,由於測試環境的限制,有些測試場景可能無法完全覆蓋,這可能會導致在生產環境中出現意外問題。因此,為了保障項目的順利進行和提升測試的效率,需要尋求能夠解決上述問題的方案。
問題
- 測試A模塊時,由於依賴的B模塊因為環境不穩定,導致A模塊的測試無法按計劃正常進度執行,產生延期
- 測試內部系統功能的時候,由於依賴的外部系統因為網絡等原因,導致內部系統的測試延期
- 由於測試環境的局限性,可能有些測試場景無法全部覆蓋,可能需要真實的生產環境才有這種場景,但這勢必就會增加發生產生事故的風險
方案確定
經過多種方案的調研與比較,最後確定使用底層基於Wiremock組件,來搭建信也的Mock平台。
WireMock是一種輕量級的HTTP模擬伺服器,它可以模擬HTTP服務的行為並返回自定義響應。WireMock提供了一個REST API,使您可以輕鬆配置模擬伺服器,並且可以與Java應用程式或其他測試框架集成。WireMock可以在測試中模擬各種HTTP場景,例如模擬緩慢響應、超時響應、網絡中斷、HTTP錯誤碼等。
架構與原理
系統架構圖
系統架構圖中,Mock服務分為兩部分,規則匹配和配置管理功能,規則匹配專門負責監聽接收請求過來的API,然後將響應數據返回給上游,有獨立的負載均衡;而配置管理功能負責前台頁面對Mock的管理操作,也有自己的負載均衡,兩者負載均衡獨立,互不影響。
- Mock配置管理:用戶可以設置http匹配的規則,支持匹配http的Method、url、請求頭、請求參數全匹配、請求參數單屬性等,並且可以設置命中之後的返回體、模擬狀態碼、模擬超時等。當請求未命中時,還可以自定義設置請求轉發的地址,Mock配置規則在多環境之間彼此獨立,互不影響。
- 規則匹配:服務啟動後,監聽從特定埠的請求,獲取請求之後,將請求丟給規則匹配模塊處理,處理完成之後,將返回體返回給上游api。
實現原理:啟動Mock服務的時候,會初始化一個WireMock,首先會配置Stub,然後啟動WireMock並將配置的Stub加載到WireMock,隨後就監聽特定埠的http請求,這些請求會被WireMock捕獲,交給後續的匹配邏輯來處理,最後返回設置的mock數據。
@Bean
public WireMockServer wireMockServer() {
return initWireMockServer();
}
public WireMockServer initWireMockServer() {
WireMockServer wireMockServer = new WireMockServer(WireMockConfiguration.options().maxrequestJournalEntries(Integer.valueOf(wireMockMaxEntry))
.port(Integer.valueOf(wireMockPort))
.extensions(returnTransFormer));
wireMockServer.stubFor(any(anyUrl()).atPriority(0).willReturn(aResponse()
.withTransformer("return-transformer", "mock", "mock678")));
List<MockRuleTemplate> templates = mockRuleTemplateMapper.selectList();
for (MockRuleTemplate t : templates) {
MockInterfaceConstanse.TEMPLATE_MAP.put(t.getId(), t.getTemplate());
}
wireMockServer.start();
return wireMockServer;
}
Mock一個接口主要分為如下兩步:
1)頁面上配置站點的Mock策略,設置需要返回的mock數據;
2)發送請求到mock服務上,服務獲取請求的request數據,根據匹配規則,返回設置的mock數據;如果沒有匹配到規則,則將請求轉發透傳到設置的目標伺服器,獲取目標伺服器的返回結果,最終返回給上游的請求。▼
實踐
- Mock策略管理頁面,見下面所示:
- 每條策略配置詳情,包括設置常規http欄位,還包括設置環境、正則、匹配規則和返回體,見下圖所示:
- 日誌記錄,可以查看命中或者轉發的請求記錄,見下圖所示:
總結
API Mock管理平台能夠提高測試和研發工作的效率,使得一些難以覆蓋的測試場景得以全面覆蓋,從而保障產品的質量。不過,該API Mock還存在一些不足,例如暫時不支持HTTPS的mock,否則需要手動將HTTPS改為HTTP才可以實現Mock,但未來將會持續進行優化和改進。
作者介紹
rpf,信也科技資深測試開發專家
來源:微信公眾號:拍碼場
出處:https://mp.weixin.qq.com/s/6zxOtWH4eY9NI06Dv8WZHQ