性能測試中的場景設(shè)計(jì)和測試執(zhí)行

假設(shè)一個(gè)內(nèi)部系統(tǒng)要求響應(yīng)時(shí)間在 3s 以內(nèi),支持最大用戶數(shù)為4萬。根據(jù)二八原則,80%用戶在20%時(shí)間使用系統(tǒng),(4w80%)/(24h20%)≈1.9點(diǎn)擊/秒。并發(fā)數(shù)=TPS(運(yùn)行時(shí)間+思考時(shí)間)=1.9(3+0.5+0.3+3+0.5+0.3+0.5+3)=21。
注意:二八原則計(jì)算的結(jié)果并非是并發(fā)數(shù),而是系統(tǒng)要達(dá)到的處理能力(吞吐量),初學(xué)者容易被誤導(dǎo),拿著這個(gè)數(shù)據(jù)就去設(shè)置并發(fā)數(shù),這是錯(cuò)誤的哦。 如果你的系統(tǒng)性能要求更高,也可以選擇一九原則或更嚴(yán)格的算法,二八原則比較通用,一般系統(tǒng)性能比較接近這個(gè)算法而已,大家應(yīng)該活用。

基于以上,如果我們通過測試得到的最大吞吐量大于計(jì)算出來的吞吐量(TPS≈1.9),且各項(xiàng)性能指標(biāo)均達(dá)標(biāo),那么系統(tǒng)就是安全的。如果用戶發(fā)帖遵循正態(tài)分布,那么并發(fā)請求數(shù)峰值還肯定會大于上述估算的吞吐量(并發(fā)數(shù)大于吞吐量???)。

一、場景設(shè)計(jì)

場景編號:001 - 基準(zhǔn)測試

目的:驗(yàn)證測試環(huán)境、驗(yàn)證腳本,得到系統(tǒng)的性能基準(zhǔn),為后續(xù)測試提供參考。

涉及業(yè)務(wù) 業(yè)務(wù)占比 運(yùn)行時(shí)間 并發(fā)數(shù)
瀏覽任務(wù) 20% 5分鐘 1
登錄 20% 1
新建任務(wù) 20% 1
配置任務(wù) 20% 1
刪除任務(wù) 20% 1
場景編號:002 - 配置測試

目的:優(yōu)化配置,測試當(dāng)前軟、硬件配置是否能夠滿足性能指標(biāo)。

涉及業(yè)務(wù) 業(yè)務(wù)占比 運(yùn)行時(shí)間 并發(fā)數(shù)
瀏覽任務(wù) 38% NA 8
登錄 28% 6
新建任務(wù) 19% 4
配置任務(wù) 10% 2
刪除任務(wù) 5% 1
場景編號:003 - 負(fù)載測試

目的:分析性能變化趨勢,找出性能瓶頸與風(fēng)險(xiǎn),對系統(tǒng)進(jìn)行定容定量。

涉及業(yè)務(wù) 業(yè)務(wù)占比 運(yùn)行時(shí)間 并發(fā)數(shù)
瀏覽任務(wù) 38% NA 8/16/24
登錄 28% 6/12/18
新建任務(wù) 19% 4/8/12
配置任務(wù) 10% 2/4/6
刪除任務(wù) 5% 1/2/3
場景編號:004 - 穩(wěn)定性測試

目的:長時(shí)間(>8小時(shí))運(yùn)行大量負(fù)載,確定系統(tǒng)軟硬件環(huán)境是否運(yùn)行穩(wěn)定。

涉及業(yè)務(wù) 業(yè)務(wù)占比 運(yùn)行時(shí)間 并發(fā)數(shù)
瀏覽任務(wù) 38% >12小時(shí) 42
登錄 28%
新建任務(wù) 19%
配置任務(wù) 10%
刪除任務(wù) 5%

二、場景實(shí)現(xiàn)

單線程組實(shí)現(xiàn)測試場景

假設(shè)業(yè)務(wù)比例為 “查看詳情(8):登錄(6):新建任務(wù)(4):(配置任務(wù))2:(刪除任務(wù))1”。差不多每3個(gè)登錄會有4個(gè)查看任務(wù),新建2個(gè)任務(wù),配置1個(gè)任務(wù);每6個(gè)登錄,刪除1個(gè)任務(wù)。我們使用 If邏輯控制器 + ${__counter(arg1, arg2)}函數(shù)來實(shí)現(xiàn)。

  • 新建任務(wù)的If控制器條件:登錄(3)/新建(2)
    ${__counter(true,i)}%2==1||${__counter(true,i)}%3==0
  • 配置任務(wù)的If控制器條件:登錄(3)/配置(1)
    ${__counter(true,i)}%3==0
  • 刪除任務(wù)的If控制器條件:登錄(6)/刪除(1)
    ${__counter(true,i)}%6==0
  • 查看任務(wù):因?yàn)榕渲煤蛣h除操作包含查看的業(yè)務(wù),所以單獨(dú)的登錄/查看比為6:(8-2-1),即6:5。
    ${__counter(true,i)}%5!=0||${__counter(true,i)}%6==0
多線程組實(shí)現(xiàn)測試場景

多線程組的場景設(shè)計(jì)需要注意的是業(yè)務(wù)關(guān)聯(lián)關(guān)系。比如查看任務(wù)可以不需要登錄的;新建、配置、刪除任務(wù)都需要登錄且并發(fā)數(shù)的和大于登錄,說明有些場景是登錄后執(zhí)行了多業(yè)務(wù)的;查看詳情的并發(fā)數(shù)小于登錄,所以有部分用戶可能是登陸后只查看了詳情。按照 “查看詳情(8):登錄(6):新建任務(wù)(4):(配置任務(wù))2:(刪除任務(wù))1” 的比例,以及用戶實(shí)際使用場景來算,得到如下場景:

  1. 登錄(2)-新建任務(wù)(2)
  2. 登錄(2)-新建任務(wù)(2)-配置任務(wù)(2)-查看詳情(2)
  3. 登錄(1)-查看詳情(1)-刪除任務(wù)(1)
  4. 登錄(1)-查看詳情(1)
  5. 查看詳情(4)
兩種腳本實(shí)現(xiàn)方式的對比
對比 單線程組 多線程組
優(yōu)勢 參數(shù)化容易,保證運(yùn)行的線程間的參數(shù)的唯一性。 線程組間互不干擾,簡單明了,易于維護(hù)。
劣勢 腳本順序執(zhí)行,相互之間有影響;腳本復(fù)雜度高。 多個(gè)線程組相當(dāng)于多個(gè)不同的腳本,需要分開參數(shù)化,保證每個(gè)線程取到參數(shù)的唯一性。

三、測試執(zhí)行

場景編號:001 - 基準(zhǔn)測試

基準(zhǔn)測試采用單用戶單業(yè)務(wù)場景的執(zhí)行方式。測試時(shí)間盡可能長,盡量執(zhí)行多次(通常建議3次以上),取相對穩(wěn)定的結(jié)果,目的是統(tǒng)計(jì)響應(yīng)時(shí)間的取樣更多,測試結(jié)果越準(zhǔn)確。對于發(fā)現(xiàn)的異常,如果不熟悉就請開發(fā)團(tuán)隊(duì)告訴你有哪些作業(yè)任務(wù),這些作業(yè)任務(wù)的頻度是否適中。

基準(zhǔn)測試_聚合報(bào)告

基準(zhǔn)測試_ResponseTime

基準(zhǔn)測試_TPS

結(jié)論:滿足性能需求3s以內(nèi),事務(wù)正確率100%,且CPU、內(nèi)存、磁盤表現(xiàn)正常(局域網(wǎng)不考慮網(wǎng)絡(luò)影響)。測試環(huán)境檢查通過,腳本檢查通過,可以考慮對系統(tǒng)進(jìn)一步的測試。

場景編號:002 - 配置測試

先確定配置測試的目標(biāo):
(1)JVM配置
(2)Tomcat線程池配置
(3)數(shù)據(jù)庫連接池配置
(4)數(shù)據(jù)庫的一些配置

配置測試場景一般為混合場景(多個(gè)業(yè)務(wù)同時(shí)執(zhí)行)。

(1)JVM Heap大小及不同代的大小指定???Heap回收算法的選擇???(P316)
(2)Tomcat線程數(shù)配置???
(3)數(shù)據(jù)庫緩存、臨時(shí)表空間,大表水平切分,主從結(jié)構(gòu)、讀寫分離、主從備份、主主備份等???。

配置測試_聚合報(bào)告

配置測試_ResponseTime

配置測試_TPS

結(jié)論:隨著并發(fā)數(shù)的增加,響應(yīng)時(shí)間也逐漸增加,但仍然滿足3s以內(nèi)的性能指標(biāo);事務(wù)正確率100%;查看詳情、登錄、新建任務(wù)、配置任務(wù)、刪除任務(wù)各業(yè)務(wù)之比接近6:8:4:2:1;TPS未出現(xiàn)明顯拐點(diǎn);CPU、內(nèi)存、磁盤均正常。性能表現(xiàn)能夠滿足需求,系統(tǒng)性能瓶頸風(fēng)險(xiǎn)在CPU。

場景編號:003 - 負(fù)載測試

負(fù)載測試在滿足系統(tǒng)性能指標(biāo)的基礎(chǔ)上進(jìn)行測試,尋找性能的拐點(diǎn)。負(fù)載測試分為單場景混合場景。單場景有利于分析性能問題,因?yàn)榕懦似渌麡I(yè)務(wù)干擾;混合場景更貼近用戶實(shí)際使用習(xí)慣,是一個(gè)綜合的性能評估。建議先做單場景測試,再做混合場景測試。
我們一般采用二分法,如總的線程數(shù)遞增為21/42/84,當(dāng)發(fā)現(xiàn)線程增大后性能降低,再對該區(qū)間進(jìn)行二分嘗試,最后對拐點(diǎn)附近精細(xì)嘗試得到最大吞吐量。

負(fù)載測試_聚合報(bào)告

負(fù)載測試_ResponseTime

負(fù)載測試_TPS

負(fù)載測試_CPU

結(jié)論:執(zhí)行過程中,CPU首先出現(xiàn)性能瓶頸,利用率接近100%。響應(yīng)時(shí)間開始大于3s,TPS降低,出現(xiàn)失敗的事務(wù)。此時(shí)的內(nèi)存、磁盤、網(wǎng)絡(luò)均表現(xiàn)正常。此時(shí)應(yīng)優(yōu)先解決CPU的瓶頸問題,再反復(fù)進(jìn)行負(fù)載測試,直到在沒有硬件瓶頸的條件下找到系統(tǒng)的性能拐點(diǎn)。

場景編號:004 - 穩(wěn)定性測試

穩(wěn)定性測試在正常性能閥值下盡量加大負(fù)載。什么是閥值呢?比如響應(yīng)時(shí)間要求3s以內(nèi),3秒就是閥值;比如CPU利用率70%以下,70%就是閥值。假設(shè)滿足性能要求的負(fù)載是B,那么穩(wěn)定性測試時(shí)負(fù)載一般是1.5B~2B。

在此案例中我們滿足性能需求的并發(fā)量是21,那么在做穩(wěn)定性測試時(shí),并發(fā)量應(yīng)該是1.521~221即32~42之間。運(yùn)行時(shí)間原則上越長越好,慣例要求不低于8小時(shí)。有些隱藏較深的諸如內(nèi)存溢出的問題是需要長時(shí)間運(yùn)行才能反映出來的。如果各項(xiàng)性能指標(biāo)都在閥值內(nèi),且性能表現(xiàn)平穩(wěn),則可以認(rèn)為通過穩(wěn)定性測試。

除了分析響應(yīng)時(shí)間、TPS和服務(wù)器硬件性能外,我們也要關(guān)注JVM內(nèi)存回收情況,MySQL有無慢查詢等。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,279評論 2 89
  • 摘要:性能測試是指在一定硬件條件下,獲取軟件系統(tǒng)在不同的業(yè)務(wù)背景下的各種性能表現(xiàn),本文根據(jù)筆者最近所做的幾次性能測...
    測試小螞蟻閱讀 1,611評論 0 5
  • 現(xiàn)如今 我終于變做了你的模樣 將那些過往反彈到你身上 你宛若失憶的智障 譴責(zé)我的自私、冷漠與小肚雞腸
    大燕北北閱讀 192評論 0 1
  • 尊敬的各位領(lǐng)導(dǎo),各位煌親,各位來賓,大家下午好! 我是加盟商聯(lián)合會新生代分會副會長胡榜娥!首先感謝公司...
    60c5ad9c19ea閱讀 278評論 0 0
  • 一連忙了好幾天,早上爬起來補(bǔ)充能量,聽王偉分享如何「好好說話」。開頭聽到古人的智慧就醒了,一句話在出口之前,先思考...
    品思陳資璧Phoebe閱讀 311評論 0 0

友情鏈接更多精彩內(nèi)容