后置处理器之正则表达式提取器详解

 

by:授客 QQ:1033553122

1. 添加正则表达式提取器

右键线程组->添加->后置处理器->正则表达式提取器

2. 提取器配置介绍

说明:

Apply to

Main sample only - 仅作用于Main sample

Sub-samples only - 仅作用于sub-sample

Main sample and sub-samples - 作用于两者

JMeter Variable - 仅作用于命名变量

提取器按顺序,作用于所有满足条件的sample。比如有一个Main sampler和3个子sub-sample,每个都包含一个匹配正则表达的值,也就是说正则表达式总的匹配4个值。

如果设置匹配数字为3,选择Sbu-samples only,提取器将匹配第三个sub-sample;

如果设置匹配数字为3,选择Main sample and sub-samples,提取器将匹配第二个sub-sample;

如果设置匹配数字为0,或者负数,提取器将处理所有满足的sample;

如果设置匹配数字大于0,那么一旦找到足够匹配的将停止匹配

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

Body - 响应体(包含请求头)

Body (unescaped) - 所有html转义字符都被替换后的响应体。需要注意的是,jmeter不会根据上下文处理html转义字符,所以可能会有不正确替换,另外,该选项很影响性能,仅在绝对必要并且意识到其影响的情况下使用。

Body as a Document - 通过Apache Tika,从各种类型的文档中提取文本。注意,该选项很影响性能

Request Headers - 请求头,可能不适用非HTTP sample

Response Headers - 响应头,可能不适合非HTTP sample

URL

Response Code - 响应状态码,比如 200

Response Message - 响应消息,比如 OK

引用名称

用于存储结果的变量名称,自定义输入。需要注意的是,每个匹配组的名称为 refname_g#。其中 refname 为输入的变量名称, # 为组号。group0 为整个匹配, group1 为第1组

正则表达式

至少包含一组(),以捕获匹配的字符串,除非模板使用$0$

模板

$1$ 表示 group1

$2$ 表示 group2

$0$ 表示整个匹配的整个表达式

 

匹配数字(0表示随机)

0 表示随机

大于0的正数N 表示选择第N个匹配的

负数表示获取全部,供For Each 控制器使用

正则表达式,模板和匹配数字的关系(个人理解)

$0$  表示存储整个正则表达式匹配的值,分组名称:refname_g0

$1$,$2$,…,$N$ 分别存储正则表达式匹配到的第1组,第2组,…,第N组的值,即同正则表达式中,从左往右的每个括号“(……)”里的表达式匹配到的值一一对应,分组名称:refname_gN(此处,N为正整数)

匹配数字N,代表了索引,从1开始,0表示随机,负数表示全部,需结合For Each 控制器使用。正则表达式可能会匹配多个值,所以每个组都可能会有多个匹配的值,所以,需要指定取哪个值(此处,N为0,整数)

也就是说,$x$ 指定了从从哪个、哪些组取数据, 匹配数字指定了每个组中待取的目标值。注意,模板支持多个组,比如$1$$2$…$N$,对应的,${refname}的取值为每个组中对应索引值按模板顺序拼接后的值

总之,默认情况下,${refname}的值,就是根据上述规则取的,当然我们可以通过 ${refname_g#}的方式,获取指定组中的数据,比如${refname_g0},${refname_g1},

${refname_g2}会根据匹配数字,分别从第0,1,2组中取对应的值。

缺省值

如果正则表达式没有匹配到值,则设置变量${var}为默认的值,否则引用了${var}的地方,不会替换${var}为对应的变量值。

Use empty default value 如果勾选,则设置默认值为空字符串

3. 例子

HTTP2请求响应内容:

{'bagNo': '94509771001', 'destDeptCode': '755AB'}{'bagNo': '94509772001', 'destDeptCode': '755CD'}{'bagNo': '94509773001', 'destDeptCode': '755EF'}

以下是相同正则表达式下,不同模板及匹配数字下运行的不同结果:

正则表达式:'bagNo': '(.+?)', 'destDeptCode': '(.+?)',

实验1

1、

模板:$1$

匹配数字:0

${value}取值:每次从94509771001,94509772001,94509773001三者中随机取一个

2、

模板:$1$

匹配数字:1

${value}取值:94509771001

3、

模板:$1$

匹配数字:2

${value}取值:94509772001

实验2

1、

模板:$2$

匹配数字:1

${value}取值:755AB

2、

模板:$2$

匹配数字:2

${value}取值:755CD

实验3

1、

模板:$1$$2$

匹配数字:1

${value}取值:94509771001755AB

2、

模板:$2$$1$

匹配数字:2

${value}取值:755CD94509772001

实验4

1、

模板:$0$

匹配数字:1

${value}取值:'bagNo': '94509771001', 'destDeptCode': '755AB',

2、

模板:$0$

匹配数字:2

${value}取值:'bagNo': '94509772001', 'destDeptCode': '755CD',

4. 正则表达式说明

():封装了待返回的匹配字符串。

.:匹配任何字符串。

+:一次或多次。

?:在找到第一个匹配项后停止

5. 参考链接:

http://jmeter.apache.org/usermanual/regular_expressions.html

http://jmeter.apache.org/usermanual/component_reference.html#Regular_Expression_Extractor

JMeter 后置处理器之正则表达式提取器详解的更多相关文章

  1. jmeter后置处理器之Json提取器详解

    此提取器用于提取请求返回结果中的某个值或者某一组值,用法比正则表达式要简单,标准写法为$.key,其中key为返回结果map中的一个键,如果是多层则继续用.key进行即可,如果遇到key的value值 ...

  2. Jmeter后置处理器,正则表达式提取器的使用

    [使用场景]:下一个请求参数需要从上一个请求的响应数据中获取 [jmeter正则表达式说明]:使用perl正则表达式(可参考:http://www.runoob.com/perl/perl-regul ...

  3. Jmeter 正则表达式提取器详解(Regular Expression Exactor)

    Jmeter 正则表达式提取器详解(Regular Expression Exactor) Name(名称):随意设置,最好有业务意义. Comments(注释):随意设置,可以为空 Apply to ...

  4. jmeter数据关联_后置处理器_正则表达式提取器

  5. jmeter后置处理器之正则表达式

    一.基本用法——提取某个值 场景:提取某个值,保存成变量,供后面的接口使用 步骤: 1.运行脚本,从响应结果中查找要提取的值,找到左右边界. 例如要获取“patientInfoId”作为下一个请求的参 ...

  6. jmeter-提取器之正则表达式提取器

    在接口测试中,有很多的接口参数值是需要从上一个接口的返回值中获取的,这个时候就可以用正则表达式提取器啦 例如: 接口1  /user/login 返回{ "user_ticket" ...

  7. jmeter之json提取器详解

    Json提取器详解 *Apply to:参照正则表达式提取器 *Names of created:自定义变量名. 变量名可以填写多个,变量名之间使用分号进行分隔. 一旦变量名有多个,则下方的json ...

  8. Jmeter学习笔记(十九)——后置处理器之正则表达式的使用

    一.正则表达式提取器的作用 允许用户从服务器的响应中通过使用perl的正则表达式提取值.作为一个后置处理器,该元素会作用在指定范围的取样器,应用正则表达式,提取所需要的值,生成模板字符串,并将结果存储 ...

  9. Jmeter(五)关联之正则表达式提取器

    我们在用Jmeter做接口或者性能测试时,经常会碰到第二个请求提交的的参数要从第一个请求返回的参数中获取,而这些参数值并不是固定的,是动态变化的,这种场景就要用到关联 Jmeter提供了一种叫做正则提 ...

随机推荐

  1. KNN算法基本实例

    KNN算法是机器学习领域中一个最基本的经典算法.它属于无监督学习领域的算法并且在模式识别,数据挖掘和特征提取领域有着广泛的应用. 给定一些预处理数据,通过一个属性把这些分类坐标分成不同的组.这就是KN ...

  2. Scala - 快速学习08 - 函数式编程:高阶函数

    函数式编程的崛起 函数式编程中的“值不可变性”避免了对公共的可变状态进行同步访问控制的复杂问题,能够较好满足分布式并行编程的需求,适应大数据时代的到来. 函数是第一等公民 可以作为实参传递给另外一个函 ...

  3. Lock wait timeout exceeded

    MySQL事务锁问题-Lock wait timeout exceeded问题: 一次ios在请求接口响应时间超长,耗时几十秒才返回错误提示,后台日志中出现Lock wait timeout exce ...

  4. 算法:时间复杂度+二分查找法(Java/Go/Python)实现

    导读 曾几何时学好数据结构与算法是我们从事计算机相关工作的基本前提,然而现在很多程序员从事的工作都是在用高级程序设计语言(如Java)开发业务代码,久而久之,对于数据结构和算法就变得有些陌生了,由于长 ...

  5. 关于mysql的update、delete、和insert into能否使用别名问题

    在工作中遇到这样一个问题,就是mysql在insert into时能不能使用别名,大家会很奇怪为什么insert into使用别名呢?原因在于原来的项目中使用了user表,新项目要将user表拆分为u ...

  6. deque源码4(deque元素操作:pop_back、pop_front、clear、erase、insert)

    deque源码1(deque概述.deque中的控制器) deque源码2(deque迭代器.deque的数据结构) deque源码3(deque的构造与内存.ctor.push_back.push_ ...

  7. MySQL导入导出实践

    最近一次数据迁移,需要将MySQL的数据导出.处理后导入到新表和ES.这里做个简单记录,方便后续查询. 注: 为了写文章方便及隐私安全,实际内容会有所简化.例如表结构简化.数据库连接部分全部用 xxx ...

  8. Elasticsearch实践(二):搜索

    本文以 Elasticsearch 6.2.4为例. 经过前面的基础入门,我们对ES的基本操作也会了.现在来学习ES最强大的部分:全文检索. 准备工作 批量导入数据 先需要准备点数据,然后导入: wg ...

  9. linux 两个查找工具 locate,find

    linux 中有很多查找工具,今天主要讲解locate,find两个工具. 一.locate 1.性能介绍 查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db 注意 ...

  10. TensorFlow入门(一)

    目录 TensorFlow简介 TensorFlow基本概念 Using TensorFlow Optimization & Linear Regression & Logistic ...