JMeter学习笔记——调试工具

        通常,编程工具IDE都提供了相应的调试模块,供开发者使用,以便更快速的定位问题所在。那么在JMeter编写测试脚本的过程中,也有对应的调试工具提供给我们使用。

        JMeter常用的调试工具有如下五种:
        1、View Tree:查看结果树。含请求信息、响应信息等,请求头信息中的cookie信息一般默认不会显示,可通过修改JMeter配置参数进行显示。日常用的挺多的,在此不再赘述。
        2、HTTP Mirror Server:HTTP镜像服务器。用于查看请求信息。
        3、Debug Pre/PostProcessor:用于查看系统中存在变量等信息。
        4、Debug Sampler:样本调试工具,含输入输出信息。
        5、BeanShell + jmeter.log:组合调试,更加灵活。

一、HTTP Mirror Server

        通常,大多数人在调试JMeter测试脚本时,会经常性的向测试服务器发送接口测试请求的数据。在初始调试脚本时,通常优先调试脚本的请求信息(入参、请求头信息、Cookie信息等)是否正确无误。那么,针对此种情况,我们如何不向测试服务发送数据呢?通常的做法是,开启fiddler,将我们的样本请求代理到fiddler进行拦截,查看相应的样本请求信息是否正确。

        其实,JMeter 已经为我们提供这样的镜像服务,它就是 HTTP Mirror Server,添加路径:控制台/添加/非测试元件/HTTP Mirror Server。面板如下所示:

JMeter学习笔记——调试工具

  • 端口:HTTP Mirror Server镜像服务器监控的端口,默认为 8081,为必填项。
  • Max number of Threads:最大的线程数量。若是超出此限制,则进入等待队列。
  • Max queue size:在线程池执行样本时的最大请求任务队列数。当线程池正在执行,新接收的请求将被存放在任务队列中。此项仅在最大线程数量大于0时才有效。

        【HTTP Mirror Server】作用:类似于本地临时搭建一个HTTP服务器,将其接收到的请求信息原样返回,可以在样本请求的响应结果面板中查看。如此就可以验证发送的样本请求信息是否正确,以供调试测试脚本所用。

        配置好HTTP Mirror Server后,点击【启动】,如下图:

JMeter学习笔记——调试工具

        设置HTTP 请求,如下:

JMeter学习笔记——调试工具

执行结果如下:

JMeter学习笔记——调试工具         可以看到:response中的内容与request内容一模一样,我们就可以通过此种方法判断我们发送出去的请求是否确实是我们预期的结果。

二、Debug PostProcessor

        前置处理器或后置处理器中的 Debug Processor,也是常用的一个调试工具,其可以获取样本线程的相关信息进行展示,可通过查看结果树中的响应数据查看对应样本线程请求、响应及变量等信息。在查看的时候注意 Debug PostProcessor的查看作用域即可,在不用的位置,可查看的信息是不同。

        添加路径:线程组/添加/后置处理器/Debug Processor。

JMeter学习笔记——调试工具

  • JMeter properties:jmeter.properties定义的系统级的属性变量。因其变化不大,所以脚本调试时通常不显示,默认False(不显示)。
  • System properties:系统配置的环境变量等。若系统环境变量在当前脚本中有用到,可以设置为True(显示),默认为False(不显示)。
  • JMeter variables:JMeter中定义的变量。常用的四种变量定义可参考文章JMeter学习-032-JMeter常见四种变量简介,默认为True(显示)。
  • Sampler properties:样本属性及变量信息。默认为True(显示)。

        下面为具体示例:

JMeter学习笔记——调试工具

        放在不同的位置,作用范围不一样:

        请求外(out Debug PostProcessor):
        如【Debug PostProcessor-outside】,所有请求对Debug PostProcessor都是上一个请求,可获取当前请求之前所有测试计划、用户定义的变量、参数化变量、 请求产生的变量数据。但无法获取请求内的前、后置处理器定义生成的变量;
        请求内(inner Debug PostProcessor):

        当前所属请求为其上一个请求,可获取当前线程之前所有测试计划、用户定义的变量、参数化变量、 请求产生的变量数据,以及当前 请求产生的变量数据。

三、Debug Sampler

        DebugSampler,其主要是查看JMeter用户定义变量、JMeter属性变量,以及系统环境变量信息,在查看结果树对应调试器响应结果面板中查看信息。

        添加路径:线程组/添加/Sampler/Debug Sampler。

        打开JMeter测试脚本,在样本线程之间添加调试器,最终样本结构如下所示:

JMeter学习笔记——调试工具

运行结果如下:

JMeter学习笔记——调试工具


四、BeanShell+jmeter.log

BeanShelld的简介:

  • BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;
  • BeanShell是一种松散类型的脚本语言(这点和JS类似);
  • BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简的解释器。
  • BeanShell可执行标准Java语句和表达式,另外包括一些脚本命令和语法。

JMeter在其BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下:

    • log:写入信息到jmeber.log文件,使用方法:log.info(“This is log info!”);
    • ctx:该变量引用了当前线程的上下文,使用方法可参考:org.apache.jmeter.threads.JMeterContext。
    • vars:即JMeterVariables,操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),常用方法:
        a) vars.get(String key):从jmeter中获得变量值
  •         b) vars.put(String key,String value):数据存到jmeter变量中,其作用可简单理解为赋值操作:key=value,更多方法可参考:org.apache.jmeter.threads.JMeterVariables
    • props:即JMeterProperties - class java.util.Properties,操作jmeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但是put函数,value数据类型只能为String,不能是一个对象。对应于java.util.Properties。
        a) props.get("START.HMS");  注:START.HMS为属性名,在文件jmeter.properties中定义
  •         b) props.put("PROP1","1234");
    • Parameters:从参数输入框中获取的参数值的集合
    • bsh.args:从参数输入框中获取的参数值的数组

范例脚本如下:

JMeter学习笔记——调试工具

执行结果为:

JMeter学习笔记——调试工具

综上可见:
1、BeanShell脚本可访问脚本之前所有系统已定义的变量,未定义的输出为null;
2、BeanShell脚本可通过vars.put(变量名,变量值)方法生成新的定义变量;
3、BeanShell脚本参数通过空格键分组为list,通过bsh.args[index]进行访问;
4、BeanShell脚本可访问 JMeterProperties中存在的变量,即jmeter.properties中定义的变量。可通过在其中定义变量达到相应的目的;
5、BeanShell脚本可采用直接引用的方式读取(推荐)或参数形式访问;
6、BeanShell脚本参数变量不存在时,引用方式视为字符串。