1. 程式人生 > >如何用Pact進行微服務整合測試

如何用Pact進行微服務整合測試

原文連結
https://codefresh.io/docker-tutorial/how-to-test-microservice-integration-with-pact/

挑戰:微服務整合測試

遷移到微服務對測試我們的系統產生了新的挑戰。理論上每個微服務都應該是隔離的並可以獨立操作。但在實踐中一個服務如果沒有其他部分通常沒什麼用。另一方面 - 為一個服務拉起整個系統的拓撲進行測試抵消了微服務期望帶來的模組化和封裝。

挑戰在於如何檢驗與其他服務整合後沒有問題。我們希望越早越好。而且我們不想將複雜的生產環境重現一遍。一般來說這種檢驗是整合功能測試或叫端到端測試。但實際是當我們的系統越來越複雜 - 端到端帶來的收益越少。 大量的相互依賴導致誤報和很長的執行週期。 使得測試變得很難管理與除錯。

這甚至有一個測試金字塔理論(最初由Mike Cohn在他的著作‘Succeeding with Agile’中提到)講述了為了優化你的投入,你需要更少的高層次的端到端測試,寫更多的低層次的單元測試。

請閱讀本文並看看Codefresh(https://codefresh.io/codefresh-signup/?utm_source=Blog&utm_medium=Post&utm_campaign=pactT), 他是對於Docker最好的CI。


單元測試很好!但在它帶來的所有收益中 - 他們對測試與其他服務的整合沒什麼作用。

那我們怎樣保證每個服務團隊可以獨立的迭代但又能保證整體系統的健康呢?我們如何實現持續交付,小批量生產,快速反饋,而又不會在每次變更時引起服務出問題呢?

一個可能的答案是Consumer-Driven Contract(CDC) 測試。這種測試策略是基於一種多年前就定義的服務進化模式。它現在分散式系統變得更常見後變得更適合了。

Consumer-Driven Contracts:

我嘗試簡單解釋一下。 Consumer-Driven Contracts實際就是面向服務與服務關係的合約。意思就是不想以前是provider提供方定義介面與服務級別是什麼樣(同事消費者consumer儘量適配) - 現在消費者來領舞。 每個消費者來定義它期望服務提供方需要交付與需要檢查的。這就將整合的責任轉移到服務提供方。

那就變成以下流程:

在商務合約上者通常描述成‘將消費者放在第一位’ 或‘傾聽你的客戶’。因為想要提供最好的服務我們需要儘量做到客戶期望和需要的。而不是我們假設對的事。

當討論微服務進化時 - 在那種每個服務都有一個獨立團隊開發的大型企業裡尤其重要。有時這些團隊也可能在不同的地理位置和區域。這影響了即時溝通和讓業務功能進化更有挑戰性。

合約測試框架

消費者驅動合約當然可以通過投資團隊間的溝通與協作來管理。 也可以通過使用結構化的系列化格式如protobuf,thrift或messagepack訊息體來解決。但如果要管理一個定義好的流程 - 最好使用框架,尤其如果是個開源的。

這種框架已經出現了。這其中最傑出和活躍的是Pact和Spring Cloud Contract。後者只針對使用JVM的專案。 而Pact使用Ruby寫的但可以支援很多語言,包括Java,Go,Python,Javascript。 讓它很適合在複雜,多樣性的微服務系統中使用。

今天我們會看看如何在兩個服務間定義和校驗合約。消費者服務是用Python寫的。而提供方服務是用Go寫的。測試會在我們的CI/CD流程中進行 - 也就是在Codefresh流水線裡面。

Pact

所以,Pact怎麼工作的?它開始於消費者。

消費者服務的開發寫一個測試。測試定義了與提供方的整合。這包括了提供方需要的狀態,請求的訊息體和期望的結果。基於這個定義Pact建立和執行一個提供方的樁來進行測試。這個測試的輸出回事一個或多個json檔案,一般是這樣的:

{
  "consumer": {
    "name": "billy"
  },
  "provider": {
    "name": "bobby"
  },
  "interactions": [
    {
      "description": "My test",
      "providerState": "User billy exists",
      "request": {
        "method": "POST",
        "path": "/users/login",
        "headers": {
          "Content-Type": "application/json",
        },
        "body": {
          "username":"billy",
          "password":"issilly"
        }
      },
      "response": {
        "status": 200,
      }
    },
  ],
  "metadata": {
    "pactSpecification": {
      "version": "2.0.0"
    }
  }
}

這就是合約,這就是pact。 現在他們被傳給服務提供方。也可以被提交給共享的git倉庫,或通過Pact Broker應用上傳到共享的檔案儲存。

一旦合約更新過了 - 提供方需要對其進行測試驗證是否仍符合要求。它通過使用共享的pact檔案執行它自己的校驗測試而不是真實版本的服務。如果所有的互動是符合預期的並測試通過了 - 我們就可以繼續了。 如果不 - 提供方的開發需要通知消費方的開發。然後,他們可以一起分析什麼導致了合約的失敗。

本文來自微信公眾號「麥芽麵包,id「darkjune_think」
轉載請註明。微信掃一掃關注公眾號。
交流Email: [email protected]

相關推薦

如何用Pact進行服務整合測試

原文連結 https://codefresh.io/docker-tutorial/how-to-test-microservice-integration-with-pact/ 挑戰:微服務整合測試 遷移到微服務對測試我們的系統產生了新的挑戰。理論上每個微服務都應該是隔離的並可以獨立操作。但在實踐中一個服務

服務整合測試自動化探索 | 併發程式設計網

1 簡介 51信用卡管家自2015年開始實施微服務架構,是業界較早嘗試微服務架構的技術團隊,整個團隊有幸見證了微服務從最初的幾個服務試點到全面鋪開的過程。架構的演變也催生了自動化測試框架和策略的演變,測試團隊通過持續地探索和總結,在整合測試自動化框架建設和策略選擇上積累了一些經驗,拋磚引玉和大

51信用卡的服務整合測試自動化探索

51信用卡自2015年開始實施微服務架構,是業界較早嘗試微服務架構的技術團隊,整個團隊有幸見證了微服務從最初的幾個服務試點到全面鋪開的過程。架構的演變也催生了自動化測試框架和策略的演變,測試團隊通過持續地探索和總結,在整合測試自動化框架建設和策略選擇上積累了一些經驗。 微服務架構下

DevOps架構下如何進行服務效能測試

一. 微服務架構下的效能測試挑戰 微服務與DevOps 微服務是實現DevOps的重要架構 微服務3S原則 DevOps核心點   微服務架構下的業務特點 億級使用者的平臺 單服務業務隨時擴容 服務之間存在相互呼叫關係 版本更新快,上線週期短

使用jMeter構造大量併發HTTP請求進行服務效能測試

比如我開發好了一個微服務,想測試其在大併發請求下的效能表現如何。 比較方便的一個做法是使用工具jMeter來構造這些請求。 建立一個新的工程: 建立一個新的Thread Group,下圖意思是這個工程會使用3個執行緒同時發請求,每個請求執行一次。

python進行信公眾號開發(僅測試學習)

python 微信公眾號 api開發今天看到篇教程,是用python開發微信公眾號的,覺得有意思,就敲代碼實現了一下,成功後更覺得好玩,故記錄,方便開發深入時使用。 基礎背景介紹: 首先得有個人微信號(沒有自行註冊),為方便測試學習; 其次,還要註冊微信公眾號,微信公眾號不止一種,是分多種的,具體詳情見官方

美團點評:打造服務自動化測試與持續整合工具鏈實踐

本文內容節選自第六屆全球軟體案例研究峰會,時任美團點評酒旅質量團隊工具鏈負責人王鵬老師分享的《微服務架構下的自動化測試和持續整合工具鏈實踐》實錄,重點分享:微服務架構下解決自動化測試、開發聯調、測試環境、持續整合方面遇到的問題及解決方案。(PPT+文稿)。 王鵬老師時任美

使用jMeter構造大量並發HTTP請求進行服務性能測試

用戶 req -o proto 二維 strip 9.png HR upload 比如我開發好了一個微服務,想測試其在大並發請求下的性能表現如何。 比較方便的一個做法是使用工具jMeter來構造這些請求。 創建一個新的工程: 創建一個新的Thread Group,下圖意思

服務架構下使用Spring Cloud Zuul作為網關將多個服務整合到一個Swagger服務

turn 接口文檔 vid 使用方法 數據操作 prefix opera tor font 註意:   如果你正在研究微服務,那必然少不了服務之間的相互調用,哪麽服務之間的接口以及api就必須生成系統的管理文檔了。如果你希望更好的管理你的API,你希望有一個工具能一站式地解

美團點評:打造服務自動化測試與持續集成工具鏈實踐

選擇 rift moc 完成 軟件 用戶 seo bee png 本文內容節選自第六屆全球軟件案例研究峰會,時任美團點評酒旅質量團隊工具鏈負責人王鵬老師分享的《微服務架構下的自動化測試和持續集成工具鏈實踐》實錄,重點分享:微服務架構下解決自動化測試、開發聯調、測試環境、

普通話說服務系列(一) 單體應用到服務的進化

從工作體驗切入 開始部署應用                    在很久很久以前,開發與部署web應用時,一開始都是很開心地寫完‘整個

零基礎Docker部署服務

1. docker架構   這裡的Client和DOCKER_HOST(docker server)都是在本地的,docker倉庫Registry是在遠端的; Client的docker命令通過Docker daemon與docker server映象互動;

服務整合Zipkiin+Sleuth時遇到的坑

在微服務中整合Zipkin+Sleuth的時候,出現了一個很大的問題:         配置檔案如下:(springCloud:Finchley.SR1) spring:   application:     name: mall-order-server

spring cloud 服務整合redis以及具體應用

首先,pom檔案引入redis的依賴: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-

友雲服務架構下配置檔案管理利器:配置中心

微服務架構是這幾年IT領域的一個高頻詞彙,越來越多的專案和應用正在以微服務的思想進行重構。相比於單體應用和SOA架構,微服務優勢也逐漸凸顯,被廣大架構師和技術人員引入和推崇。當然,單體應用、SOA、微服務等各有優勢和不足。 單體架構在早期的企業內部資訊化或者搭建中小型專案時很常見,簡單說就是將應用程式的所有

在搭建服務平臺測試的時候出現 Spring jpa findOne(Id)報錯

出現搞錯誤的主要原因是poml檔案中spring boot中的版本是2.0.1.RELEASE org.springframework.boot spring-boot-starter-parent 2

springboot+dubbo+myBatis實現服務整合

程式碼下載:https://download.csdn.net/download/typ1805/10485048 微服務架構成了當下的技術熱點,實現微服務是要付出很大成本的,但也許是因為微服務的優點太過於吸引人,以至於大部分開發者都將它當成未來的發展趨勢。 微服務架構的演進

關於服務程式測試的思考

本文由本人原創,僅作為自己的學習記錄 微服務程式的目的是有效地拆分應用,實現敏捷開發與部署。 特點: 1.每個模組相當於一個單獨的專案 2.每個模組可用不同的儲存方式 一個微服務程式的服務之間彼此獨立,這使得它們可以獨立部署和測試。 關於測試的思考: 1.單元測

python進行應用程式自動化測試(uiautomation)

        本文主要用到一個uiautomation的開源框架,是一個咱們中國人寫的,支援MFC,Windows Forms,WPF,Metro,Qt介面;此文主要是自己的個人總結,開源作者原文:http://www.cnblogs.com/Yinkaisheng/p/3444132.html

如何將GitHub上的專案jenkins進行持續的整合構建部署

最近公司新來的架構師把公司的專案用jenkins持續構建部署,第一次接觸這種自動構建工具的我內心十分的動,再也不用我來把專案打包部署了,簡直嗨的不行!於是到網上收集了一些資料,自己琢磨了一陣子,現在把自己琢磨出來的東西分享記錄一下,有錯誤的地方歡迎大家指正。