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.*
Jmeter-BeanShell的使用介绍的更多相关文章
- jmeter BeanShell实例-----两个变量之间的断言对比
jmeter BeanShell实例-----两个变量之间的断言对比 在jmeter的中,断言没法对两个变量的进行对比后判断,只能使用Bean Shell断言来进行,总是有人来问怎么写呢.这里写一个简 ...
- JMeter学习工具简单介绍
JMeter学习工具简单介绍 一.JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序).它可以用来测试静态 ...
- (jmeter内置可调用的变量)jmeter beanShell断言
用户可以在jmeter- “beanShell断言”中自定义断言.自由灵活的用脚本实现自己的断言 beanShell断言接口介绍 在beanShell中直接可以调用的变量,无需加前缀. 1.lo ...
- jmeter BeanShell实例-----两个变量之间的断言对比(转)
jmeter BeanShell实例-----两个变量之间的断言对比 在jmeter的中,断言没法对两个变量的进行对比后判断,只能使用Bean Shell断言来进行,总是有人来问怎么写呢.这里写一个简 ...
- Jmeter Beanshell 编程简介
简介 Jmeter除了提供丰富的组件以外,还提供脚本支持,可通过编写脚本来丰富Jmeter,实现普通组件无法完成的功能.Beanshell是一种轻量级的Java脚本语言,完全符合Java规范,并且内置 ...
- JMeter性能监测插件介绍(三)
JMeter 性能监测插件介绍 压力测试过程中,能够随时对负载服务器的健康状况的把控是相当重要的,有了这些数据,我们才能准确分析出服务器负载瓶颈.JMeter 插件包现在能够支持服务器监控,可以在所有 ...
- jmeter基本组成原件介绍
jmeter基本组成原件介绍 参考地址:https://wenku.baidu.com/view/d4986ca2aaea998fcc220ec1.html 从性能工具的原理划分: Jmeter工具和 ...
- Jmeter 结构、原理介绍
Jmeter结构.原理介绍 一.Jmeter 简介 1.是基于java语言的开源的应用软件. 2.可以进行接口测试.性能测试.接口及性能的自动化测试. 二.Jmeter体系结构 元件:可以理解为每一个 ...
- jmeter beanshell
//获取返回数据 String json = prev.getResponseDataAsString(); ///加入变量vars.put("restr",json); //获取 ...
- Testing Complex Logic with JMeter Beanshell
BeanShell是最先进的JMeter内置组件之一.JMeter具有丰富的内置插件,可满足性能测试的许多需求.例如,在编写一些复杂的测试时,您可能需要一些额外的脚本.在这种情况下,值得使用Beans ...
随机推荐
- sklearn实践_普通线性回归
import pandas as pd import numpy as np import matplotlib.pyplot as plt data = pd.read_csv(r"C:\ ...
- LeetCode Predict the Winner
原题链接在这里:https://leetcode.com/problems/predict-the-winner/description/ 题目: Given an array of scores t ...
- python模块导入的问题
从模块导入函数时,通常可以使用 import somemodule 或者 from somemodule import somefunction 或者 from somemodule import s ...
- Azure上采用Powershell从已有的VHD创建VM
刚刚的一篇Blog采用Json Template的方式从已有的VHD创建了一台新的VM.由于Json Template封装的比较好,可以改的内容不多. 下面将介绍通过用Powershell来从已有的V ...
- jQuery判断 form表单提交时一些文本框的判断
一: form表单提交时如果表单里有input标签为空那么不提交form表单. <head> <script type="text/javascript"> ...
- LINUX必须记住的指令
写在前面: 1,<你一定要知道的关于Linux文件目录操作的12个常用命令>是楼主收集的关于Linux文件目录操作最常用的命令,包括文件或目录的新建.拷贝.移动.删除.查看等,是开发人员操 ...
- Python:序列的copy() 方法和 copy 模块
转于:Python中copy和deepcopy中的区别 博主:assan 一.序列中的 copy() 方法 # 此方法为浅度复制:复制的数会随着被复制数的嵌套序列的元素的改变而改变: # 功能:将一个 ...
- MySQL mysqldump与innobackupex 组合备份
此脚本,在01点进行一次逻辑全备份,03点进行一次物理全备份,中午12点进行一次增量物理备份 #! /bin/bash #05 01,03,12 * * * mysql /data/mysqldata ...
- ARRINC424—MORA(GRID)格式
每一整数经.纬度为一格,每格MORA值3位数字,表示百英尺.无法获知MORA值得网格一UNK表示. 经纬网格起始点坐标,每个网格从左下角开始计数,每经纬度一度切分一个网格.每行数据代表某一维度上往东或 ...
- Http服务端
第一,使用node提供的http模块 var http=require('http'); 第二,创建一个服务器实例 通过http的createServer()方法. var server=http.c ...