前置处理器是在发出 “取样器请求” 之前执行一些操作。如果将前置处理器附加到取样器元件,则它将在该取样器元件运行之前执行。前置处理器最常用于在取样器请求运行前修改其设置,或更新未从响应文本中提取的变量。前置处理器主要是用来处理请求前的一些准备工作,比如参数设置、环境变量设置等等。
首先我们来看一下 JMeter 的前置处理器,路径:线程组(用户)->添加->前置处理器();我们可以清楚地看到 JMeter5 中共有 8 个前置处理器(不包括 jp@gc 开头的前置处理器,这个是宏哥安装的插件),如下图所示:
如果上图您看得不是很清楚的话,宏哥总结了一个思维导图,关于 JMeter5 的前置处理器类型,如下图所示:
通过以上的了解,我们对前置处理器有了一个大致的了解和认识。下面宏哥就给小伙伴或则童鞋们分享讲解一些通常在工作中会用到的前置处理器。
这一小节,宏哥就由上而下地详细地讲解一下常用的前置处理器。
JSR223 预处理程序,用于对于采集器进行处理,且是在 sampler 启动之前 。
1、我们先来看看这个JSR223 PreProcessor长得是啥样子,路径: 线程组 > 添加 > 前置处理器 > JSR223 预处理程序 ,如下图所示:
2、关键参数说明如下:
Name: 名称,可以随意设置,甚至为空;
Comments: 注释,可随意设置,可以为空;
Language: 语言,开发脚本选择的语言,使用的 JSR223 语言,可根据需要选择;
Parameters: 参数,传递给脚本的参数;
File Name: 文件名,本地开发的脚本文件(会覆盖在 JMeter 里编写的脚本);
Script compilation caching: 存储编译的脚本,默认勾选;
Script: 要运行脚本。编写脚本的区域。
用法类似 Beanshell 取样器,可以参考:Jmeter(十五) - 从入门到精通 - JMeter 导入自定义的 Jar 包 这篇文章。具体用法如下:
1、新建测试计划,线程组下添加 JSR223 预处理程序,如下图所示:
2、然后再添加调试取样器,如下图所示:
3、参考脚本代码:
import com.bjhg.test.BeanShellJMeter;
BeanShellJMeter bs = new BeanShellJMeter("宏哥","北京");
vars.put("username",bs.getUserName());
4、配置好以后,点击 “保存”,运行 JMeter,查看表格结果,如下图所示:
用户参数,用于做几组参数给线程组的各个线程使用,如果线程数多于用户参数组数,则多出来的线程则从第一组用户参数开始依次调用参数组;简单来说就是给不同线程组(用户)使用不一样的变量值。
1、我们先来看看这个用户参数长得是啥样子,路径: 线程组 > 添加 > 前置处理器 > 用户参数 ,如下图所示:
2、关键参数说明如下:
Name: 名称,可以随意设置,甚至为空;
Comments: 注释,可随意设置,可以为空;
Update Once Per Iteration: 标识是否每轮迭代更新一次元素;
1、新建测试计划,线程组下添加用户参数,如下图所示:
2、然后再设置线程数为 3,如下图所示:
3、配置好以后,点击 “保存”,运行 JMeter,查看表格结果,如下图所示:
HTML 链接解析器,用于从前一个 sampler 返回的 html 页面中按照规则解析链接和表单,再根据此处理器所在的 sampler 中的规则进行匹配修改,而后该 sampler 会执行;
1、我们先来看看这个HTML 链接解析器长得是啥样子,路径: 线程组 > 添加 > 前置处理器 > **HTML 链接解析器** ,如下图所示:
1、新建测试计划,线程组下添加 1 个仅此一次控制器,在仅此一次控制器下再添加 1 个 HTTP 信息头管理器,2 个取样器 度娘搜索 和 点击链接,如下图所示:
(1)HTTP 信息头管理器
(2)度娘搜索(此取样器为一个搜索请求,返回 HTML 页面)
(3)点击链接(此取样器添加一个 HTML 链接解析器,解析器会将取样器返回的 HTML 页面按照取样器中的各个正则表达式匹配并发送此取样器)
2、然后再在点击链接 添加 HTML 链接解析器,如下图所示:
3、配置好以后,点击 “保存”,运行 JMeter,查看表格结果(),如下图所示:
(1)度娘搜索结果
(2)点击链接结果
HTTP URL 重写修改器,此处理器与 HTTP Link Parser 类似,但专用于使用 url 重写来存储 sessionId 而非 cookie 的 http request,在线程组级别添加此修改器则应用于所有 sample,若为单个 sample 添加则只适用该 sample。顾名思义就是帮我们重定向 URL 请求;重写 URL 来存储会话 id。我们知道浏览器与服务器之间的会话一般用 cookie 来管理,在 JMeter 中就是 HTTP Cookie 管理器,但是在实践工作中还有另外一种会话保持方式。比如系统只允许登录成功的用户才可以访问系统,当用户登录成功后返回一个 SessionID(或者 JsessionId)给用户,后续访问都需要验证这个 SessionID。如果后续请求都是以 Get 的方式提交表单,那么 SessionID 需要附加在 URL 链接中,而且每一个 Get 的请求都是如此,这种重复的工作,显然是可以用一个操作来完成的,在 JMeter 中这个操作就是 HTTP URL 重写修饰符。
为什么使用 URL 地址重写?
因为有些浏览器的安全设置,禁用了 session.而 session 的原理则是把 session 的 ID 保存在客户端的 cookie 中。所以这个时候如果 cookie 功能被禁用的话,所有使用 session 的功能将失效.如果采用 url 地址重写技术,则 server 会把 session 经过编码以后,写到 url 地址后面当做参数来传递.这样既提高了客户端的安全性,同时也避免了功能被屏蔽的风险。
1、我们先来看看这个HTTP URL 重写修饰符长得是啥样子,路径: 线程组 > 添加 > 前置处理器 > **HTTP URL 重写修饰符** ,如下图所示:
2、关键参数说明如下:
Name: 名称,可以随意设置,甚至为空;
Comments: 注释,可随意设置,可以为空;
Session Argument Name: 会话参数名称,用于搜索 sessionId,其他 sample 也可通过此参数来 调用其获取的 sessionId;
Path Extension: 路径扩展,如 url 添加了分号作为分割,则勾选此项;
Do not use equals in path extension: 用于 url 不用等号来分割 key 和 value 的类型;
Do not use questionmark in path extension: 用于不带?的类型;
Cache Session Id?: 勾选此项则会存储在其挂载的 sample 上获取到的 sessionId 供后边的其他 sample 使用;
URL Encode: 是否使用 url 编码;
数据库预处理器,用于在 sample 开始前查询数据库并获取一些值; jdbc 预处理程序,和取样器的 JDBC Request 一样。可以参考宏哥的这一篇文章:Jmeter(七) - 从入门到精通 - 建立数据库测试计划实战<MySQL 数据库>(详解教程)
1、我们先来看看这个JDBC PreProcessor长得是啥样子,路径: 线程组 > 添加 > 前置处理器 > JDBC 预处理程序 ,如下图所示:
2、关键参数说明如下:
Name: 名称,可以随意设置,甚至为空;
Comments: 注释,可随意设置,可以为空;
Variable Name of Pool declared in JDBC Connection Configuration: 连接池名称,需与 JDBC 链接配置中的 Variable Name 相同(此预处理器需要一个 JDBC Connection Configuration,此配置器在配置元件中);
Query Type: 数据库查询类型,根据需要自行选择;
Query: 数据库语句输入框,根据需要输入,注意结尾不要加”;”;
Parameter values: 参数名称,如果 Query 的语句中有”?” 则此处填值,可以使用调用参数方式;
Parameter types: 参数类型,与 Parameter values 对应,设置参数类型,与 sql 字段类型相同;
Variable names: 设定此项可以获取固定列的所有值;
Result variable name: 随意设定一个名称,则此名称会被作为一个参数并对应 Query 出来的内容;可以使用参数调用的方法来获取此设置的名称对应的值;
Query timeout(s): 超时时间;
Handle ResultSet: 有四个选项,结果保存的方式;
正则表达式,使用正则表达式为从另一个 HTTP 请求中提取的 HTTP 参数指定动态值,配合 regular expression extractor 使用。暂时没找到好的例子,后面想到补充。。
1、我们先来看看这个JSR223 PreProcessor长得是啥样子,路径: 线程组 > 添加 > 前置处理器 > JSR223 预处理程序 ,如下图所示:
2、关键参数说明如下:
Name: 名称,可以随意设置,甚至为空;
Comments: 注释,可随意设置,可以为空;
Regular Expression Reference Name: 调用的正则表达式提取器中的引用名称;
Parameter names regexp group number: 用于提取参数名称的正则表达式的组编号;
Parameter values regex group number: 用于提取参数值的正则表达式的组编号。
超时器,用于设定 sample 的超时时间,如果完成时间过长,此预处理器会调度计时器任务以中断样本;
1、我们先来看看这个Sample Timeout长得是啥样子,路径: 线程组 > 添加 > 前置处理器 > **Sample Timeout** ,如下图所示:
2、关键参数说明如下:
Name: 名称,可以随意设置,甚至为空;
Comments: 注释,可随意设置,可以为空;
Sample timeout: 超时时间;
BeanShell 是一种免费的 java 源码解释器,支持对象式的脚本语言,也可以嵌入到 java 源码中。添加了该处理器后,可直接在里面编写 java 代码,实现你要的功能操作。
用法类似 Beanshell 取样器,可以参考:Jmeter(十五) - 从入门到精通 - JMeter 导入自定义的 Jar 包 这篇文章。
1、我们先来看看这个BeanShell PreProcessor长得是啥样子,路径: 线程组 > 添加 > 前置处理器 > BeanShell 预处理程序 ,如下图所示:
2、关键参数说明如下:
Name: 名称,可以随意设置,甚至为空;
Comments: 注释,可随意设置,可以为空;
Language: 语言,开发脚本选择的语言,使用的 JSR223 语言,可根据需要选择;
Parameters: 参数,传递给脚本的参数;
File Name: 文件名,本地开发的脚本文件(会覆盖在 JMeter 里编写的脚本);
Script compilation caching: 存储编译的脚本,默认勾选;
Script: 要运行脚本。编写脚本的区域。
好了,今天到这里 JMeter 的所有前置处理器就已经介绍完了,感谢你耐心的阅读和学习。
您的肯定就是我进步的动力。如果你感觉还不错,就请鼓励一下吧!记得随手点波 *推荐 * 不要忘记哦!!!