一顷窒、前言
小米分布式測試平臺(Pecker)是一款集成各種測試的平臺悦即。包括但不限于性能測試、功能回歸測試徒扶、上線準(zhǔn)入測試等趣席。測試種類不限于 RPC兵志、HTTP醇蝴、自定義 Java 接口等等宣肚。
二、背景
你的服務(wù)跑的有多快悠栓?你的服務(wù)平均響應(yīng)時(shí)間是多長霉涨?你的服務(wù)能抗多少流量按价,能抗多久?每次新服務(wù)上線或新活動上線前笙瑟,相關(guān)研發(fā)同學(xué)通常會思考這幾個(gè)問題楼镐。“這也許只有QA同學(xué)應(yīng)該知道吧”往枷。
流量猛增框产,服務(wù)雪崩,不應(yīng)該按斫唷秉宿!服務(wù)容量已經(jīng)算上buffer了,為什么還是敗在大流量之下屯碴?
在這樣的背景之下描睦,我們著手開發(fā)了小米分布式測試平臺-Pecker。旨在盡最大可能解放研發(fā)人員生產(chǎn)力导而,提前發(fā)現(xiàn)服務(wù)瓶頸和缺陷忱叭,保證服務(wù)穩(wěn)定運(yùn)行。
小米分布式測試平臺(Pecker)是一款集成各種測試的平臺今艺。包括但不限于性能測試韵丑、功能回歸測試、上線準(zhǔn)入測試等虚缎。測試種類不限于RPC埂息、HTTP、自定義Java接口等等遥巴。
三千康、小米分布式測試平臺介紹
測試平臺采用了業(yè)界比較成熟的三層架構(gòu)方案。如下:
最上層為控制臺铲掐,用戶在此層操作拾弃。例如創(chuàng)建相關(guān)測試任務(wù)、查看執(zhí)行歷史摆霉、報(bào)表等數(shù)據(jù)豪椿。
中間層為調(diào)度層,對測試任務(wù)進(jìn)行調(diào)度携栋。
最底層為容器云搭盾,即任務(wù)執(zhí)行層。每個(gè)測試任務(wù)最終都是在Pod中執(zhí)行并完成婉支。
1鸯隅、性能測試種類
目前我們實(shí)現(xiàn)了三種壓測種類,分為RPC、HTTP和自定義Java接口壓測蝌以。
其中針對HTTP服務(wù)炕舵,我們引入了變量替換模式。
一個(gè)生動的栗子:假設(shè)現(xiàn)有一個(gè)HTTP GET請求為:http://www.mi.com/test?item=a跟畅,其返回值為:{"res": "a"}咽筋。針對這樣的接口,我們不可能一直構(gòu)造一個(gè)不變的請求徊件,也不可能創(chuàng)建成千上百個(gè)類似的任務(wù)奸攻。
在測試平臺上創(chuàng)建該任務(wù)時(shí),可以定義為:http://www.mi.com/test?item=${item}
虱痕,其返回值為:{"res": "${res}"}
舞箍。用戶只需要上傳包括${item}
和${res}
的CSV文件,平臺則會在請求前自動進(jìn)行替換皆疹。
而且疏橄,對于HTTP的結(jié)果集驗(yàn)證,我們提供了三種校驗(yàn)略就。分別為:請求過程驗(yàn)證捎迫、HTTP狀態(tài)碼驗(yàn)證和用戶自定義斷言驗(yàn)證,下圖為用戶自定義響應(yīng)斷言:
平臺提供的功能過于通用表牢,用戶想測試SQL操作窄绒,怎么辦?
對于這種情形崔兴,我們在架構(gòu)上完成了解耦的工作彰导,將測試模塊與測試客戶端進(jìn)行解耦,將測試模塊與統(tǒng)計(jì)數(shù)據(jù)模塊進(jìn)行解耦敲茄。用戶完全可以通過實(shí)現(xiàn)我們的接口完成測試位谋。
public interface TestClient {
default void setUp();
SampleResult runTest();
default void tearDown();
}
2、性能測試方式
性能測試平臺目前提供了兩種測試模式:用戶增長模式和QPS增長模式堰燎。
用戶增長模式:每個(gè)測試階段內(nèi)用戶數(shù)量固定掏父,隨著階段的增加定量增加用戶數(shù)。
例如:我們總共需要壓測10個(gè)階段秆剪,每階段持續(xù)10分鐘赊淑。初始階段用戶為1W,每個(gè)階段遞增1W仅讽。此模式現(xiàn)支持分布式測試模式陶缺。
QPS增長模式:每個(gè)測試階段內(nèi)固定QPS發(fā)送請求,隨著階段的增加定量增加QPS洁灵。
例如:我們總共需要壓測10個(gè)階段饱岸,每階段持續(xù)10分鐘。初始階段期望QPS=1W,每個(gè)階段期望QPS遞增1W伶贰。此模式暫不支持分布式測試模式蛛砰。
其底層實(shí)現(xiàn)方式為:動態(tài)計(jì)算響應(yīng)時(shí)間罐栈、線程數(shù)和Delay方程式黍衙。
3、報(bào)表數(shù)據(jù)展示
報(bào)表數(shù)據(jù)我們提供了基礎(chǔ)數(shù)據(jù)數(shù)據(jù)以及錯(cuò)誤數(shù)據(jù)展示荠诬,如下:
為了展示數(shù)據(jù)更加直觀琅翻,我們同樣提供了圖數(shù)據(jù):
4、其他功能
因?yàn)樾阅軠y試多數(shù)為自動執(zhí)行任務(wù)柑贞,使用者并不想每次都去控制臺上手動操作方椎。針對這種情況,我們開放了一些接口便于用戶進(jìn)行腳本運(yùn)行或者Jenkins調(diào)度钧嘶。
測試平臺實(shí)際上模擬Client端操作棠众,但用戶想實(shí)時(shí)獲取被壓測服務(wù)的運(yùn)行狀態(tài)。針對這種情況有决,我們的統(tǒng)計(jì)模塊可以動態(tài)展示打開JMX服務(wù)的CPU闸拿、內(nèi)存以及GC相關(guān)數(shù)據(jù)。
5书幕、與主流測試工具對比
與Jmeter和Gatling對比
性能 | 功能 | 數(shù)據(jù)展示 |
---|---|---|
測試平臺性能優(yōu)于Gatling新荤,與Jmeter相近 | 測試平臺作為自研平臺,其功能完備性要差于其他兩個(gè)工具 | 測試平臺在數(shù)據(jù)展示上要優(yōu)于其他兩個(gè)工具 |
四台汇、未來規(guī)劃
1苛骨、基準(zhǔn)測試完善
測試平臺目前處于高速開發(fā)階段,為了不影響其性能苟呐,需要完善其基準(zhǔn)測試痒芝,提供更多的測試場景以及基準(zhǔn)數(shù)據(jù)。
2牵素、接口平臺
可以看到吼野,極大多數(shù)性能壓測都是對某些接口進(jìn)行發(fā)起。后期我們提供更完備的接口平臺两波。接口管理更方便瞳步,性能/功能測試一目了然。
3腰奋、功能測試平臺
目前測試平臺主要實(shí)現(xiàn)了性能測試功能单起,現(xiàn)正在開發(fā)功能測試平臺。支持上傳測試用例并發(fā)起功能測試劣坊。