jmeter中使用Beanshell处理多个枚举类型参数

使用Jmeter执行web系统的测试,在向服务器发送请求时,附在请求上面的参数类型有很多种。比如说数值型(包括整数、小数)、字串类型等等。如果说系统没有规定参数值的取值范围,那么作为测试人员,我们一般都会在考虑实际业务场景的情况下可以利用jmeter的函数助手予以解决。比如用户在前端页面操作一个发表帖子的场景,其中帖子标题、帖子内容这些都可以通过函数助手使用随机字串来完成,测试人员只需要考虑参数值长度就可以了。特殊的情况是,一些参数值同样是数值型或者字串,但是系统已经明确指定了只能从某几个值之中选择(前端表现为下拉列表形式),并且,一个请求需要附加多个这样类型的参数,从测试用例设计的角度考虑,此时需要对这样的参数值随机组合,对于这种需求,jemeter中能满足要求的只有Beanshell。
如下,是本人这次使用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测试,不管是接口测试还是性能压力测试都有很大的作用,对于测试计划中各个步骤的创建都需要细心、耐心。而对于一些特殊过程的处理则还需要更加灵活的方式了。

继续努力,学无止境。

你可能感兴趣的:(性能测试)