您的位置:軟件測試 > 開源軟件測試 > 開源性能測試工具 > Jmeter
Jmeter使用指南
作者:網(wǎng)絡轉(zhuǎn)載 發(fā)布時間:[ 2013/3/27 14:48:57 ] 推薦標簽:

  通常情況下如果我們希望在每次循環(huán)中都發(fā)出不同的請求,那么可以將可能的請求內(nèi)容放在一個文件中,并讓CSV Date Config Element從中獲取相應的值并交給變量,也可以通過BeanShell Sampler用腳本來自己定制變量的值(注意不能使用Pre Processor中的BeanShell PreProcessor來定制變量,Pre Processor是用來修改請求中的域的,這個動作發(fā)生在請求被創(chuàng)建以后。也是說如果我們在BeanShell PreProcessor中定義了一個變量,然后寫在請求域中,那么結(jié)果是JMeter先看到了一個沒有被賦值的變量,然后把這個${變量名}式子當作字符串處理,然后再執(zhí)行BeanShell PreProcessor。這一點是很多人容易犯錯誤的地方),也可以使用Pre Processor直接修改請求中的域,還可以在請求域中寫入一個JMeter函數(shù),直接生成需要的值。

  在有些應用中,我們希望下一個請求的內(nèi)容依賴于之前的請求。那么我們可以通過Post Processor將響應中的有用信息抽取出來,然后賦值給一個變量,以便下次使用。

5. JMeter中的屬性

  在JMeter中有Property的概念,他們通常有兩種用處:首先他們代表了JMeter的配置信息(存在JMeter目錄下的bin/jmeter.properties);其次他們可以被用來作為MemCache使用,以便線程間能夠通信(Properties的get和put方法是線程安全的)。Property的獲取、定義、修改一般是通過JMeter函數(shù)來完成的,當然也可以通過強大的BeanShell。

  通常當我們希望多個線程之間有某種依賴關(guān)系時可以使用Property,但是這樣的需求并不多見,因為我們模擬的用戶多半都是相互獨立的,他們并不應該知道其他人在干什么。

  此外我們還可以將一些常量配置在jmeter.properties文件中,以便在測試中隨時使用

  6. JMeter中的函數(shù)

  有的時候我們需要執(zhí)行一些簡單的操作(例如生成一個隨機數(shù))而又不希望編寫B(tài)eanShell的Code,那么可以考慮使用JMeter中內(nèi)置的一些函數(shù)。這些函數(shù)的格式通常為${__函數(shù)名(參數(shù)1,參數(shù)2...)},他們有兩種方式來返回自己的執(zhí)行結(jié)果:一種是直接返回,也是說JMeter會在執(zhí)行該函數(shù)后用函數(shù)的返回結(jié)果來替換原來調(diào)用函數(shù)的字符串(例如假設(shè)${__method(1,2)}返回world,那么如果我們在域中寫hello ${__method(1,2)},則實際的結(jié)果是hello world)。另一種是通過參數(shù)(通常是后一個)指定一個變量后,JMeter會將執(zhí)行結(jié)果存入該變量。具體使用哪種方式獲得結(jié)果是根據(jù)不同的函數(shù)而定的,JMeter提供了一個強大的函數(shù)生成器(Options菜單中的Function Helper Dialog選項),其中列出了所有的方法以及可能的函數(shù),并且有方便的幫助文檔,用戶可以通過該生成器來生成所需的函數(shù)。

  這里有必要再次強調(diào)JMeter讀入一個域(任何一個可以填寫內(nèi)容的空格)的過程:當JMeter讀入一個域中的字符串后,會首先查看其中的是否存在能夠匹配${...}的字符串,如果有則遞歸地解析這個${...}中的字符串,直到括號中的字符串不再包含括號為止。然后再解析這個${...}是否為一個函數(shù)或變量,如果是則用其結(jié)果覆蓋原來的${...}字符串,直至將整個字符串解析完畢。例如在輸入欄中輸入hello ${__method(${num},2)},而num變量的值為1,則這個字符串首先被轉(zhuǎn)化為hello ${__method(1,2)},然后由于${__method(1,2)}的值為world,則終這個域中的內(nèi)容為hello world。

  掌握了以上內(nèi)容后基本可以將JMeter中的函數(shù)和變量運用自入了,而讀者所需做得事情只是查看手冊了解那些函數(shù)能夠提供何種功能。(注意有些函數(shù)是不能放入一些特殊的域中的,例如${__threadNum}不能放在Test Plan的變量定義或者User Defined Element中的變量定義域中,具體原因手冊上講的很明白)

  7. JMeter中的BeanShell

  在多數(shù)情況下,JMeter提供的功能是不夠我們使用的,我們的測試用例中可能會存在一些比較復雜的邏輯,而這些邏輯又不發(fā)通過簡單的函數(shù)來實現(xiàn),那么我們必須動用強大的BeanShell了(JMeter有一些元素專門用于在測試的不同地方加入BeanShell腳本,如BeanShell Sampler)。不幸的是,JMeter的手冊中并沒有介紹BeanShell如何使用,而是把責任全部推給了BeanShell的網(wǎng)站,BeanShell的網(wǎng)站中的確有完整的BeanShell使用手冊,但是我們總不希望為了做測試又去學習一個腳本語言,因此這里給出了一些BeanShell的簡單應用,如果覺得不夠的話再去查看更加復雜的應用。

  7.1 BeanShell快速上手

  BeanShell是面向Java的腳本語言,因此如果你想在完全不會BeanShell的前提下使用他,那么直接編寫Java code可以了。需要注意的是,BeanShell支持若類型的變量,也是不用指定變量類型,只要給他賦值好了,BeanShell知道這個變量的類型。無論這個若類型變量在哪里被使用,其后的代碼都能訪問這個變量,這與強類型俄變量不同。例如:

  view plaincopy to clipboardprint?

  // Arbitrary code block

  {

  y = 2;      // Untyped variable assigned

  int x = 1;  // Typed variable assigned

  }

  print( y ); // 2

  print( x ); // Error! x is undefined.

  // Arbitrary code block

  {

  y = 2;      // Untyped variable assigned

  int x = 1;  // Typed variable assigned

  }

  print( y ); // 2

  print( x ); // Error! x is undefined.

上一頁1234下一頁
軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd