1.简介

  后置处理器是在发出 “取样器请求” 之后执行一些操作。取样器用来模拟用户请求,有时候服务器的响应数据在后续请求中需要用到,我们的势必要对这些响应数据进行处理,后置处理器就是来完成这项工作的。例如系统登录成功以后我们需要获取 SessionId,在后面的业务操作中服务器会验证这个 SessionId,获取 SessionId 这个功能过程就可以用后置处理器中的正则表达式提取器来完成。

2.预览后置处理器

  首先我们来看一下 JMeter 的后置处理器,路径:线程组(用户)->添加->后置处理器();我们可以清楚地看到 JMeter5 中共有 11 个后置处理器(不包括 jp@gc 开头的后置处理器,这个是宏哥安装的插件),如下图所示:

如果上图您看得不是很清楚的话,宏哥总结了一个思维导图,关于 JMeter5 的前置处理器类型,如下图所示:

通过以上的了解,我们对后置处理器有了一个大致的了解和认识。下面宏哥就给小伙伴或则童鞋们分享讲解一些通常在工作中会用到的后置处理器。

3.常用后置处理器详解

这一小节,宏哥就由上而下地详细地讲解一下常用的后置处理器。

3.1JSR223 后置处理程序

JSR223 后置处理程序,用法和 JSR223 PreProcessor 类似,可以参考宏哥的这一篇文章:Jmeter(十六) - 从入门到精通 - JMeter 前置处理器(详解教程)

1、我们先来看看这个JSR223 后置处理程序长得是啥样子,路径: 线程组 > 添加 > 后置处理器 > JSR223 后置处理程序 ,如下图所示:

2、关键参数说明如下:

Name: 名称,可以随意设置,甚至为空;

Comments: 注释,可随意设置,可以为空;

parameter: 要传递到脚本文件或脚本的参数列表;

file name: 用于执行的脚本文件,若没有脚本文件,将执行脚本;

Script: 传递给 JSR223 执行的脚本;如果提供了脚本文件,则执行脚本文件,否则执行脚本。

3.2 调试后置处理程序

调试后置处理程序,使用正则表达式为从另一个 HTTP 请求中提取的 HTTP 参数指定动态值,配合 regular expression extractor 使用。暂时没找到好的例子,后面想到补充。。

1、我们先来看看这个调试后置处理程序长得是啥样子,路径: 线程组 > 添加 > 后置处理器 > 调试后置处理程序 ,如下图所示:

2、关键参数说明如下:

Name: 名称,可以随意设置,甚至为空;

Comments: 注释,可随意设置,可以为空;

Regular Expression Reference Name: 调用的正则表达式提取器中的引用名称;

Parameter names regexp group number: 用于提取参数名称的正则表达式的组编号;

Parameter values regex group number: 用于提取参数值的正则表达式的组编号。

3.3JDBC 后置处理程序

JDBC 后置处理程序,实际上 JIBC PostProcessor 就是一个 JDBC Request,它与 JDBC Request 功能相同,都可以执行 SQL 语句。在测试的过程中可能会遇到这样的测试场景:我们用 JDBC Request 修改了一些数据,当测试完成后,我们希望还原到原先状态,此时我们可以用 JDBC PostProcessor 来完成,当然用 JDBC Request 也可以完成。具体的 JDBC PostProcessor 的使用参考宏哥关于 JDBC Request 的这篇文章:Jmeter(七) - 从入门到精通 - 建立数据库测试计划实战<MySQL 数据库>(详解教程)

1、我们先来看看这个JDBC 后置处理程序长得是啥样子,路径: 线程组 > 添加 > 后置处理器 > **JDBC 后置处理程序** ,如下图所示:

3.4 结果状态处理器

结果状态处理器,实际上在测试的时候我们也经常会遇到这样的测试场景:在一些测试用例失败之后我们需要进行一些操作,例如停止测试,这里可以使用结果状态处理器。

1、我们先来看看这个结果状态处理器长得是啥样子,路径: 线程组 > 添加 > 后置处理器 > 结果状态处理器 ,如下图所示:

2、关键参数说明如下:

Name: 名称,可以随意设置,甚至为空;

Comments: 注释,可随意设置,可以为空;

Language: 语言,开发脚本选择的语言,使用的 JSR223 语言,可根据需要选择;

Parameters: 参数,传递给脚本的参数;

File Name: 文件名,本地开发的脚本文件(会覆盖在 JMeter 里编写的脚本);

Script compilation caching: 存储编译的脚本,默认勾选;

Script: 要运行脚本。编写脚本的区域。

3.5XPath 提取器

Xpath 提取器,如果请求返回的消息为 xml 或 html 格式的,可以用 XPath 提取器来提取需要的数据。

1、我们先来看看这个 ** Xpath 提取器长得是啥样子,路径: ** 线程组 > 添加 > 后置处理器 > Xpath 提取器 ,如下图所示:

2、关键参数说明如下:

APPly to: 作用范围(返回内容的断言范围)
Main sample and sub-samples:作用于父节点的取样器及对应子节点的取样器
Main sample only:仅作用于父节点的取样器
Sub-samples only:仅作用于子节点的取样器
JMeter Variable:作用于 jmeter 变量 (输入框内可输入 jmeter 的变量名称)

XML Parsing Options: 要解析的 XML 参数
UseTidy:当需要处理的页面是 HTML 格式时,必须选中该选项;如果是 XML 或 XHTML 格式(例如 RSS 返回),则取消选中;
Quiet 表示只显示需要的 HTML 页面,
   Report errors 表示显示响应报错,
   Show warnings 表示显示警告;
Use Namespaces:如果启用该选项,后续的 XML 解析器将使用命名空间来分辨;
Validate XML:根据页面元素模式进行检查解析;
Ignore Whitespace:忽略空白内容;
Fetch external DTDs:如果选中该项,外部将使用 DTD 规则来获取页面内容;

Return entire XPath fragment of text content: 返回文本内容的整个 XPath 片段;

Reference Name: 存放提取出的值的参数。

XPath Query: 用于提取值的 XPath 表达式。语法参考:XPath

匹配数字: 取第几个匹配结果,0 随机,-1 全部,1 代表第一个,2 代表第二个,....以此类推

Default Value: 参数的默认值。

3.5.1 实例

1、新建测试计划,线程组下添加 1 个取样器 天气预报,如下图所示:

2、天气预报返回 HTML,然后再添加 xpath 提取器,如下图所示:

举例://div[@class='w_city city_guonei']//a/@href

选取 div 下带有 class 属性为 w_city city_guonei 的 href 属性节点。
注释://div 选取了 div 节点的所有子节点
@ 选取属性
/@href 从根节点选取所有的 href 属性

Xpath 提取器设置

3、继续添加 GetWeatherInfo 取样器,获取 xpath 提取到的参数,如下图所示:

4、配置好以后,点击 “保存”,运行 JMeter,查看表格结果(取样器访问博客园首页和访问度娘间隔 3s),如下图所示:

3.6XPath2 Extractor

Xpath2 提取器,虽然 JMeter 官方文档说可以使用 XPath2 查询语言从结构化响应(XML 或(X)HTML)中提取值,但目前测试只支持从 XML 响应中提取值;从 HTML 中提取会报错,这个可以通过查看结果树中选择 XPath2 Tester 来验证。

1、我们先来看看这个 ** Xpath2 提取器长得是啥样子,路径: ** 线程组 > 添加 > 前置处理器 > Xpath2 提取器 ,如下图所示:

2、关键参数说明如下:

APPly to: 作用范围(返回内容的断言范围)
Main sample and sub-samples:作用于父节点的取样器及对应子节点的取样器
Main sample only:仅作用于父节点的取样器
Sub-samples only:仅作用于子节点的取样器
JMeter Variable:作用于 jmeter 变量 (输入框内可输入 jmeter 的变量名称)

Return entire XPath fragment of text content: 返回文本内容的整个 XPath 片段;

Name of created variable: 存放提取出的值的参数。

XPath Query: 用于提取值的 XPath 表达式。

Match No 匹配数字: 取第几个匹配结果,0 随机,-1 全部,1 代表第一个,2 代表第二个,....以此类推

Default Value: 参数的默认值。

Namespaces aliases list: 命名空间别名列表。就是这个功能,能让使用命名空间比使用旧的 XPath 提取器更方便。关于命名空间含义,可以看官方文档:XML 命名空间,但是写的不够详细,详细的参考这里:XML 命名空间(XML Namespaces)介绍以及节点读取方法。由于 XPath2 对于表达式的要求比较严格,对于带命名空间的 XML(包括默认的命名空间),使用不带命名空间前缀的表达式是查询不到结果的。

3.7BeanShell 后置处理程序

** BeanShell 后置处理程序 ** ,如果请求返回的消息为 xml 或 html 格式的,可以用 XPath2 提取器来提取需要的数据。这个估计是 JMeter5.0 新加的吧,具体用法和 Xpath 提取器的应该差不多的,可以参考上边 Xpath 提取器的用法。

1、我们先来看看这个 ** ** BeanShell 后置处理程序 *长得是啥样子,路径: *线程组 > 添加 > 后置处理器 > BeanShell 后置处理程序 ,如下图所示:

2、关键参数说明如下:

Reset bsh.Interpreter before each call: 每次迭代是否重置解释器

Reset Interpreter :false

Parameters to be passed to BeanShell(=>String Parameters and String [] bsh.args) 参数传递,字符串或者数组

Parameters:

Script file(overrides script): 脚本文件

File Name:

Script(variables:ctx vars props prev data log): 脚本编辑()

3.7.1 实例

在这里宏哥就列举一个简单的例子,响应结果中有中文乱码,使用 BeanShell 后置处理程序来处理中文乱码。

1、新建测试计划,线程组下添加 1 个取样器 访问度娘,如下图所示:

2、然后再添加 BeanShell 后置处理程序,设置脚本: *prev.setDataEncoding("UTF-8"); * ,如下图所示:

3、配置好以后,点击 “保存”,运行 JMeter,禁用 BeanShell 后置处理程序,查看表格结果(中文乱码),如下图所示:

(1)禁用 BeanShell 后置处理程序,查看表格结果(有中文乱码)

(2)启用 BeanShell 后置处理程序,查看表格结果(无中文乱码)

4.小结

好了,今天到这里所有的 JMeter 后置处理器就全部介绍分享完了,感谢您的耐心阅读!!!

您的肯定就是我进步的动力。如果你感觉还不错,就请鼓励一下吧!记得随手点波 *推荐 * 不要忘记哦!!!


↙↙↙阅读原文可查看相关链接,并与作者交流