本文将介绍各组件相互的联系,及相似组件的介绍
1.关于断言
2.关于请求参数
3.关于JDBC
4.关于BeanSheel
关于断言
断言常用方式是:相应文本
规则通常使用Substring 这种方式json数据校验某个属性如:"IsForceSign":true
equals :这个是完全相等,用于返回结果不变的情况
contains :包含,用于断言指定关键字是否存在,比如成功 失败等
关于请求参数
1.请求参数设置方式
http请求页面Parameter 与Body Data只能选择一个,默认使用Parameter;如果接口的请求方式如json时,就要 在HTTP信息头管理中新增 Content-Type application/json ,此时的http请求参数就要在Body Data中编写json格式请求。
2.请求方式的参数化
系统目前有4个地方可以设置参数,分别介绍下。
四种方式调用的写法均为:${参数名}
2.1 测试计划 下的参数值
这里的变量通常用于全局的设置,且一个变量只有一个值(不涉及遍历,只涉及修改),特点是试用所有线程组,最先被初始化,用处是运行前的配置,如ip host等。
2.2 配置元件的用户定义变量
此变量如果被修改,则只在当前运行的线程内为最新的值,也就是说其他线程也能用只是拥有默认值,可在自己线程内修改值。试用于都会用到但是自己用自己的这种类型的变量,且一次只有一个值,不涉及遍历。
2.3 前置处理器的用户参数
这种方式适合小数据量的遍历业务,且只在当前线程内有效,数据在单独线程内调用。(如果2个线程跑1轮,则结果是一样的。)
2.4 配置元件的 cvs data set config
适用于大数据量的遍历测试,有更丰富的共享数据策略
2.2 数据文件动态替换:使用配置元件里的 CSV Data set Config 可以实现动态参数替换
数据可以是文本文件也可以是CVS文件但是用法有所不同可查看配置元件章节
2.3 循环次数设置。当一个文件被参数化后,需要配置线程组的循环次数,比如循环次数等于数据数就能全部循环,如开启多次循环可多设置循环次数
关于JDBC
如果使用JDBC 必须要进入对于的jdbc jar包,在计划中设置。包房子lib下ext下
如:

JDBC就是链接数据库,jmeter中有1处设置2处使用,下面介绍下
1.配置元件-> JDBC Connecting Configuration
主要设置链接名称,和数据库链接配置即可,其他采取默认
以mysql为例:
DATABASE URL: jdbc:mysql://ip:3306/库名?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
JDBC Driver class :com.mysql.jdbc.Driver
用户名密码 填入正确即可
2.前置处理器-jdbc preprocessor
作用是在选中的sampler前执行,同理还有后置处理器的 jdbc preprocessor 。
3. sampler 下的jdbc request
作用是在当前线程组下运行,设置同2,只有一点不同就是2中的查询结果没法在结果树种查看
介绍下用法
1.Variable name 都是1中的链接名称
2.query type
Select Statement:仅支持测试select语句,并且一次只能测试一条
Update Statement:支持测试非select语句,并且支持测试多条
若其中夹杂select语句,自动忽略
若第一条语句为select语句,报错
Callable Statement:只要语法正确,任何语句,再多的条数都能支持
如果sql语句是固定写死的参照上面的介绍选择
如果语句中有些需要动态替换那么就需要选择带“Prepared”的
jemter支持直接填写变量替换和使用占位符变量替换
变量替换:如在用户自定义变量中定义一个变量,此处直接引用即可如:${name}
占位符替换:凡是语句中需要替换的均可用?代替
然后 在 Parameter valus和Parameter Type内写入变量值及变量类型,依次用逗号隔开。变量值也可以引用变量:如

也可以用变量替换如

3.Result variable name :如果是查询返回一个map对象的变量,可以被调用。
关于 BeenShell
BeenSheel 就是可执行java语句的地方,在前置处理器和后置处理器均可使用。
一、操作变量:通过使用Bean shell内置对象vars可以对变量进行存取操作
a) vars.get("name"):从jmeter中获得变量值
b) vars.put("key","value"):数据存到jmeter变量中
二、操作属性:通过使用Bean shell内置对象props 可以对属性进行存取操作
a) props.get("START.HMS"); 注:START.HMS为属性名,在文件jmeter.properties中定义
b) props.put("PROP1","1234");
三、编写java脚本:
在BeanShell中,我们可以使用java语言自定义函数来处理特定的逻辑,结合BeanShell的内置对象进行变量的存取,方便我们进行测试提高脚本的灵活性。
1.案例测试计划新建一个个变量:

2.依次新增sampler下的Debug sampler、BeanShell Sampler 、 Debug sampler

BeanShell Sampler 中编写脚本

运行后,查看结果



四、使用java方法并调用方法
将三种的代码行改成如下执行,也可以达到相同效果
//编写函数
public static String test1()
{
vars.put("testVa1","test1");
vars.put("testVa2","test2");
return("success");
}
//调用函数
test1();
五、调用外部java类代码
有这么个需求:我有个java类时计算2个数字的和,如何在jmeter中使用那
1.编写java代码文件
1 package myjmeter.java 2 public class Addnum 3 { 4 public int add(int a,int b) 5 { 6 return a+b; 7 } 8 }
2.在jmeter bin目录下创建文件夹UserJavaFiles 将步骤1中的文件放入此文件夹中
3.在测试计划中,添加变量:ExtJavaFileLib 路径为UserJavaFiles的路径

4.添加 BeanShell sampler
脚本写入:
//引入java文件
log.info("java文件地址--"+vars.get("ExtJavaFileLib")+"TestAdd.java");
source(vars.get("ExtJavaFileLib")+"TestAdd.java");
//调用函数
int mysum=new myjmeter.java.Addnum().add(12,23);
vars.put("Sum",mysum.toString());
return(vars.get("Sum"));
需要注意的是:java定义的变量如果想用vars.put 给jmeter变量赋值时,需要转换成字符串类型才能赋值
结果树种查看结果为:

五、:获取jdbc查询结果变量
jdbc 执行的查询结果变量可以获取并使用
其中jdbc中的:Result Variable name:运行结果将会以多个map形式的list保存在所设置的变量中,结果中的列名作为map的key值,列的值作为map的value;
测试场景:使用前置处理器添加jdbc PreProcesser 添加查询语句,使用后置处理器:BeanShell PostProcessor 获取结果遍历;
1.添加 jdbc PreProcesse 添加查询语句,并定义结果变量名。

2. 添加 后置处理器:BeanShell PostProcessor
脚本输入
log.info("BeanShell PreProcessor 测试在采样器后输出");
//获取指定行指定列信息
String sqlResUser=vars.getObject("Res_authorization").get(0).get("user");
//获取查询结果信息
String sqlRes=vars.getObject("Res_authorization").toString();
//获取第一行信息
String sqlResFirstRow=vars.getObject("Res_authorization").get(0).toString();
//依次存入变量
vars.put("sqlResUser",sqlResUser);
vars.put("sqlRes",sqlRes);
vars.put("sqlResFirstRow",sqlResFirstRow);
log.info("sqlRes:"+sqlResFirstRow);
这样就可以了
六、:使用jar包中的类
我们经常要用到自己写的功能,如果涉及到类比较多的话可以打成jar包在jmeter使用。
场景:有个加密解密的算法,涉及到其他类,将此类打成包并引用在jmeter中
1.先确定要打包的类中引用的类
如果是jdk自带的不用处理
如果是其他jar包比如maven依赖的需要把依赖的jar包也找到
如果依赖的类也是自己写的需要把相关的类放在一个package中,也就是编译能通过
右键要打包的package,选择export-》java-》jar file 如下图所示

2. 将打好的包连同依赖包一同放入lib下的ext目录
3. 在测试计划中引入刚放入ext的包

3. 新建beanshell
脚本中先引入要用的类,在写代码即可
如:
//引入类文件 同原java文件的import
import com.fujiaxi.des.*;
调用类方法/
String afterJiaM=DESUtil.getDesData("yuchao.cheng", "");
//存储变量
vars.put("jiami",afterJiaM);
//返回变量
return(vars.get("jiami"));
七、:beanshell 的参数使用
Bean Shell可用脚本如下:
a、bean shell可以接受传入参数,如下图:${u1} ${u2} ${u3}
b、参数可以通过bsh.args[]按顺序提取
c、bean shell提供了一个内置变量Parameters,来保存参数的集合
案例:用户自定义变量,在beanshell中引用,变量既可以是测试计划中的变量 也可以用户自定义 还可以是前置处理器中的。
1.测试计划添加用户变量

2.前置处理器变量

3.后置处理器中添加 beansheel,

4. sampler 添加beanshell

注意:参数里的变量必须用空格分开。否则在用 bsh.args[0]取得的值是全部的变量也就是bsh.args[0]等于parameters ,此时bsh.args[1]就会出错
5. 引用脚本文件
案例:创建脚本文件,创建放脚本文件的目录,并创建变量存储目录,beanshell 下引用变量及文件名调用脚本
1.创建脚本并命名bs.bsh
2.在bin 目录创建目录bshFiles 并将bs.bsh文件放入此目录
3.在测试计划变量新增变量,名为bshFiles,值为“bshFiles/”

4.新增beanshell ,脚本文件写入${}

5.运行后查看结果:

7.Reset bsh.Interpreter before each calll
若选择此项,则将为每个样本创建对应的解释器。一般用不到。

浙公网安备 33010602011771号