定時器的種類
定時器的作用域
1捕传、定時器是在每個sampler(采樣器)之前執(zhí)行的初狰,而不是之后(無論定時器位置在sampler之前還是下面)密浑;
2亭珍、當執(zhí)行一個sampler之前時,所有當前作用域內(nèi)的定時器都會被執(zhí)行宣谈;
3愈犹、如果希望定時器僅應(yīng)用于其中一個sampler,則把定時器作為子節(jié)點加入闻丑;
4漩怎、如果希望在sampler執(zhí)行完之后再等待,則可以使用Test Action嗦嗡;
BeanShell定時器(BeanShell Timer)
這個定時器勋锤,一般情況下用不到,但它可以說是最強大的酸钦,因為可以自己編程實現(xiàn)想要做的任何事情怪得,例如:希望在每個線程執(zhí)行完等待一下,或者希望在某個變量達到指定值的時候等待一下卑硫。
這里給大家介紹下BeanShell:
BeanShell是一種松散類型的腳本語言(這點和JS類似),一種完全符合java語法的java腳本語言蚕断,并且又擁有自己的一些語法和方法欢伏。
固定吞吐量定時器(Constant Throughput Timer)
可以讓JMeter以指定數(shù)字的吞吐量(即指定TPS,只是這里要求指定每分鐘的執(zhí)行數(shù)亿乳,而不是每秒)執(zhí)行硝拧。
吞吐量計算的范圍可以為指定為當前線程、當前線程組葛假、所有線程組等范圍障陶,并且計算吞吐量的依據(jù)可以是最近一次線程的執(zhí)行時延。這種定時器在特定的場景下聊训,還是很有用的
JSR223定時器(JSR223 Timer)
在jemter最新的版本中抱究,新增了這個定時器,可以這么理解带斑,這個定時器相當于BeanShell定時器的“父集”鼓寺,它可以使用java勋拟、JavaScript、beanshell等多種語言去實現(xiàn)你希望完成的事情妈候;
我們都知道jemter是一種開源的純java工具敢靡,可以自己構(gòu)件各個組件,jar包去完成各種事情
泊松隨機定時器(Poisson Random Timer)
這個定時器在每個線程請求之前按隨機的時間停頓苦银,大部分的時間間隔出現(xiàn)在一個特定的值啸胧,總的延遲就是泊松分布值和偏移值之和。
上面表示暫停時間會分布在100到400毫秒之間:
(1)Lambda(in milliseconds):蘭布達值
(2)Constant Delay Offset(in milliseconds):暫停的毫秒數(shù)減去隨機延遲的毫秒數(shù)
同步定時器(Synchronizing Timer)
這個定時器和loadrunner當中的集合點(rendezvous point)作用相似幔虏,其作用是:阻塞線程纺念,直到指定的線程數(shù)量到達后,再一起釋放所计,可以瞬間產(chǎn)生很大的壓力(人多力量大- -哈哈D恰)
(1)Number of Simulated Users to Group by:模擬用戶的數(shù)量,即指定同時釋放的線程數(shù)數(shù)量
(2)Timeout in milliseconds:超時時間主胧,即超時多少毫秒后同時釋放指定的線程數(shù)
均勻隨機定時器(Uniform Random Timer)
和高斯隨機定時器的作用差異不大叭首,區(qū)別在于延時時間在指定范圍內(nèi)且每個時間的取值概率相同,每個時間間隔都有相同的概率發(fā)生踪栋,總的延遲時間就是隨機值和偏移值之和焙格。
下面表示的是隨機延遲時間的最大值是100毫秒:
(1)Random Delay Maximum(in milliseconds):隨機延遲時間的最大毫秒數(shù)
(2)Constant Delay Offset(in milliseconds):暫停的毫秒數(shù)減去隨機延遲的毫秒數(shù)
固定定時器(Constant Timer)
如果你需要讓每個線程在請求之前按相同的指定時間停頓,那么可以使用這個定時器夷都;需要注意的是眷唉,固定定時器的延時不會計入單個sampler的響應(yīng)時間,但會計入事務(wù)控制器的時間囤官。
對于“java請求”這個sampler來說冬阳,定時器相當于loadrunner中的pacing(兩次迭代之間的間隔時間);
對于“事務(wù)控制器”來說党饮,定時器相當于loadrunner中的think time(思考時間:實際操作中肝陪,模擬真實用戶在操作過程中的等待時間)。
高斯隨機定時器(Gaussian Random Timer)
如需要每個線程在請求前按隨機時間停頓刑顺,那么使用這個定時器氯窍,上圖表示暫停時間會分布在100到400之間,計算公式參考:Math.abs((this.random.nextGaussian() * 300) + 100)