jmeter中使用Beanshell处理多个枚举类型参数
2016-07-27 14:59
736 查看
使用Jmeter执行web系统的测试,在向服务器发送请求时,附在请求上面的参数类型有很多种。比如说数值型(包括整数、小数)、字串类型等等。如果说系统没有规定参数值的取值范围,那么作为测试人员,我们一般都会在考虑实际业务场景的情况下可以利用jmeter的函数助手予以解决。比如用户在前端页面操作一个发表帖子的场景,其中帖子标题、帖子内容这些都可以通过函数助手使用随机字串来完成,测试人员只需要考虑参数值长度就可以了。特殊的情况是,一些参数值同样是数值型或者字串,但是系统已经明确指定了只能从某几个值之中选择(前端表现为下拉列表形式),并且,一个请求需要附加多个这样类型的参数,从测试用例设计的角度考虑,此时需要对这样的参数值随机组合,对于这种需求,jemeter中能满足要求的只有Beanshell。
如下,是本人这次使用jmeter时,通过Beanshell处理多个枚举参数的例子:
图中总共有7个下拉列表,在点击保存的时候会将选择的值附在请求上发送到服务器。
一开始并没有考虑Beanshell,因为之前对Beanshell不熟悉。首先是尝试了CVS文件的方式,但是实际使用时才发现,由于各个枚举值数量时不一样的,在测试计划执行的时候,数量少的枚举值超出范围后取的就是空值了,明显不能达到各个参数值随机组合的要求。
接下来又尝试了用户定义变量、函数助手都无法满足要求。最后就考虑到了Beanshell,对于Beanshell基本上是一点都不了解,幸运的是,从网上搜索的信息来看Beanshell中可以使用java代码,还好,java还没忘干净。
接下来就是如何在Beanshell中实现多个参数值随机组合了。主要的过程分以下几步:
1:将每个下拉列表当做一个数组来处理,比如:
2:使用java代码编写方法,随机提取数组中的值并返回,如下:
(
可以不用写在Beanshell里面,而是保存成“.java”文件,然后再Beanshell中引用,如:
//引入java文件
//source(“E:\xxxx\GetTransParam.java”);
)
3:针对每个下拉列表定义一个参数,用以接收从步骤2返回的值,如下:
4:利用Beanshell自身的vars.put()方法将步骤3的值写入到全局变量中,如下:
(vars.put(),两个参数都是字符串,第一个参数表示变量名,第二个参数表示对应的值)
接下来,我们只需要在测试步骤中通过${va}的方式对参数进行引用就可以了。
以上4个步骤,就可以达到将多个下拉列表的值随机组合的目标了。
Jmeter作为一个开源工具,对于web测试,不管是接口测试还是性能压力测试都有很大的作用,对于测试计划中各个步骤的创建都需要细心、耐心。而对于一些特殊过程的处理则还需要更加灵活的方式了。
继续努力,学无止境。
如下,是本人这次使用jmeter时,通过Beanshell处理多个枚举参数的例子:
图中总共有7个下拉列表,在点击保存的时候会将选择的值附在请求上发送到服务器。
一开始并没有考虑Beanshell,因为之前对Beanshell不熟悉。首先是尝试了CVS文件的方式,但是实际使用时才发现,由于各个枚举值数量时不一样的,在测试计划执行的时候,数量少的枚举值超出范围后取的就是空值了,明显不能达到各个参数值随机组合的要求。
接下来又尝试了用户定义变量、函数助手都无法满足要求。最后就考虑到了Beanshell,对于Beanshell基本上是一点都不了解,幸运的是,从网上搜索的信息来看Beanshell中可以使用java代码,还好,java还没忘干净。
接下来就是如何在Beanshell中实现多个参数值随机组合了。主要的过程分以下几步:
1:将每个下拉列表当做一个数组来处理,比如:
String[] aaa = {"ad","de","wd"}; int[] bbb = {240,360,480,720,1080,2160}; int[] ccc = {12,15,25,30,60}; int[] ddd = {4,5,7}; int[] eee = {86,125,150,175,200,250,300,350,400,500,600,700,800,1000,1200,1500,2000,3000,4000,10000,12000,14000,16000}; int[] fff = {4,5}; int[] ggg = {1,2,3,4,5,6,7,8,9,10};
2:使用java代码编写方法,随机提取数组中的值并返回,如下:
(
可以不用写在Beanshell里面,而是保存成“.java”文件,然后再Beanshell中引用,如:
//引入java文件
//source(“E:\xxxx\GetTransParam.java”);
)
import java.util.Random; Random random = new Random(); //输入的是int类型的数组,返回的是int数据 public int transParam(int len,int[] params) { int index = random.nextInt(len); return params[index]; } //输入的是String类型的数组,返回的是string数据 public String transParam(int len, String[] params){ int index = random.nextInt(len); return params[index]; }
3:针对每个下拉列表定义一个参数,用以接收从步骤2返回的值,如下:
String a = transParam(aaa.length,aaa); int b = transParam(bbb.length,bbb); int c = transParam(ccc.length,ccc); int d = transParam(ddd.length,ddd); int e = transParam(eee.length,eee); int f = transParam(fff.length,fff); int g = transParam(ggg.length,ggg);
4:利用Beanshell自身的vars.put()方法将步骤3的值写入到全局变量中,如下:
(vars.put(),两个参数都是字符串,第一个参数表示变量名,第二个参数表示对应的值)
vars.put("va",a); vars.put("vb",b.toString()); vars.put("vc",v.toString()); vars.put("vd",d.toString()); vars.put("ve",e.toString()); vars.put("vf",f.toString()); vars.put("vg",g.toString());
接下来,我们只需要在测试步骤中通过${va}的方式对参数进行引用就可以了。
以上4个步骤,就可以达到将多个下拉列表的值随机组合的目标了。
Jmeter作为一个开源工具,对于web测试,不管是接口测试还是性能压力测试都有很大的作用,对于测试计划中各个步骤的创建都需要细心、耐心。而对于一些特殊过程的处理则还需要更加灵活的方式了。
继续努力,学无止境。
相关文章推荐
- Android之使用Http协议实现文件上传功能
- mysql集群之MMM简单搭建
- 通晓网络测试常用命令
- Nodejs学习笔记之测试驱动
- 可以测试javascript运行效果的代码
- 使用php测试硬盘写入速度示例
- python 测试实现方法
- 如何测试端口通不通(四种方法)
- 举例详解PHP脚本的测试方法
- 使用Jasmine和Karma对AngularJS页面程序进行测试
- Php-Redis安装测试笔记
- mysql压力测试脚本实例
- JavaScript 组件之旅(四):测试 JavaScript 组件
- js简单网速测试方法完整实例
- Android App开发的自动化测试框架UI Automator使用教程
- Android触屏测试实例代码
- 解析libcurl在android下的移植、编译与测试
- 几个比较实用的JavaScript 测试及效验工具
- Spring测试 其实很简单
- Java中对AtomicInteger和int值在多线程下递增操作的测试