JMeter是什么
http://jmeter.apache.org/,性能測(cè)試工具。
- 基于
Java
的開源
性能測(cè)試工具 - 支持測(cè)試的協(xié)議
- Web - HTTP, HTTPS
- SOAP / REST
- FTP
- Database
- LDAP
- Message-oriented middleware (MOM)
- Native commands or shell scripts
- TCP
- 支持多線程并發(fā)
- 完善的GUI界面,用于快速設(shè)計(jì)測(cè)試計(jì)劃和調(diào)試測(cè)試腳本
- 完整測(cè)試結(jié)果,便于結(jié)果分析
- JMeter不會(huì)執(zhí)行HTML中的JavaScript腳本
BeanShell是什么
- 基于
Java
的免費(fèi)解釋器 - 松散類型的腳本語言
- 動(dòng)態(tài)執(zhí)行的Java代碼
- 只有150K大小的JAR包
BeanShell既然可以編寫Java代碼,那么我們就可以在使用JMeter測(cè)試的過程中,使用Java語法功能,且支持關(guān)鍵字
高亮
,進(jìn)行業(yè)務(wù)邏輯的處理,進(jìn)而達(dá)到場(chǎng)景
功能的設(shè)計(jì)。
BeanShell與JMeter的化學(xué)反應(yīng)
JMeter提供5
種方式使用BeanShell
- BeanShell Sampler
直接使用BeanShell來編寫樣例
。 - BeanShell PreProcessor
在樣例
觸發(fā)前,使用BeanShell進(jìn)行加工處理。 - BeanShell PostProcessor
在樣例
觸發(fā)后,使用BeanShell進(jìn)行加工處理。 - BeanShell Assertion
使用BeanShell進(jìn)行斷言
處理。 - BeanShell Listener
使用BeanShell做監(jiān)聽器
。
JMeter提供的BeanShell功能,遍布整個(gè)測(cè)試的
各個(gè)階段
。只要你需要的時(shí)候,它都可以直接拿
來用。
變量處理
- JMeter中已有變量名
name
,值為testBeanShell
變量 - 配制BeanShell的
Parameters
,傳入?yún)?shù)test
。并編寫
變量?jī)?nèi)容輸出代碼,log不是Java內(nèi)置的對(duì)象,但是JMeter的內(nèi)置對(duì)象。
log.info("Test is " + vars.get("test"));
-
執(zhí)行測(cè)試,便可查看出變量?jī)?nèi)容的輸出
變量?jī)?nèi)容的輸出
通過上面的BeanShell腳本,我們可以發(fā)現(xiàn)BeanShell可以直接獲取JMeter的變量?jī)?nèi)容。下面我們針對(duì)變量?jī)?nèi)容進(jìn)行加工,看下如何實(shí)現(xiàn)
- 將
test
變量的值獲取后,再隨機(jī)在原變量值后追加
隨機(jī)數(shù),并再次賦值給test
變量
log.info("Init test: " + vars.get("test"));
Random ran = new Random();
int x = ran.nextInt(6);
vars.put("test",vars.get("test")+x);
log.info("Random test: " + vars.get("test"));
-
執(zhí)行測(cè)試,查看結(jié)果
加工后的變量結(jié)果
使用自定義的JAR包
-
Java
源文件appendString
類中有方法append
: 將參數(shù)的內(nèi)容追加-Append
后,返回追加后
的字符串
package com.test;
public class appendString {
public String append(String sourceString){
return sourceString + "-Append";
}
}
-
生成Jar包
利用其它工具將此源文件打包成
Jar
文件 -
JMeter中
引用
Jar包功能將
Jar
包復(fù)制
至JMeter下方lib/ext
下 重新打開
JMeter,進(jìn)入BeanShell
中,添加調(diào)試代碼:輸出加工
后的內(nèi)容
import com.test.appendString;
log.info(new appendString().append("111"));
- 查看JMeter的日志輸出:加工后的字符為
111-Append
JarWithBeanShell
通過上面的方法,我們可以看出,通過JMeter與BeanShell的結(jié)合,可以將外部的代碼與JMeter結(jié)合,也可直接使用BeanShell來操作JMeter內(nèi)部的數(shù)據(jù)處理。
下面我們?cè)倏聪?code>BeanShell提供了哪些內(nèi)置的操作對(duì)象
BeanShell的內(nèi)置對(duì)象
對(duì)象名 | 存在元素 | 功能 |
---|---|---|
log | BeanShell Sampler BeanShell PreProcessor BeanShell PostProcessor BeanShell Assertion BeanShell Listener |
日志信息輸出 |
Label | BeanShell Sampler | 樣例 |
FileName | BeanShell Sampler | 文件名 |
Parameters | BeanShell Sampler | 參數(shù) |
bsh.args | BeanShell Sampler | BeanShell腳本 |
SampleResult | BeanShell Sampler BeanShell Assertion BeanShell Listener |
樣例結(jié)果 |
ResponseCode | BeanShell Sampler BeanShell Assertion |
返回的狀態(tài)碼 |
ResponseMessage | BeanShell Sampler BeanShell Assertion |
返回信息 |
IsSucess | BeanShell Sampler | 是否成功 |
ctx | BeanShell Sampler BeanShell PreProcessor BeanShell PostProcessor BeanShell Assertion BeanShell Listener |
JMeter的上下文 |
vars | BeanShell Sampler,BeanShell PreProcessor BeanShell PostProcessor BeanShell Assertion BeanShell Listener |
變量操作 |
props | BeanShell Sampler BeanShell PreProcessor BeanShell PostProcessor BeanShell Assertion BeanShell Listener |
JMeter屬性 |
prev | BeanShell PreProcessor BeanShell PostProcessor BeanShell Listener |
樣例的前置 結(jié)果讀取
|
sampler | BeanShell PreProcessor BeanShell PostProcessor |
當(dāng)前樣例 |
Response | BeanShell Assertion | 返回的對(duì)象,讀-寫 |
Failure | BeanShell Assertion | 是否失敗 |
FailureMessage | BeanShell Assertion | 失敗信息 |
ResponseData | BeanShell Assertion | 返回?cái)?shù)據(jù)體,字節(jié)形式 |
ResponseHeader | BeanShell Assertion | 返回信息頭 |
RequestHeader | BeanShell Assertion | 請(qǐng)求信息頭 |
SampleLabel | BeanShell Assertion | 樣例名稱 |
SampleData | BeanShell Assertion | 發(fā)送至服務(wù)器的數(shù)據(jù) |
SampleEvent | BeanShell Listener | 讀取當(dāng)前樣例的事件 |
有了上面的操作對(duì)象,可以在測(cè)試過程中,對(duì)測(cè)試的內(nèi)容,進(jìn)行更加詳細(xì)的
加工
。
完善的對(duì)象使用方法,可查閱JMeter官方API文檔
后期應(yīng)用擴(kuò)展
- 將請(qǐng)求的數(shù)據(jù)進(jìn)行
個(gè)性化
加工 - 將獲取的數(shù)據(jù)進(jìn)行擴(kuò)展
保存
-
完善
業(yè)務(wù)場(chǎng)景