使用Wiremock進行整合測試 - kubilay
作為Trendyol客戶服務團隊,我們開發和維護不同的專案。為了能夠安全地依賴我們的專案並增加我們的交付重點,我們始終試圖改善我們的運營。
整合測試是這些操作步驟之一,最近我們有機會專注於我們的整合測試,並且情況有所改善。我將透過回答以下問題來嘗試解釋與整合測試過程相關的這些操作:
- 在Wiremock之前我們如何管理整合測試?
- 是什麼問題促使我們使用Wiremock?
- 我們如何使用Wiremock?
首先,讓我們深入瞭解“ Wiremock時代之前”。
在Wiremock時代之前
我們有2個不同的專案:
- api-gateway:主要的Restful API專案。
- api-gateway-test:使用Gherkin和Java的Cucumber整合測試專案。
回到CI / CD管道,以前,整合測試專案將透過向主專案的階段例項發出請求來在其自己的CI管道上執行測試。這可能會導致幾個問題,最重要的是環境依賴性。
我所說的環境依賴性是,每當測試專案執行一個簡單的場景(例如獲取訂單資訊)時,它都會向gateway-api的stage例項發出請求。作為回報,gateway-api專案將執行已實現的業務,並且很可能會向另一個外部api的stage例項發出請求以獲取請求的資料。
那麼,有什麼問題呢?
乍一看,這種情況似乎並不成問題,但讓我提示您幾周(也許幾天)後發生的情況。由於此外部api是階段例項,因此將來相同請求的響應可能會給您一個404驚喜。因為,也許external-api的所有者團隊正在進行DELETE端點測試並感到驚訝,所以他們刪除了我們用來執行測試的訂單資訊。簡而言之,該測試訂單不再存在。這意味著某人必須找到合適的訂單資訊來修復測試。而且該命令在某個時候也不會存在。然後有人去解決。.我想您在這裡看到我的意思,這是一個惡性迴圈,我們需要進行短跑。
這是眼前的問題之一,還有另一個至關重要的問題。假設我們有100%的把握,只要我們想提出相同的請求,就會始終奇蹟般地存在所請求的資訊。超時和響應時間如何?
在Wiremock時代之後
首先,讓我們看一下Wiremock官方網站的基本定義:
WireMock是基於HTTP的API的模擬器。有些人可能會認為它是服務虛擬化工具或模擬伺服器。
當您依賴的API不存在或不完整時,它可以使您保持生產力。它支援測試真實API無法可靠生成的極端情況和失敗模式。而且由於速度很快,因此可以將構建時間從數小時縮短到數分鐘。
閱讀定義後,您將意識到這很可能會解決前面提到的問題。它可以模擬所有這些超時失敗案例,還可以為我們正在討論的那些外部api提供模擬響應。
這意味著Wiremock可以等待請求,並透過匹配請求來返回告訴我們要返回的內容,就好像它是我們的任何外部api一樣。
從現在開始,我們的整合測試專案不再負責執行測試。此步驟移至gateway-api專案的管道。現在,對於每個專案,管道的狀態可以總結如下:
- Gateway-api:Git推送->構建專案->將構建的Docker映像作為'gateway-api:latest'推送到Docker登錄檔
- Gateway-test-api:Git推送->構建專案->將構建的Docker映像作為'gateway-api-test:latest'推送到Docker登錄檔
在我們放大“整合測試”步驟之前,最好先看一下使這些步驟成為可能的一些程式碼片段。這些檔案之一是gateway-api的gitlab-ci.yml檔案,它基本上是一個配置檔案,用於管理專案的CI流程。
variables: REGISTRY_URL: <docker_registry_url> REGISTRY_PASS: <docker-registry-username> REGISTRY_HOST: <docker-registry-password> stages: - Integration test - Build Build: stage: build script: - docker login -u $REGISTRY_USER -p $REGISTRY_PASS $REGISTRY_HOST - docker build -t greay-gw-api-build . - docker push great-gw-api-build Integration Test: Integration test image: $REGISTRY_URL/docker-compose-git services: - $REGISTRY_URL/docker-dind variables: DOCKER_HOST: $REGISTRY_URL script: - docker login -u $REGISTRY_USER -p $REGISTRY_PASS $REGISTRY_HOST - docker-compose up --abort-on-container-exit |
本質上,此配置檔案使兩件事連續發生:
- 構建最新的映像並將其推送到指定的登錄檔。
- 如果docker-compose檔案存在於同一目錄中,請執行該檔案。(我們將很快透過示例深入研究此流程。)
這個gitlab-ci檔案和閘道器-api-test專案中的檔案有一個區別。整合測試專案不會執行整合測試,因此該專案的gitlab-ci檔案中不存在“整合測試”階段。
總結到現在為止發生的所有事情:
- 我們在gateway-api中實現了某種功能,並將其合併到master分支中。合併之後,帶有“:latest”標籤的docker映像將被推送到相應的登錄檔。
- 我們還針對該功能編寫了整合測試,還將其合併到master分支,這再次導致帶有“:latest”標籤的測試專案的docker映像被推送到相應的登錄檔。
如果您仍在跟上現狀,那麼著名的“整合測試”步驟就來了。
更詳細點選標題見原文
相關文章
- 使用遠端Docker進行整合測試Docker
- JMeter 如何與 MySQL 進行整合測試JMeterMySql
- 使用Gradle執行整合測試Gradle
- 使用 HTTPie 進行 API 測試HTTPAPI
- 使用PostMan進行API測試PostmanAPI
- 使用 MeterSphere 進行 Dubbo 介面測試
- 使用JUnit進行單元測試
- 使用Jmeter進行http介面測試JMeterHTTP
- 【java】使用jprofiler進行效能測試Java
- 實戰指南:使用 xUnit 和 ASP.NET Core 進行整合測試【完整教程】ASP.NET
- 使用Jest進行React單元測試React
- 使用 Sysbench 進行 Linux 效能測試Linux
- 使用PostMan進行自動化測試Postman
- 使用 PostMan 進行自動化測試Postman
- JMeter使用jar進行壓力測試JMeterJAR
- 使用 Spring 進行單元測試Spring
- 使用 QUnit 進行 JavaScript 單元測試JavaScript
- .netcore持續整合測試篇之搭建記憶體伺服器進行整合測試一NetCore記憶體伺服器
- 使用 Spring Boot 進行單元測試Spring Boot
- 使用TestContainers進行容器Docker測試 – EmmanouilAIDockerUI
- 使用Jmeter進行RPC壓力測試JMeterRPC
- 使用ab對nginx進行壓力測試Nginx
- 使用Iperf工具進行網路效能測試
- 使用YCSB工具工具進行cassandra效能測試
- 使用QTP進行WEB頁面效能測試QTWeb
- 效能測試進階實踐篇:10分鐘教你使用JMeter進行websocket測試!JMeterWeb
- Springboot整合ElasticSearch進行簡單的測試及用Kibana進行檢視Spring BootElasticsearch
- 使用Angular CLI進行單元測試和E2E測試Angular
- Python中的單元測試框架:使用unittest進行有效測試Python框架
- Autofac 整合測試 在 ConfigureContainer 之後進行 Mock 注入AIMock
- Springboot整合JUnit5優雅進行單元測試Spring Boot
- 使用java+TestNG進行介面迴歸測試Java
- 使用JMeter進行負載測試快速入門JMeter負載
- 使用 Headless Chrome 進行自動化測試Chrome
- 如何使用hammerdb進行MySQL基準測試MySql
- 使用Bonnie進行系統IO效能測試 (zt)
- 使用 CasperJS 進行簡單的 UI 測試JSUI
- 使用 Bash shell 指令碼進行功能測試(轉)指令碼