前言
我們在做性能測試的時候,大多數(shù)時候不僅僅是對一兩個接口單獨的測試,而是需要在一個盡可能體現(xiàn)真實應(yīng)用場景的情況下,了解到各個接口的響應(yīng)和各服務(wù)器的負載情況。這時候,場景的設(shè)計就變得尤為重要。模擬出更真實的使用場景,能使得測試結(jié)果更加可信。本文以在線考試系統(tǒng)作為被測系統(tǒng),Jmeter作為測試工具為例,來談進行場景設(shè)計時需要考慮的問題和解決方案。
流程梳理
一個完整的場景,一般包含好幾個步驟,比如在線考試,主要的操作流程有登錄系統(tǒng)、進入考試頁面、開始答題、保存答案和提交試卷。確保測試腳本中包含場景的各個步驟。
思考時間
對于真實的用戶而言,他們在進行各種操作時,操作與操作之間肯定會有一些停頓。所以,在測試腳本設(shè)計時,我們也應(yīng)該在一些請求之間加入一些停頓時間,我們通常稱為思考時間(think time)。每個用戶的停頓時間通常不是一模一樣的,比如,用戶在作答題目時,每完成一道題目,到答下一道題的時間肯定是不同的。因此,我們可以將思考時間隨機化,以此來達到最真實的效果。在Jmeter中可以使用高斯隨機定時器(Gaussian Random Timer)來實現(xiàn)思考時間隨機化,可以讓思考時間分布在一定范圍之內(nèi)。
非必要和可重復(fù)性操作的隨意性
在一些測試場景中,不是每個步驟都是必須執(zhí)行的,執(zhí)行的次數(shù)和時間間隔也是不一定的。比如考試中的保存答案這個步驟,有的用戶在考試過程中,可能不會用到保存答案的功能,直接作答完提交試卷即可。而有些更謹(jǐn)慎的人,可能每答幾道題就要去點一下保存按鈕。對于這種場景,Jmeter的隨機控制器(Random Controller)可以實現(xiàn),在該控制器下的請求將被隨機地執(zhí)行。
用戶數(shù)和并發(fā)時間
用戶數(shù)和并發(fā)時間往往是根據(jù)測試需求來設(shè)定。比如測試場景是在5分鐘內(nèi),2000個考生陸續(xù)登錄線上考試系統(tǒng)開始考試,那么,用戶數(shù)和并發(fā)時間就可以設(shè)定為2000和300s。但是整個流程中的不同步驟,可能的并發(fā)時間是不同的,比如登錄請求是在5分鐘內(nèi)并發(fā),但是最后的提交試卷的并發(fā)時間要短得多,因為在非常重要的考試?yán)?,用戶可能都會拖到最后的時間才會交卷,還有就是很多考試系統(tǒng)都有到時間后自動交卷的功能,因此,最后的并發(fā)時間可能只有幾秒。遇到這種情況,可以使用Jmeter的同步計時器(Synchronizing Timer)來實現(xiàn)這種集合點的功能。只要設(shè)置一個數(shù)值,運行到在這個計時器下的請求會等待積攢到設(shè)定數(shù)值的數(shù)量后,再一起向服務(wù)器發(fā)起請求。這樣便準(zhǔn)確模擬了一定數(shù)量用戶一起交卷的情況。
結(jié)語
本文給出了性能測試場景設(shè)計中的幾個常見問題,并簡略介紹了Jmeter的幾個組件(高斯隨機定時器、隨機控制器和同步計時器)來實現(xiàn)相應(yīng)場景,如需更多信息,請查閱Jmeter官方使用手冊。
參考文獻:
http://jmeter.apache.org/usermanual/component_reference.html#Gaussian_Random_Timer
http://jmeter.apache.org/usermanual/component_reference.html#Random_Controller
http://jmeter.apache.org/usermanual/component_reference.html#Synchronizing_Timer