Jmeter常用元件介绍及其Beanshell的使用

栏目: 编程工具 · 发布时间: 5年前

内容简介:测试计划是Jmeter测试的起点,是其他Jmeter测试元件的容器。包含一个功能模块测试的所有内容,包含所有的控件,属性,变量。所以,一个.Jmx文件中只有一个测试计划。测试计划中可以定义变量,引入jar包等。线程组可以理解为一个虚拟用户组,线程间变量相互独立,一个测试计划内可以包含多个线程组;线程属性有:线程数量,线程启动间隔时间(0位立刻启动所有线程),单线程循环次数,线程执行顺序,是否使用调度器。模拟请求,如HTTP,FTP请求等。在Jmeter中承担测试任务。

一. Jmeter做接口测试的常用元件介绍

  • ##### 测试计划

测试计划是Jmeter测试的起点,是其他Jmeter测试元件的容器。包含一个功能模块测试的所有内容,包含所有的控件,属性,变量。所以,一个.Jmx文件中只有一个测试计划。测试计划中可以定义变量,引入jar包等。

  • ##### 线程组

线程组可以理解为一个虚拟用户组,线程间变量相互独立,一个测试计划内可以包含多个线程组;线程属性有:线程数量,线程启动间隔时间(0位立刻启动所有线程),单线程循环次数,线程执行顺序,是否使用调度器。

  • ##### Sampler取样器

模拟请求,如HTTP,FTP请求等。在Jmeter中承担测试任务。

  • ##### 监听器

对取样器请求的结果进行显示,统计数据(接口请求的错误率,常用的性能指标如吞吐量等)负责收集和显示测试结果。

  • ##### 断言

一种验证响应结果是否和期望相符的方法。

  • ##### 逻辑控制器

控制发送请求时的逻辑行为,常与Sampler取样器结合模拟请求,如if控制器

  • ##### 前置处理器

在发送请求之前需要完成的工作。常常被用来修改请求的相关设置。如:URL重写修饰符,

  • ##### 后置处理器

在发送请求之后需要完成的工作。常常被用来处理响应结果。如:正则表达式处理器,Bean Shell PostProcessor,

  • ##### 配置元件

用来初始化默认值和变量,以便后续采样器使用。将在其作用域的初始化阶段处理,Jmeter常用的配置元件包括:HTTP Cookie管理器,HTTP Cache Manager,HTTP信息头管理器,CSV数据文件设置,用户自定义变量等。

二、部分举例

我们以抽奖活动为例,显示抽奖10次时,每次抽中的具体奖品以及该奖品出现的概率,假设有三种奖品

测试过程

  • 添加测试计划:抽奖活动;
  • 添加Sampler:用户登录(login接口),并在请求上插入上级仅一次逻辑控制器,控制同一用户仅登录一次;

  • 添加HTTP Cookie管理器:用来获取用户登录的token;

  • 添加HTTP Cache Manager;

  • 添加HTTP信息头管理器:添加HTTP请求头参数;

  • HTTP URL重写修饰符;

  • 添加Sampler:抽奖,该接口可用于获取用户所抽到的奖品信息;

对抽奖接口,添加后置管理器-正则表达式提取器:用于获取响应结果中prizeName的值;(正则表达式的匹配规则可自行学习)

如:

Jmeter常用元件介绍及其Beanshell的使用

对抽奖接口,添加后置处理器-Bean Shell PostProcessor:用来处理抽奖接口的返回数据,得到抽奖总次数,每次所抽奖品和抽到某种奖品的次数。值得注意的是,如果直接在beanshell脚本里定义变量,则每次请求接口变量都会被重新初始化,所以,我们需要针对抽奖接口添加配置元件-用户自定义变量,以此保存每次抽奖的结果和次数。具体方法为:

Jmeter常用元件介绍及其Beanshell的使用

Jmeter常用元件介绍及其Beanshell的使用

除此之外,用户自定义变量中的value参数为String类型,如果想对此变量进行数值运算,需要将其转化为int类型,存储运算后的值时再将其转化为String类型。

附上BeanShell脚本,

{
      String prizeName = vars.get("prizeName");
//抽中奖品一的次数
int c1 = Integer.parseInt(vars.get("count1"));
//抽中奖品二次数
int c2 = Integer.parseInt(vars.get("count2"));
//抽奖总次数
int summ= Integer.parseInt(vars.get("sum"));
summ = summ+1;
vars.put("sum",summ.toString());
System.out.print("第"+summ+"次抽奖:");
//c1 = c1+1;
if(prizeName.startsWith("奖品一")){
//System.out.println(vars.get("prizeName"));
c1 = c1+1;
          vars.put("count1",c1.toString());
// System.out.println("奖品一:"+c1+"次");
}else if(prizeName.startsWith("奖品二")){
//奖品二
c2 = c2+1;
          vars.put("count2",c2.toString());
//System.out.println("抽中奖品二的次数为:"+c2+"次");
}else{
    //该需求内的某次必中的其他奖品
         System.out.println(vars.get("prizeName"));
}

System.out.println(vars.get("prizeName"));

if(summ == 10){

      System.out.println("-------------------------------------------");

System.out.println("抽奖总次数为:"+summ);

System.out.println("抽中奖品一次数为:"+c1+"次");

System.out.println("抽中奖品二次数为:"+c2+"次");

}

System.out.println("-------------------------------------------");

}

其中,count1,count2,sum为添加的用户自定义变量,用于保存每次请求变量的结果。(添加-配置原件-用户自定义变量)

设置线程组数为1,循环次数为10,及单用户登录,抽奖十次的结果,显示如图:

Jmeter常用元件介绍及其Beanshell的使用

2.2两个接口之间有逻辑关系

概述:测试修改密码接口,但需要先校验验证码正确(校验验证码接口)。

测试过程:

  1. 校验验证码接口加后置正则表达式提取器,提取该接口返回结果(成功),我提取的是返回的msg的成功信息

Jmeter常用元件介绍及其Beanshell的使用

Jmeter常用元件介绍及其Beanshell的使用

在修改密码接口上添加逻辑控制器(if控制器),写入if控制条件,显示如图:

Jmeter常用元件介绍及其Beanshell的使用

结果:验证码通过后才会请求修改密码接口

热度: 8


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java Concurrency in Practice

Java Concurrency in Practice

Brian Goetz、Tim Peierls、Joshua Bloch、Joseph Bowbeer、David Holmes、Doug Lea / Addison-Wesley Professional / 2006-5-19 / USD 59.99

This book covers: Basic concepts of concurrency and thread safety Techniques for building and composing thread-safe classes Using the concurrency building blocks in java.util.concurrent Pe......一起来看看 《Java Concurrency in Practice》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具