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

作者: 黄小呱 | 来源:发表于2016-07-31 22:45 被阅读16424次

    最近学习使用了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.*

    相关文章

      网友评论

      本文标题:[测试]Jmeter-BeanShell的使用介绍

      本文链接:https://www.haomeiwen.com/subject/rsqxsttx.html