系統(tǒng)的性能和性能測試,是一個大家都知道其重要性卻往往容易忽略的事。為什么說容易忽略呢?很多系統(tǒng),做性能測試的時間要么只在最初上線時,要么在重要的系統(tǒng)重構(gòu)時。而日常的迭代更新、交易量的變化,不知誰才是壓倒系統(tǒng)的最后一根稻草。所以只要系統(tǒng)不下線,性能測試也只有進行時?;谶@樣一個出發(fā)點,我們構(gòu)建了一個自動化性能測試系統(tǒng),以便關(guān)注系統(tǒng)性能的變化。下面介紹一下在工作中的實踐。
1 需要完成什么
自動化構(gòu)建更新系統(tǒng)、測試、收集分析數(shù)據(jù)、發(fā)送報告。
需要進行三類測試:并發(fā)測試、壓力測試、負載測試。
需要得到指標(biāo):請求成功比例、tps、交易成功率、響應(yīng)時間的均值和異常值比例、服務(wù)器的CPU和內(nèi)存使用率。
處理“自動化”之外,還需要“簡單性”——可以不需要投入太多的人力進行開發(fā),使用現(xiàn)成滿足需求的工具;“即時性”——新版本上線前后就能得到反饋。
2 方案
2.1 測試過程
使用jenkins進行系統(tǒng)部署、觸發(fā)測試、觸發(fā)分析、發(fā)送報告。
第一步,設(shè)置jenkins定時,取每周的主干進行部署。
第二步,jenkins觸發(fā)測試工具執(zhí)行測試。
第三步,jenkins觸發(fā)分析腳本,形成報告發(fā)送郵件。
2.2 工具
1)構(gòu)建和觸發(fā)直接使用jenkins,設(shè)置定時,創(chuàng)建Job及Job之間的流程關(guān)系即可。
2)測試工具,在《自動化測試設(shè)計分享?》一文中,提到過的測試工具tell,使用go的chan特性,很容易改寫為提供并發(fā)測試的工具。java中的testNG也是如此,當(dāng)然你也可以使用你熟悉的工具。
3)分析腳本,一個是對tell的日志進行分析,一個是對數(shù)據(jù)庫的交易記錄進行分析,得到請求成功比例、tps、交易成功率、響應(yīng)時間的均值和異常值比例。
4)最后jenkins自動把分析的結(jié)果郵件給你即可。而服務(wù)器的CPU和內(nèi)存使用率直接使用阿里云的監(jiān)控,需要到阿里云后臺查看。這里的不便,可以在阿里云上設(shè)置報警閾值和通知。當(dāng)收到服務(wù)器報警時進行查看即可。
1-4的測試過程可以用下圖表示:
5)對于我們需要完成并發(fā)測試、壓力測試、負載測試這三類測試,需要設(shè)置三個不同的流程,執(zhí)行不同的測試用例。jenkins流程如下圖所示:
2.4 定時執(zhí)行
目前周四發(fā)布新版本,并發(fā)測試會在周四上線前,合并代碼后進行,測試通過后進行上線。周五進行壓力測試,周六至周一每天進行8小時的負載測試。
2.5 補充
交易模型:針對線上每周的交易數(shù)據(jù)變化,需要更新壓力和負載的交易模型。
數(shù)據(jù)庫量級:根據(jù)業(yè)務(wù)的運營階段,不知道商戶什么時候會突然放量,所以數(shù)據(jù)庫保持在比線上數(shù)據(jù)庫多50%的量。
服務(wù)器配置:盡量和生產(chǎn)一致。在目前的實踐中,測試服務(wù)器的配置和生產(chǎn)的配置完全一致,在應(yīng)對需要緊急增加服務(wù)器時,會直接使用測試服務(wù)器。
有不足之處,歡迎指正,共同學(xué)習(xí)。
多謝