目录

JMeter前置处理器

JMeter前置处理器

在JMeter中,前置处理器即预处理器,用于在实际取样器(Sampler)发出请求之前对即将发出的请求进行初始化的预处理,如图3-11所示。

https://i-blog.csdnimg.cn/direct/ac9b58f01cdb445a90b94d1f62a24e03.png

图3-11  如何添加前置处理器

从图3-11中可以看到前置处理器通常包括JSR223预处理程序、用户参数、HTML链接解析器、HTTP URL 重写修饰符、JDBC预处理程序、正则表达式用户参数、取样器超时、BeanShell预处理程序,接下来会分别进行介绍。

3.4.1  JSR223预处理程序

JSR223预处理程序指的是使用JSR223规范(全称为Java Specification Request 223,是一个Java语言平台发布的规范,用于提供一种标准化的方式来嵌入脚本语言到Java应用程序中)实现的一种预处理程序,该预处理程序中可以使用多种脚本语言,如下所示:

  • BeanShell:是使用Java语言实现的一个免费小型、支持嵌入、面向对象的脚本语言。
  • Bsh:是BeanShell的简写,    该脚本语言功能和BeanShell一致,但是在JMeter的JSR223预处理程序界面中语言下拉选项中单独又列出了这一简写方式。
  • EcmaScript:是由ECMA国际(European Computer Manufacturers Association,即 )通过ECMA-262标准设计的一种脚本语言,我们经常使用的JavaScript脚本语言就是对EcmaScript标准的一种扩展实现。
  • Groovy:是一种运行在JVM(Java 虚拟机)上的、面向对象编程的脚本语言,Groovy既支持面向对象,也支持作为一种纯粹的脚本语言来使用。在使用Groovy时,可以和Java语言之间互相引用和调用。由于JMeter自身是通过Java语言实现的,所以很容易就能支持Groovy脚本语言的嵌入。
  • Java:目前使用最广泛的一种面向对象的编程语言。JMeter 自身就是使用Java语言实现的,所以预处理程序肯定会支持使用Java语言来编写。
  • JavaScript:是目前使用最广泛的一种动态解析和执行的脚本语言,通常广泛应用于前端网页的开发中,是Web开发的核心语言。
  • Jexl:是Java Expression Language的简写,是一种表达型的语言。
  • Jexl2:是Jexl语言的2.0版本。

3.4.2  HTML链接解析器

HTML链接解析器指的是自动处理HTML响应,解析出其中所有的HTML链接和表单, 以便在下一个HTTP取样器中使用。通常在一个性能测试中同时存在同个HTTP取样器的场景下会被使用到,如图3-12所示。

https://i-blog.csdnimg.cn/direct/7b3d183d300c46e3bfbe6f9a40af0b65.png

图3-12  HTTP取样器中如何使用HTML链接解析器

3.4.3  HTTP URL 重写修饰符

HTTP URL 重写修饰符和HTML链接解析器类似,但是其支持对HTTP URL进行重写,以便存储会话ID来替代存储Cookies。通常可以在线程组中添加这个元件,只需要在此元件上指定会话Id参数的名称,该元件就可以在页面中自动找到该参数,并且将该参数添加到每个取样器的请求中。该元件包含的其他功能如下:

  • 路径扩展:通过添加分号和会话Id参数来重写URL。
  • Do not use equals in path extension:表示在参数名称和值之间不使用“=”符号的情况下需要重写URL。
  • Do not use questionmark in path extension:表示不允许查询字符串最终出现在路径扩展中。
  • 缓存会话Id:表示当会话Id不存在时,是否应该保存会话Id的值以供后续测试使用。
  • URL Encode:写入参数是否进行URL编码处理。

3.4.4  JDBC预处理程序

JDBC预处理程序指的是在取样器发出请求之前,可以通过JDBC的方式来运行一些SQL语句,这些SQL语句可以直接操作数据库。比如,使用取样器发出请求之前,需要先查询数据库来获取请求的参数,或者是取样器发出请求之前,需要先向数据库中构造一些初始数据或者删除一些已经存在的数据等,如图3-13所示。

https://i-blog.csdnimg.cn/direct/b64af0899c994c909a3b301a27532e5a.png

图3-13  预处理示例

3.4.5  正则表达式用户参数

正则表达式用户参数指的是使用正则表达式的方式,从上一个HTTP取样器请求的响应结果中提取HTTP参数指定的动态值,以便于下一个HTTP取样器作为请求参数使用。正则表达式用户参数只能用于在同一个线程中传递,如图3-14所示。

https://i-blog.csdnimg.cn/direct/1a3d256804b740a2a8da4129d6974dc9.png

图3-14  如何使用正则表达式用户参数

正则表达式用户参数主要包容如下功能:

  • Regular Expression Reference Name:表示正则表达式引用的名称。
  • Parameter names regexp group number:表示用于提取参数名称的正则表达式的组号。
  • Parameter values regex group number:用于提取参数值的正则表达式的组号。

如图3-15所示,展示的是一个从上一个HTTP取样器请求的响应结果中,提取数据来作为下一个HTTP取样器请求的参数的过程。在图3-15中可以看到:

  • 当需要从上一个HTTP取样器的响应结果中提取数据时,需要先为上一个HTTP取样器创建一个后置处理器,后置处理器类型选择为正则表达式提取器。关于后置处理器,我们将会在接下来的3.7节中详细讲解。后置处理器通常是在取样器之后才会运行。
  • 为下一个HTTP取样器创建一个前置的正则表达式用户参数元件,该元件用于接收上面正则表达式提取的结果数据,并且按照规则提取参数名称和参数值。
  • 下一个HTTP取样器使用提取的参数名称和参数值来发出下一个HTTP取样器的请求。

https://i-blog.csdnimg.cn/direct/8f64855b54c140c7a0039f6cf0225de5.png

图3-15  正则表达式提取参数示例

3.4.6  其他前置处理器

(1)用户参数:用户参数是一个对每个线程做预处理的动态赋值,以便在性能测试时使用这些值。在JMeter中,每个线程其实就是一个并发用户。

(2)取样器超时:用于设置取样器的超时时长,单位为毫秒。当取样器超时此时长时,会中断取样器的执行。当设置为0或者负数时,表示设置的时长为无限大,永远不会超时。

(3)BeanShell预处理程序:使用BeanShell脚本语言来编写取样器的预处理程序,界面上主要包含如下功能:

  • 每次调用前重置bsh.Interpreter重置解释器:如果设置这个选项为true,代表每次调用前都会重新创建解释器。默认为false,通常不需要进行修改。
  • 传递给BeanShell的参数:用于设置传递给BeanShell脚本的参数,可以以单个字符串的形式传递参数,也可以以字符串数组的形式传递参数。
  • 脚本文件名:设置要运行的BeanShell脚本的文件路径以及名称。通常情况下,如果使用外部的脚本文件,可以使用这个设置。
  • Script:直接在JMeter界面中编写脚本。

https://i-blog.csdnimg.cn/direct/37a1ffcbaf7d49ce9d230d3d09789854.jpeg