[测试]Jmeter-BeanShell的使用介绍

最近学习使用了jmeter来对接口进行测试。使用jmter进行接口测试,有时候需要编写一些BeanShell脚本语言,或者利用BeanShell调用自己的工具类,来完成jmeter基本功能中无法实现的功能,下面将对BeanShell Sampler及其相关使用作一个简要的介绍。

一、什么是BeanShell

BeanShell是一个小型嵌入式Java源代码解释器,具有对象脚本语言特性,能够动态地执行标准JAVA语法,并利用在JavaScript和Perl中常见的的松散类型、命令、闭包等通用脚本来对其进行拓展。BeanShell不仅仅可以通过运行其内部的脚本来处理Java应用程序,还可以在运行过程中动态执行你java应用程序执行java代码。因为BeanShell是用java写的,运行在同一个虚拟机的应用程序,因此可以自由地引用对象脚本并返回结果。

二.、BeanShell的特点

·完整的java语法的动态执行,java代码片段,以及松散类型的java和其他脚本。

·透明地访问所有java对象和API

·运行在四种模式:命令行,控制台,小程序,远程会话服务器。

·可以在安全约束的环境中工作

·编译器是一个小于150K的jar文件

三、BeanShell Sampler的使用

Jmeter中的BeanShell主要有:定时器BeanShell Timer、前置处理器BeanShell PreProcessor、采样器BeanShell Sampler、、后置处理器BeanShell PostProcessor、断言BeanShell、断言监听器BeanShell Listener。

下面以BeanShell Smapler为例介绍BeanShell的用法,其他的BeanShell使用方法可以用此举一反三。

(一)BeanShell Sampler创建

首先创建一个线程组


创建成功线程组后,在线程组中创建一个BeanShell Sampler。


创建成功的BeanShell Sampler如下图所示,创建成功之后可以在其中编写BeanShell脚本。


(二)获取时间戳

在Jmeter中,可以利用${__time(,)}时间戳函数来获取十位的时间戳:

此处不填入具体的访问地址,仅关注时间戳函数的使用。

使用${__time(yyyy-MM-dd-HH-mm-ss,)}可以获得yyyy-MM-dd-HH-mm-ss格式的十位的时间戳,结果如下图:

但是在具体使用中,有时候需要传送较为复杂的时间格式,如“2016-07-31T21:24:07.581Z”此时不能直接调用time函数,因此可以利用BeanShell获取当前时间。


此处运用了内置对象vars对变量进行存取操作:

·vars.get("name"):从jmeter中获得变量值

·vars.put("key","value"):数据存到jmeter变量中

若使用该程序段,在Jmeter中调用变量${str}可以获得yyyy-MM-ddTHH:mm:ss.SSSZ格式的时间,调用变量${str0}可以获得yyyy-MM-ddTHH:mm:ssZ格式的时间。

(三)BeanShell脚本使用的几种的不同的场景

以文件的读写为例,对BeanShell脚本的使用的几种不同的场景做了一个简单的总结

1. 自定义函数

在BeanShell中编写自定义函数,直接利用脚本编译器编译

程序段如下:

import java.io.BufferedReader;

import java.io.File;import java.io.FileReader;

import java.io.IOException;

import java.io.FileWriter;

import java.io.BufferedWriter; 

File file = new File("D://apache-jmeter-2.13//Meclipper_case//Users_TestCase//email.txt");        

BufferedReader reader = null;        

 String tempString = null;          

String str;       

int num;        

String str3="";        

String str2="";        

try {              

reader = new BufferedReader(new  FileReader(file));                          

tempString = reader.readLine();//tempString读文件            

reader.close();              

str=tempString.trim();//str取字符串                        

if(tempString!=null&&!"".equals(str)){            

for(int i=0;i=48 && str.charAt(i)<=57){

str2+=str.charAt(i);//str2取数字字符

}

}

//System.out.println(str2);

num=Integer.parseInt(str2);//num转换str2为int型

//System.out.println(num);

num=num+1;

//System.out.println(num);

str3= String.valueOf(num)+"@qq.com";//str3转换int型为string

//System.out.println(str3+"@qq.com");

}

}

catch (IOException e) {

e.printStackTrace();

}

finally {

if (reader != null) {

try {

reader.close();

}

catch (IOException e1) {

}

}

}

//String str4=str3+"@qq.com";

//System.out.println("str4="+str4);

try{

//File file = new File("/users/mkyong/filename.txt");

// if file doesnt exists, then create it

if (!file.exists()) {

file.createNewFile();

}

FileWriter fw = new FileWriter(file.getAbsoluteFile());

BufferedWriter bw = new BufferedWriter(fw);

bw.write(str3);

bw.close();

}catch(IOException e){

e.printStackTrace();

}

vars.put("emailtxt",str3);

其中将读取出的文件中的内容,同时写入文件,并利用内置函数vars.put("emailtxt",str3);将内容赋予变量${emailtxt},在jmeter中就能够调用该变量。在该程序中,存了以数字命名的email,如“110@qq.com”,利用读写文件,将email名+1,并使用该email进行注册。

在线程组中调用该变量:


Jmeter发送的email请求运行结果如下:

2. 调用外部java文件

如果我们已经有现成的java源文件,可以在BeanShell中直接编写和java引用外部文件时一样的语句来调用java外部文件。

还是之前读写文件的源程序,首先在eclipse中创建完整的工程,并在其中中编写相应的代码,需要注意的是引用的外部文件的返回值。

代码段如下所示:


其次,找到.java源文件的路径:


在BeanShell中引用该路径下的java源文件


3. 导入外部jar包

从上面两个场景可以知道,在BeanShell中引用外部文件和java是一样一样的,因此此处就不进行过多的描述,步骤为:

·在eclipse写好代码,然后把该类打成jar包(在类上点击右键->Export->jar file)

·把jar包放到jmeter目录\apache-jmeter-2.13\lib\ext下

·打开jmeter,添加一个http sampler,在sampler下添加一个BeanShell Sampler

·在BeanShell中的头文件中导入该jar包,例import testmail.src.hyq.utils.*

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,914评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,935评论 2 383
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,531评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,309评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,381评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,730评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,882评论 3 404
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,643评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,095评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,448评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,566评论 1 339
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,253评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,829评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,715评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,945评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,248评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,440评论 2 348

推荐阅读更多精彩内容

  • 在使用Jmeter进行接口的性能测试时,由于Jmeter 是JAVA应用,对于CPU和内存的消耗比较大,所以,当需...
    燕京博士阅读 4,162评论 0 16
  • Jmeter Bean shell 最近在学习使用 Jmeter 来进行接口测试,使用 Jmeter 提供的基础方...
    csmijo阅读 2,925评论 0 5
  • 互联网压力性能Badboy.Jmeterhttp://itopic.org/jmeter-http-tcp.htm...
    燕京博士阅读 2,886评论 0 20
  • jmeter中有个元件叫做断言(Assertion),它的作用和loadrunner中的检查点类似; 用于检查测试...
    maple_若尘阅读 1,068评论 0 1
  • 一、基本概念 1.测试计划是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。 2.线程...
    Leo_0626阅读 2,269评论 0 10