1、正则表达式提取器介绍

如果有这样的情况:一个完整的操作流程,需要先完成某个操作,获得某个值或数据信息,然后才能进行下一步的操作,也就是常说的接口关联,将上一个请求的响应结果作为下一个请求的参数。

在JMeter中,可以利用正则表达式提取器来帮助我们完成这一动作。

2、正则表达式提取器界面详解

添加正则表达式提取器组件操作:选中“取样器”右键 —> 添加 —> 后置处理器 —> 正则表达式提取器

界面如下图所示:

下面是正则表达式提取器组件的详细说明:

  • 名称正则表达式提取器组件的自定义名称,见名知意最好。
  • 注释:即添加一些备注信息,对该正则表达式提取器组件的简短说明,以便后期回顾时查看。

(1)Apply to:作用范围(返回内容的取值范围)

  • Main sample and sub-samples:作用于父节点的取样器及对应子节点的取样器。
  • Main sample only:仅作用于父节点的取样器。
  • Sub-samples only:仅作用于子节点的取样器。
  • JMeter Variable Name to use:作用于JMeter变量(输入框内可输入JMeter的变量名称),从指定变量中提取需要的值。

(2)Field to check:要检查的响应字段

  1. 主体:响应报文的主体,最常用。
  2. Body(unescaped):是替换了所有的HTML转义符的响应主体内容,注意HTML转义符处理时不考虑上下文,因此可能有不正确的转换,不太建议使用。(即:替换了转义码的Body部分)
  3. Body as a Document:从不同类型的文件中提取文本,注意这个选项比较影响性能。
  4. Response Headers:从响应头信息中提取数据,如果你使用中文语言的JMeter,会看到这一项是信息头,这是中文翻译问题,应以英文为准。
  5. Request Headers:从请求头信息中提取数据。
  6. URL:从请求URL中提取数据。
  7. 响应码(Response Code):提取响应状态码,比如:200、404等。
  8. 响应信息(Response Message):响应信息中提取数据。

(3)第三部分内容

  • 引用名称(Name of created variable):定义提取值的引用变量名称。
  • 正则表达式(Regular Expression):用于提取值的正则表达式。
  • 模板(Template ($i$ where iis capturing group number, starts at 1)):正则表达式的提取模式。如果正则表达式有多个提取结果,则结果是数组形式,模板为$1$,$2$,表示把解析到的第几个值赋给变量,从1开始匹配,以此类推。若只有一个结果,则只能是$1$
  • 匹配数字(0代表随机):正则表达式匹配数据的结果可以看做一个数组,表示如何取值:0代表随机取值,正数n则表示取第n个值,比如1代表第一个,2代表第二个,以此类推。负数则表示提取所有符合条件的值,如-1。
  • 缺省值(Default Value):匹配失败时候的默认值;通常用于后续的逻辑判断,一般通常为特定含义的英文大写组合,比如:ERROR等。
  • Use empty defau't value:使用空值为默认值。

3、正则表达式提取器的使用

需求

  1. 访问网易官网,获取title值。
  2. 将title值放入百度搜索框,进行搜索。

(1)测试计划内包含的元件

添加元件操作步骤

  1. 创建测试计划。
  2. 创建线程组:选中“测试计划”右键 —> 添加 —> 线程(用户) —> 线程组
  3. 在线程组下,添加取样器“HTTP请求”组件:选中“线程组”右键 —> 添加 —> 取样器 —> HTTP请求
  4. 在取样器下,添加后置处理器“正则表达式提取器”组件:选中“取样器”右键 —> 添加 —> 后置处理器 —> 正则表达式提取器
  5. 在线程组下,添加监听器“察看结果树”组件:选中“线程组”右键 —> 添加 —> 监听器 —> 察看结果树

提示:需要重复添加的组件这里不重复描述。

最终测试计划中的元件如下:

点击运行按钮,会提示你先保存该脚本,脚本保存完成后会直接自动运行该脚本。

(2)请求一界面内容

非常简单的Get请求,之前说了很多次了,这里就不做解释了。

界面内容如下图所示:

(3)正则表达式提取器界面内容

我们在编辑正则表达式提取器组件之前,一般先请求一下需要提取返回数据的接口。

因为我们需要先查看一下,需要提取的数据在什么位置,如下图所示:

然后选择RegExp Tester视图模式,先手动编写正则表达式,看看是否能够取到需要的数据。

如下图所示:

之后我们就可以编写正则表达式提取器组件界面了,如下:

编写引用名称、正则表达式、选择第几个模版,匹配数据选择。

正则表达式提取器组件提取出来的数据,会存储在线程变量中,供其他后续接口使用。

(4)请求二界面内容

填写接口的基本请求信息,然后把正则表达式提取器提取出来的数据,作为参数化变量应用到请求中。

如下图所示:

(5)查看结果

我们可以看到再第二个请求中,拿到了第一个请求提取出来的数据“网易”。

如下图所示:

提示:可以添加Debug PostProcessor(调试后置处理器),或者Debug Sampler(调试取样器),来查看正则表达式提取器中,提取出的内容是否正确。

注意:正常跑用例时删除或禁用它们。

4、总结

正则表达式提取器可以用于对任何文本的提取。提取完参数后,相当于把参数以 key-value 的形式放到参数池,以便后面的请求使用。

注意:不能超前引用。

正则表达式提取器XPath提取器的区别:

  1. 正则表达式提取器可以用于对页面任何文本的提取,提取的内容是根据正则表达式在页面内容中进行文本匹配;
  2. XPath提取器则可以提取返回页面任意元素的任意属性;
  3. 如果需要提取的文本是页面上某元素的属性值,建议使用XPath Extractor;
  4. 如果需要提取的文本在页面上的位置不固定,或者不是元素的属性,建议使用正则表达式提取器。

5、正则表达式简单说明

正则表达式(Regular Expression):使用正则表达式解析响应结果,()表示提取字符串中的部分值,请不要使用||,除非你本身需要匹配这个字符。

  1. .代表匹配任意一个字符。
  2. []表示取值范围。

    比如:[0-9]代表匹配0-9之间任意一个数字。

    [a-z]代表匹配a-z之间任意一个字符。

    [A-Z]代表匹配A-Z之间任意的一个字符。
  3. +:匹配前面的子表达式一次或多次。
  4. ?:代表匹配一次或一次也没有。这个符号还有特殊的用法,当放到*号后面的时候,标识取到的数据是非贪婪的。

    说明:贪婪与非贪婪模式是两种不同的表达式匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配,即匹配第一个。
  5. *:匹配前面的子表达式零次或多次。
  6. \d:匹配一个数字字符,等价于[0-9]
  7. \w:匹配包括下划线的任何单词字符,等价于[A-Za-z0-9_]
  8. {3}:代表匹配3次,示例如下:

    [1-9][0-9]{4,14}:代表前面的子表达式,至少匹配4次,最多不超过14次。

    1[358]\d{9}:匹配手机号。

    [a-zA-Z0-9_]+@[a-zA-Z0-9]+\.[a-zA-Z]+:匹配邮箱。

提示:常用正则表达式查询:http://tool.oschina.net/uploads/apidocs/jquery/regexp.html

『动善时』JMeter基础 — 36、JMeter接口关联【正则表达式提取器】的更多相关文章

  1. 『动善时』JMeter基础 — 8、JMeter主要元件介绍

    目录 1.测试计划(Test Plan) 2.线程组 3.取样器(sampler) 4.逻辑控制器(Logic Controller) 5.配置元件(Config Element) 6.定时器(Tim ...

  2. 『动善时』JMeter基础 — 37、将JMeter测试结果写入Excel

    目录 1.环境准备 (1)引入操作Excel文件的基础JAR包 (2)引入封装自定义操作Excel文件的JAR包 2.准备测试需要的数据 3.测试结果写入Excel演示 (1)测试计划内包含的元件 ( ...

  3. 『动善时』JMeter基础 — 40、JMeter中ForEach控制器详解

    目录 1.什么是逻辑控制器 2.ForEach控制器介绍 3.ForEach控制器的使用 (1)测试计划内包含的元件 (2)获取学院列表请求内容 (3)JSON提取器内容 (4)ForEach控制器内 ...

  4. 『动善时』JMeter基础 — 7、jmeter.properties文件常用配置

    目录 1.默认语言设置 2.配置默认编码格式 3.GUI图标放大比例设置 4.功能区工具栏图标大小设置 5.视图区目录树图标大小设置 6.内容区编辑字体设置 7.添加JMeter元素快捷键设置 8.捕 ...

  5. 『动善时』JMeter基础 — 33、JMeter察看结果树的显示模式详解

    目录 1.CSS Selector Tester视图 2.HTML查看器 (1)HTML视图 (2)HTML(download resources)视图 (3)HTML Source Formatte ...

  6. 『动善时』JMeter基础 — 38、JMeter中实现跨线程组关联

    目录 1.JMeter中实现跨线程组关联说明 (1)JMeter中实现跨线程组关联步骤 (2)测试计划内包含的元件 2.用户登陆请求的相关操作 (1)进行登陆操作获取Cookie信息 (2)把Cook ...

  7. 『动善时』JMeter基础 — 6、使用JMeter发送一个最基础的请求

    目录 步骤1:创建一个测试计划 步骤2:创建线程组 步骤3:创建取样器 步骤4:创建监听器 步骤5:完善信息 步骤6:保存测试计划 步骤7:查看结果 总结:JMeter测试计划要素 当我们第一次打开J ...

  8. 『动善时』JMeter基础 — 34、JMeter接口关联【XPath提取器】

    目录 1.XPath提取器介绍 2.XPath提取器界面详解 3.XPath提取器的使用 (1)测试计划内包含的元件 (2)网易首页请求界面内容 (3)XPath提取器界面内容 (4)百度首页请求界面 ...

  9. 『动善时』JMeter基础 — 15、使用JMeter实现上传文件

    目录 1.用于演示的项目说明 2.测试计划内包含的元件 3.HTTP请求界面内容 4.查看结果 5.总结 6.补充:MIME类型简介 (1)MIME说明 (2)常见类型 在上一篇文章[使用JMeter ...

随机推荐

  1. 锁定项目的 node 版本

    一些老项目对 node 版本是有要求的,往往使用默认的新版本包安装不上,scripts 也跑不起来. 之前就遇到过运行一个小程序项目时,根据文档来,第一步安装就出错.本着办法总比问题多的理念,来一个解 ...

  2. dalvik浅析三:类加载

    android的安装包是个apk文件,其中包含dex.资源及签名文件.其中dex是包含程序运行的类代码,而android是运行在dalvik(5.0之前)上的.本篇我们就来看下dalvik是如何把de ...

  3. poj2987最大权闭包(输出最少建塔个数)

    题意:      公司要裁员,每个员工被裁掉之后都会有一定的收益(正或者负),有一些员工之间有限制关系,就是裁掉谁之前必须要先裁掉另一个人,问公司的最大收益和最大收益前提下的最小裁员人数? 思路:   ...

  4. python 压缩模块大杂烩(zipfile,bz2,lzma,gzip,tarfile,zlib)

    [*] 以下压缩模块请结合python的官方文档(https://docs.python.org/3.5/library/index.html)来实践或者对比(我的是python 3.5) 1.pyt ...

  5. Windbg 字符串条件断点

    0x01 前言 Windbg 作为 Windows 下的主流调试器,除了人机交互相比其他调试器略有不足外,其他功能都是十分强大的存在. 在所有的调试器中断点功能都是必不可少的,Windbg 可以使用 ...

  6. Postman中如何实现接口之间的关联?

    Postman中如何实现接口之间的关联? 不单单说Postman中,我为什么拿Postman举例,因为它比较简单一点. 那如果我只问你如何实现接口之间的关联,那肯定有很多的方式,Postman只是其中 ...

  7. 分布式ID

    需求 全局唯一 高性能 高可用 简单易用 UUID 优点: 唯一 不依赖于任何第三方服务 缺点: 是字符串类型而非数字,不满足数字ID的需求 字符串太长了,DB查询效率受影响 数据库自增ID 如果使用 ...

  8. [题解] CF786B Legacy

    前言 题目链接 题意 有 \(n\) 个点,\(q\) 次连边,以及起点 \(s\) .连边具体分三种: \(1\) \(v\) \(u\) \(w\) 从 \(v\) 到 \(u\) 连一条边. \ ...

  9. 『动善时』JMeter基础 — 17、JMeter配置元件【HTTP请求默认值】

    目录 1.HTTP请求默认值介绍 2.HTTP请求默认值界面 3.HTTP请求默认值的使用 (1)用于演示的项目说明 (2)测试计划内包含的元件 (3)说明HTTP请求默认值用法 4.总结 5.拓展知 ...

  10. Java方法区的理解

    方法区逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩. 但对于HotSpotJVM而言,方法区还有一个别名叫做Non-Heap,目的就是要和堆分开 所以方法区看作是一块 ...