用Jmeter編寫一個較復雜的測試腳本

測試工具

JMeter 4.0

場景描述

  1. 公司是某電商網(wǎng)站,測試Search框在用戶可以輸入關(guān)鍵字后所坯,返回一些相應的關(guān)鍵字或者商品信息等钦讳。
  2. 用戶在輸入字符時,每隔0.5秒停頓一次鳄逾,直到字符輸入完畢;
  3. 用戶輸入的每一個字符都會觸發(fā)JS請求Service進行處理灵莲,并返回結(jié)果雕凹;
  4. 長短皆有,有空格和特殊符號政冻;

測試場景

由提供一些關(guān)鍵字作為測試數(shù)據(jù)枚抵;

Web Server & Service端

常規(guī)場景

  1. 輸入這些關(guān)鍵字,查看其返回的結(jié)果明场;使用用戶最終輸入的完整關(guān)鍵字汽摹,獲取性能指標;(其作用是模擬用戶使用粘貼復制的方式苦锨,查詢的用戶行為)
  2. 精確模擬用戶行為逼泣,當用戶每次輸入關(guān)鍵字的字符時,發(fā)送請求產(chǎn)生大壓力下的情況舟舒。并且在每次輸入字符后拉庶,使用高斯分布計時器,延遲0.5秒魏蔗,偏差值為0.1秒的方式來模擬砍的。腳本編寫時,外層使用Transaction controller莺治,內(nèi)層使用Foreach controller的組合來模擬這一行為方式廓鞠;
  3. 采用20,100 User不同負載下持續(xù)10 min的測試方法

異常場景

  1. 增壓測試;(不斷增加壓力谣旁,直至達到性能極限)
  2. 定時器定點發(fā)送請求床佳;(不斷加壓,使用類似于秒殺活動場景來檢測服務器)

測試目的

  1. 通過性能測試建立性能基線榄审;
  2. 監(jiān)控服務器在較大壓力下的工作情況砌们,查找是否有隱藏的弱點;
  3. 分析測試結(jié)果數(shù)據(jù)搁进,確保服務器集群的工作負荷預期需求浪感;
  4. 為線上服務維護或異常處理時的策略提供依據(jù);

腳本編寫

為了模擬用戶行為所編寫的腳本較為復雜饼问,里面涉及:

  • BeanShell的腳本編寫影兽,由于還是有java基礎(chǔ),所以編寫本身并不難莱革;
  • 計時器的應用峻堰,使用高斯計時器(正態(tài)分布計時器)
  • 使用Transaction Controller和ForEach Controller進行測試;

這里面有幾個小坑:

  1. 腳本編寫思路是將keyword得到之后盅视,將其按照長度分割成若干子串:

以keyword+key為例:
其分解成:
k
ke
key
keyw
keywo
keywor
keyword
keyword+
keyword+k
keyword+ke
keyword+key

因此需要使用foreach controller來包含HTTP Request Sampler捐名。

  • 注意,但外層的BeanShell腳本編寫不能使用BeanShell PreProcesser來編寫闹击,因為這樣它就不會使內(nèi)層的HTTP Request工作镶蹋,原因不明等以后調(diào)試源代碼才清楚,所以請使用BeanSampler來做這個事情赏半。

  • 在代碼中如果使用字符串賦值梅忌,涉及到它本身的變量使用的,需要在變量上加雙引號除破。
    如圖:


    JmeterScript_UserBehavior_Overview.png
  • 如上圖中的方法keyWordLength()是個聲明牧氮;如果需要調(diào)用就必須在腳本的下方書寫keyWordLength();否則腳本并沒有運行;

  1. 通過閱讀Beanshell Sampler中的代碼可以知道瑰枫,我最終需要的變量名為keyWd_{子字符串下標}踱葛,這個在jmeter的控制器中,只能使用ForEach Controller光坝。它有三個變量:
  • Input variable prefix尸诽,讓你使用變量名的下標;
  • Start index for loop (exclusive)盯另,這個就是你下標開始的位置性含,但是特別坑的是,這個值是被排除在外的鸳惯,所以如果是從0開始商蕴,我只能寫-1叠萍;
  • End index for loop (inclusive),這個就是下標的最后一位绪商,按照腳本中設置的值苛谷,我應該寫${keyWdLength}-1;
  • Add "_" before number? 這個請勾選格郁,在未知長度的循環(huán)中腹殿,這個控制器顯得那么得雪中送炭;
JmeterScript_Foreach_Controller.png
  1. 因為Foreach controller中為變量自動加下劃線例书,就省去了變量拼接的問題锣尉。實際上,沒有這個控件可能要寫更復雜的腳本才行决采。


    JmeterScript_Http_request.png
  1. 由于關(guān)鍵字存在空格自沧,因此我一開始將關(guān)鍵字中的空格統(tǒng)一轉(zhuǎn)成了%20。但是在實際請求時:

HttpClient會報錯java.net.URISyntaxException: Malformed escape pair at index XX....织狐;

原因在于URL中的%是特殊符號暂幼,我在腳本中的寫法是將關(guān)鍵字逐一拼接,因此會有一個關(guān)鍵字剛好是只帶有%移迫,這是非法的旺嬉。因此,才會報錯厨埋。
解決方法:在上圖中的Parameters頁中可以勾選“Encode?”邪媳。

  1. 把圖中的Simple Controller改成Transaction Controller就可以了。在較復雜場景中荡陷,報告中生成TPS結(jié)果是更有價值的數(shù)據(jù)雨效。

剩下的腳本就比較簡單了,我就不再贅述废赞。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末徽龟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子唉地,更是在濱河造成了極大的恐慌据悔,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耘沼,死亡現(xiàn)場離奇詭異极颓,居然都是意外死亡,警方通過查閱死者的電腦和手機群嗤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門菠隆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事骇径∏。” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵既峡,是天一觀的道長羡榴。 經(jīng)常有香客問我碧查,道長运敢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任忠售,我火速辦了婚禮传惠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘稻扬。我一直安慰自己卦方,他們只是感情好,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布泰佳。 她就那樣靜靜地躺著盼砍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪逝她。 梳的紋絲不亂的頭發(fā)上浇坐,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音黔宛,去河邊找鬼近刘。 笑死,一個胖子當著我的面吹牛臀晃,可吹牛的內(nèi)容都是我干的觉渴。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼徽惋,長吁一口氣:“原來是場噩夢啊……” “哼案淋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起险绘,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤踢京,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后隆圆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體漱挚,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年渺氧,在試婚紗的時候發(fā)現(xiàn)自己被綠了旨涝。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖白华,靈堂內(nèi)的尸體忽然破棺而出慨默,到底是詐尸還是另有隱情,我是刑警寧澤弧腥,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布厦取,位于F島的核電站,受9級特大地震影響管搪,放射性物質(zhì)發(fā)生泄漏虾攻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一更鲁、第九天 我趴在偏房一處隱蔽的房頂上張望霎箍。 院中可真熱鬧,春花似錦澡为、人聲如沸漂坏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽顶别。三九已至,卻和暖如春拒啰,著一層夾襖步出監(jiān)牢的瞬間驯绎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工图呢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留条篷,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓蛤织,卻偏偏與公主長得像赴叹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子指蚜,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時...
    歐辰_OSR閱讀 29,386評論 8 265
  • 1.測試與軟件模型 軟件開發(fā)生命周期模型指的是軟件開發(fā)全過程乞巧、活動和任務的結(jié)構(gòu)性框架。軟件項目的開發(fā)包括:需求摊鸡、設...
    Mr希靈閱讀 21,957評論 7 278
  • 去年12月得知校內(nèi)的場地不能用绽媒,好像天塌了一樣,找了幾十個酒店的資料免猾,和憶南一起四處看場地拿了一堆菜單回家是辕,幸好有...
    麻吉馬閱讀 409評論 0 0
  • 過了12點,想著還是這點啥記錄些東西猎提。 肚子咕嚕咕嚕的叫获三,持續(xù)了一周的“折磨”,一點都沒消停「斫蹋總有一股氣上竄下跳棺聊,...
    我是胡小白閱讀 154評論 0 1
  • 胖子,那天晚上你告訴我將來想做編導后贞谓,我回來想了些東西限佩,也想和你交流交流我的想法。 小的時候受家人的影響裸弦,再加上我...
    鳶圖閱讀 509評論 0 1