微服務測試:關鍵策略和工具

開發(fā)團隊越來越多地選擇微服務架構(gòu)而不是單體結(jié)構(gòu),以提高應用程序的敏捷性、可擴展性和可維護性。隨著決定切換到模塊化軟件架構(gòu)——其中每個服務都是一個獨立的單元颜矿,具有自己的邏輯和數(shù)據(jù)庫,通過 API 與其他單元通信——需要新的測試策略和新的測試工具鞭铆。

測試微服務是微服務應用程序過程的關鍵部分:您需要確保您的代碼不會在單元內(nèi)中斷或衡,微服務中的依賴項繼續(xù)工作(并快速工作),并且您的 API 符合定義的協(xié)議. 然而车遂,由于許多微服務采用持續(xù)交付模式構(gòu)建以一致地構(gòu)建和部署功能封断,因此開發(fā)人員和 DevOps 團隊需要準確可靠的測試策略才能對這些功能充滿信心。

那么微服務存在哪些不同類型的測試舶担,它們?nèi)绾芜m用于軟件的其他領域坡疼,它們有什么好處?眾所周知的“測試金字塔”可以為接下來這些測試提供一個測試框架衣陶。

根據(jù)軟件工程原理的著名作者 Martin Fowler 的說法柄瑰,“‘測試金字塔’是一個隱喻,將軟件測試分組到不同粒度的桶中剪况〗陶矗”


1.png

金字塔的不同層次定義為:

  • 單元測試:測試服務的一小部分,例如類译断。
  • 組件測試:驗證單個服務的行為授翻。
  • 集成測試:通過測試服務的適配器來驗證服務是否可以與基礎設施服務(例如數(shù)據(jù)庫和其他應用程序服務)進行交互。

注意:某些版本的測試金字塔會切換組件測試和集成測試的順序孙咪。

  • 端到端測試:驗證整個應用程序的行為堪唐。

結(jié)合多種微服務測試策略可以提高測試覆蓋率和對軟件的信心,同時也使整體維護更易于管理翎蹈。

單元測試

單元測試旨在確保服務的最小部分在微服務設計階段確定的規(guī)范內(nèi)按預期執(zhí)行淮菠。由于微服務將應用程序功能分解為數(shù)百個可測試的小型功能組件,因此單元測試會單獨且獨立地處理每個組件荤堪。最好在一個類或一組相關類的級別上進行單元測試合陵。

單元測試可以通過使用測試替身(例如 fakes枢赔、stubs、mocks拥知、dummies 和 spies)來切斷組件的依賴關系糠爬。例如,測試人員可以模擬您的依賴項的響應并“假設他們執(zhí)行 [X]”举庶,其中 [X] 是正確響應、失敗響應等揩抡。

組件測試

組件測試驗證給定服務是否正常運行户侥。由于范圍僅限于整個微服務架構(gòu)的一部分,組件測試通過隔離系統(tǒng)內(nèi)的服務來檢查所選微服務(可以由幾個類組成)的端到端功能峦嗤,將其依賴項替換為測試雙打和/或模擬服務蕊唐。

您可以為將被劃分為測試用例的每個組件創(chuàng)建測試環(huán)境。它可能涉及測試資源行為烁设,例如性能測試替梨、確定內(nèi)存泄漏、結(jié)構(gòu)測試等装黑。

集成測試

集成測試驗證獨立開發(fā)的組件/微服務在連接時是否正常工作副瀑。它測試組件之間的通信路徑和交互并發(fā)現(xiàn)錯誤。

集成測試的編寫和運行變得更加困難和耗時恋谭。因此糠睡,擁有出色的生產(chǎn) QA(質(zhì)量保證)實踐將有助于確保順利進行。

合同測試

在測試金字塔中調(diào)用合約測試至關重要疚颊。接觸測試通過確保它們可以相互通信來檢查獨立單元(如兩個微服務)的兼容性狈孔。合同測試測試 API 的工作方式,這是微服務相互交互的方式材义。

合約測試檢查這些微服務的邊界和交互均抽,并將它們存儲在合約中,然后可以將其用作雙方未來如何交互的標準其掂。它要求雙方就允許的交互集達成一致油挥,并允許隨著時間的推移而演變。

端到端測試

端到端測試(E2E 測試)是最終測試階段清寇,涉及從頭到尾測試應用程序的工作流程以實現(xiàn)完整的用戶旅程喘漏。

這些測試可以自動化,但 E2E 測試僅針對超關鍵流進行华烟。它在微服務架構(gòu)中不能很好地擴展翩迈,因為它需要啟動許多微服務并將它們連接起來,這對于自動化和維護是具有挑戰(zhàn)性的盔夜。因此负饲,它僅用于測試特定微服務之間的關鍵交互堤魁。

要使用的微服務測試工具,包括按需登臺環(huán)境

開發(fā)人員和 QA 團隊對微服務測試工具有不同的偏好返十,尤其是對于這些不同類型的測試妥泉。以下是一些流行的概要。許多是按需登臺環(huán)境洞坑,它們是動態(tài)創(chuàng)建的盲链,由 CI/CD 管道觸發(fā)。使用按需登臺迟杂,一旦開發(fā)人員完成登臺環(huán)境刽沾,登臺環(huán)境以及任何配置、環(huán)境或安裝不一致都會被破壞排拷。

releasehub

該平臺是一個按需登臺環(huán)境侧漓,具有可訪問的協(xié)作共享功能。您可以將應用程序的存儲庫連接到 Release监氢,然后為每個拉取請求和每次代碼推送的更新創(chuàng)建臨時環(huán)境布蔗。此外,可以為集成浪腐、傳統(tǒng)登臺或 QA/UAT 用例創(chuàng)建環(huán)境纵揍。開發(fā)人員和 QA 可以完全訪問環(huán)境以進行測試和調(diào)試,并且產(chǎn)品團隊牛欢、設計團隊和利益相關者可以看到功能的發(fā)展并盡早并經(jīng)常提供反饋骡男。

WebApp.io(以前的 LayerCI)**

WebApp.io 是一個代碼審查自動化平臺,允許為全棧 Web 應用程序提供按需審查環(huán)境傍睹。您可以創(chuàng)建自定義拉取請求隔盛。一旦您創(chuàng)建了堆棧的一個副本,您可以立即復制它以自動運行 e2e 測試并集成到 CI/CD 工作流中拾稳。WebApp 將自動在 GitHub吮炕、GitLab 或 BitBucket 中注釋您的拉取請求。

Vercel

Vercel 是一個用于前端框架访得、無服務器功能和靜態(tài)站點的云平臺龙亲,旨在與預先存在的內(nèi)容和數(shù)據(jù)庫集成。它托管的網(wǎng)站和 Web 服務可即時部署悍抑、自動擴展且無需監(jiān)督鳄炉,所有這些都無需配置。它還提供邊緣位置托管和緩存搜骡。它類似于 Amazon Web Services (AWS) Lambda 或 Netlify拂盯。

Pact

Pact 是一個代碼優(yōu)先的消費者驅(qū)動的合同測試工具,適用于編寫代碼的開發(fā)人員和測試人員记靡。它使用合同測試來測試 HTTP 和消息集成——驗證應用程序間消息是否符合共同理解的方法谈竿,并記錄在合同中团驱。這種合同測試方式減少了大型單元測試。

Apache JMeter

Apache JMeter 是測試人員常用的基于 Java 的性能測試工具空凸。它是一個開源平臺嚎花,可以用作負載測試工具,用于分析和測量 Web 應用程序的性能呀洲。

Hoverfly

Hoverfly 是一個自動化的紊选、開源的 API 通信模擬工具,用于專門的集成測試道逗。用戶可以測試 API 在速率限制和/或網(wǎng)絡延遲等場景中的反應丛楚。

Grafana

Grafana 提供免費的指標可視化和分析。儀表板讓開發(fā)人員可以查看時間序列數(shù)據(jù)憔辫,以觀察微服務在實時流量中的響應方式。

Gatling

Gatling 是一個用 Scala 編寫的負載測試工具仿荆。它可以在多個平臺上運行模擬贰您,然后報告活躍用戶數(shù)量和響應時間等指標。

結(jié)論

微服務的測試拢操、調(diào)試和維護部分通常是使用微服務架構(gòu)中最具挑戰(zhàn)性但必不可少的部分锦亦。希望以上信息可以幫助您了解不同的測試類型和工作的最佳工具。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末令境,一起剝皮案震驚了整個濱河市杠园,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌舔庶,老刑警劉巖抛蚁,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異惕橙,居然都是意外死亡瞧甩,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門弥鹦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肚逸,“玉大人,你說我怎么就攤上這事彬坏‰伲” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵栓始,是天一觀的道長务冕。 經(jīng)常有香客問我,道長混滔,這世上最難降的妖魔是什么洒疚? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任歹颓,我火速辦了婚禮,結(jié)果婚禮上油湖,老公的妹妹穿的比我還像新娘巍扛。我一直安慰自己,他們只是感情好乏德,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布撤奸。 她就那樣靜靜地躺著,像睡著了一般喊括。 火紅的嫁衣襯著肌膚如雪胧瓜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天郑什,我揣著相機與錄音府喳,去河邊找鬼。 笑死蘑拯,一個胖子當著我的面吹牛钝满,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播申窘,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼弯蚜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了剃法?” 一聲冷哼從身側(cè)響起碎捺,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎贷洲,沒想到半個月后收厨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡优构,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年帽氓,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片俩块。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡黎休,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出玉凯,到底是詐尸還是另有隱情势腮,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布漫仆,位于F島的核電站捎拯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏盲厌。R本人自食惡果不足惜署照,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一祸泪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧建芙,春花似錦没隘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至赶熟,卻和暖如春瑰妄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背映砖。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工间坐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人邑退。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓眶诈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瓜饥。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容