本文将介绍各组件相互的联系,及相似组件的介绍

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

    若选择此项,则将为每个样本创建对应的解释器。一般用不到。

 

  

  

 

posted on 2017-11-08 13:36  jurryfu  阅读(549)  评论(0)    收藏  举报