1. 程式人生 > >通用HTTP測試工具開發詳解

通用HTTP測試工具開發詳解

##一、背景 由於最近題主在做一些分散式測試工具的開發,想分享一些思路或者想法出來。 具體的產品可見,小米分散式測試平臺 (一)- 初識 Pecker。 因為涉及公司的專案以及保密性,故只分享一些這種工具的開發思路。

HTTP協議無論在公司內網或者公司外網來講,尤其重要。但對其進行效能壓測和功能壓測的工具基本就那幾種。且每個公司業務和環境不同,移植或者二次開發難度很大。

因此,大公司在這件事情基本上都投入很多人力,但核心功能還是下面講到的這些。

##二、HTTP效能測試 ###1、基本架構 還是搬出下面這個圖,HTTP測試功能只是在容器雲上執行的一個客戶端。 **這樣做的原因是:**控制檯和排程層相對獨立,功能保持不變。容器雲的Pod提供執行時環境,真正跑的任務為一個HTTP測試客戶端。 三層架構

清楚了,HTTP測試功能的整體所處的位置後,我們再考慮HTTP功能的各個模組。

###2、HTTP功能模組 整個HTTP測試功能,一般需要以下四個模組。分別為:任務基本配置、測試配置、客戶端特殊配置以及服務端配置。

  • 基本配置:整個測試平臺通用,包括常見的任務所屬、名稱以及任務環境、測試型別等。
  • 測試配置:整個測試平臺通用,包括壓測方式以及壓力機配置。
  • 客戶端特殊配置:HTTP測試功能專屬。包括一些HTTP引數設定以及檢查點配置。
  • 服務端配置:待監控的服務端資訊。

我畫了一張草圖,基本上HTTP測試就是下面這個樣子: 題外音:原諒一個不會畫原型圖的程式設計師吧!!

HTTP任務編輯

###3、基本配置 HTTP任務作為一種任務形態依附於專案,因此需要定義相關的專案和任務名稱。基本配置作用於各個任務形態(RPC、HTTP、Jar)。

  • 任務環境:通常來講,環境分為測試環境和生產環境,當然也可以根據不同的機房進行定義;該項設定主要是決定了任務執行的Pod屬於哪個環境。
  • 任務型別:由於為HTTP任務,故此項無需改動。其他的選項為:RPC、Jar任務等。
  • 測試型別:主要分為效能壓測和功能測試兩部分。

###4、測試配置 也是整個測試平臺的通用配置,主要包括壓測方式設定以及壓力機配置。

  • 壓測方式:可設定為使用者數模式和TPS模式。二者的主要區別在於使用者數模式,客戶端會模擬等量的使用者進行不間斷測試;而TPS模式僅僅是保證在一個自然數週圍進行測試(如設定TPS=1000,則客戶端會盡量保證在這附近進行測試)
  • 壓力機配置:需要配置壓力機的數量、CPU核數以及記憶體大小。其實就是對Pod的設定。

###5、客戶端請求 該模組作為HTTP任務的專用模組。可配置一些HTTP的常見基本引數。

  • CSV功能替換模型:該模型比較難以理解。我們輔助一個例子來說明:假設有一個後端服務提供一個這樣的介面:
path:/demo
引數:id=?
返回值:id
示例1:www.test.com/demo?id=1&name=1    返回:1
示例2:www.test.com/demo?id=2&name=2    返回:2

對這樣的介面測試,我們不可能只請求一個不變的例子(如id===1),也不可能窮舉N個任務,每個任務傳送一個固定的請求。 所以,我們需要使用變數替換掉id,即:

www.test.com/demo?id=${id}&name=${name}

然後,在CSV中保證有id列和name列,即可。這樣平臺在測試過程中,會一行行進行遍歷和替換。

  • 檢查點:對結果進行斷言驗證。提取點包括:ResponseHeader和ResponseBody;其中ResponseHeader只支援鍵值對匹配,ResponseBody支援JSON提取、文字提取和正則匹配等。

###6、服務端監控 對被壓測的服務進行監控,其實現思路常見有2種:服務端開啟JMX或者服務端使用我們提供的Agent進行資料回傳。

##三、HTTP任務除錯 如果任務儲存後,再執行。通常會進行一個:儲存、Pod測試、報表收集等過程。 假設使用者在編輯任務表單時輸錯了一個字元,仍需要進行以上步驟,其效率將大大折扣。

基於此,我們需要使用者在編輯任務表單時,實時除錯自己的任務,如下: HTTP任務除錯

其中,概覽包括請求及響應頭資訊、請求Body為POST時請求的資料、響應資訊為服務端的真實響應資料。

備註:由於除錯功能僅為校驗表單的作用,是不能CSV替換模型同時使用。

##四、HTTP定時測試

多數情況下,我們的任務不僅要執行一次,而是多次執行。那任務本身如果支援定時測試,那真是極好的,至少不用外接Jenkins進行定時排程。 通常,我們為使用者支援兩種方式來支援定時排程,分別為Crontab模式和鬧鐘模式。

Crontab模式 鬧鐘模式

至於任務本身的定時排程實現,我們可以使用Spring Schedule或者Quartz元件,但是需要保證多節點不會同時排程的問題。

##五、HTTP功能測試 針對HTTP功能來講,無非就是跑一些case,能夠輸出判斷結果。 可以精簡效能測試模組,去掉壓力機的相關配置。 任務須配置為CSV模式,其中包括請求引數變數以及檢查點變數。具體不再詳述。