信也API Mock平台實踐

閃念基因 發佈 2024-04-29T19:40:16.790293+00:00

背景在測試過程中,被測系統經常會依賴其它模塊、下游接口或外部接口。由於依賴系統的穩定性和可用性對於整個項目的進度至關重要,任何依賴系統出現問題都可能導致嚴重的延誤和成本增加。此外,由於測試環境的限制,有些測試場景可能無法完全覆蓋,這可能會導致在生產環境中出現意外問題。

背景

在測試過程中,被測系統經常會依賴其它模塊、下游接口或外部接口。由於依賴系統的穩定性和可用性對於整個項目的進度至關重要,任何依賴系統出現問題都可能導致嚴重的延誤和成本增加。此外,由於測試環境的限制,有些測試場景可能無法完全覆蓋,這可能會導致在生產環境中出現意外問題。因此,為了保障項目的順利進行和提升測試的效率,需要尋求能夠解決上述問題的方案。

問題

  • 測試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

關鍵字: