1. 程式人生 > >面向微服務的自動化測試框架

面向微服務的自動化測試框架

如果你是一名測試工程師,你可能在過去一年左右聽到了更多關於微服務的資訊。這並不奇怪,因為許多軟體公司也正在轉向更“微服務”的建立軟體的方式。這不可避免地帶來了很多挑戰,特別是如何在微服務世界中實現自動化測試。

     “微服務”是軟體架構中增加的另一個術語。微服務架構風格涉及開發單個應用程式,這些應用程式可以作為一套小型服務一起工作,每個應用程式都執行在其單個程序中,並與輕量級機制(如HTTP資源API)進行通訊。這些服務需要最低限度的集中管理,使用不同的資料儲存技術,並且可以用不同的程式語言編寫。這些圍繞業務功能構建的服務也可以由支援全自動部署的機器獨立部署。

SOA與微服務

    典型的面向服務的架構(SOA)模型通常具有依賴的企業服務匯流排(ESB),微服務使用更快的訊息傳遞機制。雖然SOA專注於指令式程式設計,但微服務架構使用的程式設計風格主要以響應式角色為基礎。雖然SOA模型通常具有過大的RDBMS,但微服務經常使用可連線到傳統資料庫的NoSQL或micro-SQL等資料庫。也就是說,真正的區別在於用於建立一整套服務的體系結構方法。

    用於微服務體系結構的實踐是基於開發人員為大型企業組織建立軟體應用程式所遵循的實踐而建立的。開發人員的經驗非常便於瞭解當前終端使用者的期望,並有助於在各種裝置上建立一致而動態的體驗。對可訪問性,適應性強,模組化和可擴充套件性的基於雲的應用程式需求量很大。這導致許多開發人員改變他們的方法。

    微服務微服務體系結構包含專注於建立完整應用程式或任務的小型服務。微服務的每個例項都代表您的應用程式中的單一責任。真正的好處是,這些服務是相互獨立的,這使得它們可以獨立部署和測試。

瞭解微服務
    在我們處理如何開始測試微服務之前,讓我們定義微服務。最常見的開發風格稱為單片設計。
    單片應用程式“緊密結合”,或者用一組相互高度依賴的類編寫。例如,如果您有兩個類(X和Y)並且對X進行了更改,那麼這種更改很可能會對Y類產生影響。這是一個簡單的示例,大多數單一應用程式由一組類組成相互依賴。如果對這種型別的應用程式進行更改,通常會需要構建和部署整個應用程式的新版本。
    相比之下,微服務體系結構由非常小的,非常專注的服務組成,它們在一起時構成最終完整的應用程式或任務。微服務的每個例項代表您的應用程式中的單一責任。
    這些服務彼此獨立,這使得它們可以獨立部署和測試。以下介紹一下如何進行自動化測試的一些方法。

  • 單元測試
        微服務結構複雜,因為你有許多獨立的服務以很多方式與其他獨立服務進行通訊。開始測試自動化工作的好地方是直接單獨測試特定微服務的功能。通常這很容易通過使用REST API與您的服務進行交談以及某種模擬來讓您單獨測試服務,而無需與其他服務進行任何型別的整合。
        單元測試的範圍是服務的內部。就測試量而言,它們是最多的。理想情況下,單元測試應該是自動的,取決於開發語言和服務框架。但是當您更改和部署服務X時會發生什麼?它將如何影響Y或A的服務?你怎麼知道你沒有破壞什麼?您不僅應該確保您的服務本身在執行,還需要確保其他正在使用您的服務的人員不會受到您的更改的影響。
  • 合同測試
        合同測試應將每項服務視為一個黑匣子,所有服務必須獨立呼叫,並且必須驗證其響應。該服務的任何依賴關係必須是允許該服務執行但不與任何其他服務互動的存根。這有助於避免可能由外部呼叫導致的任何複雜行為,並將重點放在對單個服務執行測試上。即使服務發生變化,每個消費者也必須從服務中獲得相同的結果。應該可以靈活地在後面新增更多的功能。但是,這些新增不能破壞服務功能。如果服務是以這種方式設計的,它將在更長的時間內保持健壯,並且消費者不需要修改他們的程式碼以考慮稍後做出的改變。
  • 端到端測試
        由於我們知道每個微服務都是獨立的,並且可以通過多種方式獨立使用,所以“應用程式”的概念幾乎成為這種環境中的幻想。因此,採用典型的端到端測試自動化策略並不像其他軟體架構那樣有效。
        因此,提出一種涵蓋真實使用者可能執行的所有可能工作流程的傳統端到端測試方法並不真正奏效。您可以使用80/20規則來確定您認為常見的核心旅程,但您可能不希望花費精力試圖在此級別考慮所有端到端可能性。
        端到端測試驗證整個過程流程是否正常工作,包括所有服務和資料庫整合。徹底測試影響多種服務的操作可確保系統作為一個整體協同工作並滿足所有需求。多種行為驅動框架可以通過抽取使用者故事並驗證系統的行為如預期來幫助實現功能測試的自動化。
        實踐中不可能知道使用者使用你的服務的所有方式。使用使用者驅動的合同模型,使用者有責任提供一套測試,指定需要什麼型別的互動以及以何種格式。然後,您的服務將同意這份合同並確保它沒有損壞。這消除了對其他服務的依賴。這種方法還使您能夠驗證合同是否在交付時完成。
  • 使用者介面UI/功能測試
        使用者介面測試是使用者使用角度最高級別的測試,這個級別的測試必須像使用者試圖與系統進行互動。所有資料庫,介面,內部和第三方服務必須無縫協作才能產生預期結果。

    在微服務世界中,需要能夠在執行時快速響應並且及時處理生產環境暴露的問題。因此,建立一個關鍵的監控和警報系統並對生產進行追蹤至關重要。如果其中一項服務出現故障或無響應,您需要立即知道。通過在監控的幫助下發現生產期間的問題,您通常可以在使用者甚至知道存在問題之前自動回滾到服務的最後一個已知的良好版本。

微服務自動化測試實踐

    網際網路金融企業業務場景複雜,功能點分佈廣度及深度數量級龐大,為了解決眾多業務模組之間的相互呼叫,保證業務場景鏈路的完整性及健壯性,企業運用了dubbo技術對各個微服務的介面提供了完整解決方案。
    企業的質量控制部門如何去管控每一個微服務的質量,從而形成每一條測試鏈路的閉環呢?從測試角度來看,企業需要一個針對微服務的測試框架,測試工程師們在框架內實施多種緯度及型別的測試方案,確保測試的可控性,標準化,可持續性。

下面一起探討一下在工作中使用的一套標準化測試框架。

    根據已有情況,我們測試技術支撐團隊研發的一款基於Spring & TestNG的Java測試自動化程式碼開發框架,可測試範圍覆蓋dubbo service、restful api、資料庫(MySQL)、快取(Cache/Memcached)、訊息框架(Kafka/Rabbitmq)、Zookeeper等方面的內容,其目標是構建網際網路公司通用的高可用、高擴充套件測試基礎元件。特點概述:

功能豐富 :以Spring開源框架為平臺,構建網際網路Java後端測試技術棧的通用測試元件框架。
其核心元件包括:測試基礎框架、程式碼生成工具、服務化(SOA)測試框架、restful測試框架、
資料庫框架、快取(redis/memcached)框架、Zookeeoper客戶端框架、配置管理框架、
開關框架、訊息佇列(kafka/rabbitmq)框架等方面的內容;
得心應手 :程式碼生成工具直接生成自成一套的程式碼風格,一套基於Java & Spring & TestNG + Maven技術棧的dubbo、restful api測試框架,測試人員只需要編寫業務邏輯測試程式碼&測試資料即可,方便高效快捷;
深度整合 :封裝多種資料驅動(TestNG DataProvider)模型,支援多種測試用例管理平臺,支援測試結果持久化到db並上報測試資料中心。
其主要模組如下:
  • core : 核心基礎框架,包含上下文Context, Exception等.
  • config :配置框架,制定classpath下的配置檔案讀取規範。
  • tools:程式碼生成工具,一鍵生成基於gradle/maven的測試程式碼框架。
  • http:http服務介面測試框架。
  • rpc:dubbo服務介面測試框架。
  • db:資料庫(MySQL)客戶端框架。
  • cache:快取(redis/memcached)客戶端框架。
  • test:基於TestNG二次開發的測試框架,並與測試用例平臺相結合。
  • zkclient:基於開源Curator Framework的Zookeeper客戶端框架。
  • logger:統一日誌框架,整合logback, log4j, slf4j等。
  • mq : 基於kafka/rabbitmq中介軟體的訊息佇列客戶端
  • plugin : 基於Spring schema擴充套件特性的測試外掛,提供環境/系統變數前置等功能。
  • mocker: mocker service平臺的java sdk.
  • atpclient: 自動化測試平臺java sdk。


專案實踐

接下來使用該框架對其中一個微服務實施測試。

第一步,生成maven測試專案模板
1.首先,從git倉庫將程式碼clone到工作環境。
2.解壓配置專案資訊,開啟並編輯專案目錄下的 “/bin/config.property”檔案
3.執行run.cmd檔案,在project.exportPath目錄下生成maven的測試專案
4. 將生成好的Maven專案匯入你的IDEA中。第二步 編寫測試指令碼
在第一步生成好的maven測試專案模板中,可以根據生產的demo示例檔案來定製你的測試。其中DemoTest.java檔案如下:

public class DemoTest extends TestNGBaseTest {

// Get your dubbo service from Spring Ioc container.
// Note that your service should be avaliable in current environmnet, otherwise, it will get nothing.
private IDemoService iDemoService = BeanUtil.getBean("iDemoService");

@Test(dataProvider = "ExcelDataProvider"/* , testName="id" */)
public void doDemoServiceTest(Map<String, String> testData) throws Exception {

    // Get Java Bean Model from excel & json
    DemoRequestDTO demoRequestDTO = buildJavaBeanModel(DemoRequestDTO.class, testData, this);
    DemoResponseDTO expectedDemoResponseDTO = buildJavaBeanModel(DemoResponseDTO.class, testData, this);

    // invode dubbo service
    Result<DemoResponseDTO> result = iDemoService.doD0emoService(demoRequestDTO);

    // Assert
    Assert.assertTrue(result.isSuccess());
    Assert.assertEquals(result.getResult().getId(), expectedDemoResponseDTO.getId());
    Assert.assertEquals(result.getResult().getName(), expectedDemoResponseDTO.getName());
    }
}

1.測試類DemoTest一定要extends TestNGBaseTest。
2.並且@Test(dataProvider = “ExcelDataProvider”)是選擇使用test的資料驅動ExcelDataProvider。
3.此外,如果需要關聯testlink中的某一個測試用例,此處需要填寫testcase的Id。
4.通過private IDemoService iDemoService = BeanUtil.getBean(“iDemoService”);可以獲取到dubbo service的bean defination。
5.當需要Java的實體類DemoRequestDTO的例項時,可以通過呼叫DemoRequestDTO demoRequestDTO = buildJavaBeanModel(DemoRequestDTO.class, testData, this);來獲取。測試資料來源是data-excel下面,與測試類同名的excel檔案src/test/resources/data-excel/DemoTest.xlsx,測試方法名字匹配excel中的sheet name。
6.如果excel中出現了某一個變數型別,即${ }中定義的型別,它需要匹配data-json中對應目錄下的json檔案,該json檔案即為該實體類例項的資料資訊。
7.通過Result result = iDemoService.doDemoService(demoRequestDTO);呼叫dubbo service.
8.對實際返回的result, 同期望返回的資料做斷言
第三步  執行測試用例及測試報告。
完成編寫測試用例後,將用例放入整合環境排程執行。
使用Jenkins可以對測試用例執行進行更好的排程管理,並對執行狀態和返回結果進行檢視。




同時框架還公佈了外部API,以供對接其他平臺進行結果展示。使用者可以根據自己的需求自定義自己的報告展示模組。
以上,就是針對dubbo的微服務測試框架。
在Jenkins上我們可以看到歷史的執行結果。

作者簡介:

就職於甜橙金融資訊科技部,質量平臺資深開發,致力於用最新的技術開發最好的工具。

相關推薦

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

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

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

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

面向服務自動化測試框架

如果你是一名測試工程師,你可能在過去一年左右聽到了更多關於微服務的資訊。這並不奇怪,因為許多軟體公司也正在轉向更“微服務”的建立軟體的方式。這不可避免地帶來了很多挑戰,特別是如何在微服務世界中實現自動化測試。     “微服務”是軟體架構中增加的另一個術語。微服務架構風格涉及

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

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

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

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

基於APPIUM測試信公眾號的UI自動化測試框架(結合Allure2測試報告框架

clas ava sed rom pos enabled via 代碼管理 ons 框架初衷 前兩周組內的小夥伴跟我說她現在測試的微信公眾號項目(保險)每次上新產品時測試起來很費時,存在大量的重復操作(點點點),手工測試每個產品可能需要半天到一天的時間,復雜的產品需要兩

android常用自動化測試框架

window 自動 瀏覽器 資料 對比 移動 ppi des 選擇 目錄: Monkey MonkeyRunner Instrumentation UiAutomator Espresso Selendroid Robotium Athrun Appi

python專項測試——Android App自動化測試框架

selenium sdk str ase val 測試環境 self ron app自動化 1 為什麽需要框架? 代碼混亂,難閱讀; 重復編碼,效率低;需求變化,難維護; 一 自動化實例 1 準備測試的app;準備測試環境;實現腳本; 2 測試app:只有登錄功能

基於C#實現的自動化測試框架:發布自動觸發自動化回歸測試

exc 時間流 測試用例 出現 服務器 text types filter txt 接口自動化測試用例完成以後,以前都是發布以後手動運行測試用例。雖然手動運行下腳本也就是一個F5的事情,但是離自動化測試的標準差得很遠。這兩天有了個大膽的想法,想要實現以下發布時直接觸發自動化

RobotFramework自動化測試框架的基礎關鍵字(二)

速查 語言 left 自動化 logs python語言 添加 src bsp 1.1.1 如何快速查詢某一個關鍵字的API說明 鼠標選中我們關鍵字,同時按住Ctrl+Alt鍵,即可出來該關鍵字的幫助API以及使用示例 1.1.2 如何快速補全

Eclipse+TestNG搭建接口自動化測試框架

eclipse 資源分享 由於 myeclipse 配置文件 需要 globals setting 做了 一、環境安裝 1、前提 安裝好jdk 配置好Java環境變量 安裝Eclips 這些網上都有,就不再詳細介紹。 資源分享鏈接:http://pan.baidu.com

RobotFramework自動化測試框架的基礎關鍵字(五)

選擇 作用 image val 結果 run comm 意思 框架 1.1.1 Run Keyword If判斷的使用 Run Keyword If是一個常用的用來做邏輯判斷的關鍵字,意思是如果滿足了某一個判斷條件,然後就會執行關鍵字,我們對list3中放入0

RobotFramework自動化測試框架-移動手機自動化測試AppiumLibrary介紹

request rri port wan dpa mage simulator mac uninstall 在使用AppiumLibrary庫時,需要預先安裝好Appium自動化工具,Appium官網地址為:http://appium.io/ Appium的GitHub地

基於python的接口自動化測試框架

urn __name__ exce 文件格式 圖片 XML pla main tex 公司內部的軟件采用B/S架構,大部分是數據的增刪改查,由於還在開發階段,所以UI界面的變化非常快,難以針對UI進行自動化測試,那樣會消耗大量的精力與時間維護自動化腳本。針對此種情況,針對接

Selenium自動化測試框架的搭建

技術 閱讀 中國 有一個 base 這一 們的 是否 hat 說 起自動化測試,我想大家都會有個疑問,要不要做自動化測試? 自動化測試給我們帶來的收益是否會超出在建設時所投入的成本,這個嘛別說是我,即便是高手也很難回答,自動化測試的初衷是美好的,而測試工程師

自動化測試框架

目錄 源文件 綜合素質 pos post 文件 簡單 單位 文件格式 1、開發工具開發語言和使用框架:Java、Selenium2集成開發環境: Eclipse https://www.jetbrains.com/idea/ jetbrains 大法好分布式監控平臺: Je

解決TestNG 自動化測試框架如何安裝到eclipse中

sem err dmr nco mwl wql urn ycm vro TestNG 自動化測試框架如何安裝到eclipse中 ??? 解釋: TestNG 其實就是一個插件(個人理解為eclipse 中的插件 ) 開門見山---寫步驟 :

RobotFramework自動化測試框架-移動手機自動化測試Click A Point關鍵字的使用

pla com version -1 oca users button main localhost Click A Point關鍵字用來模擬點擊APP界面上的一個點,該關鍵字接收兩個三個參數[ x=0 | y=0 | duration=100 ],x和y代表的是點的坐標位

[持續交付實踐] 基於 Junit 的接口自動化測試框架實現

lis ebo 命名 早已 更多 數據集 matcher 似的 相關 前言 這半個月基本都在出差以及各種公司業務上的事情,難得有空閑整理一些測試技術上的事情。周末有些空閑抓緊碼一篇填坑,持續交付/持續集成這一系列文章不僅僅是想在壇子裏和同行者做些分享,對個人的一種自我思考和

自動化測試框架搭建之企業級實戰經驗

自動化框架搭建實戰業務特征: 問題: 1, 根據目前的業務特征如何選取合適的自動化測試工具&框架? 本文出自 “運維自動化” 博客,請務必保留此出處http://shower.blog.51cto.com/4926872/1978981自動化測試框架搭建之企業級實戰經驗