新手区 jmeter 正则表达式你真的掌握了么

大话性能 · 2018年10月23日 · 最后由 大话性能 回复于 2018年10月23日 · 3592 次阅读

正则表达式:描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
对于正则表达式,相信很多人都知道或者听说过,但是很多人的第一感觉就是难学,因为看第一眼时,全是一堆各种各样的特殊符号,完全不知所云。
其实只是对正则不了解而以,了解了你就会发现,原来就这样啊。正则所用的相关字符其实不多,也不难记,更不难懂,唯一难的就是组合起来之后,可读性比较差,而且不容易理解。

本文旨在让大家对正则有一个基本的了解,能写得出简单的正则表达式,并在 Jmeter 中应用,以满足日常测试或性能测试中的需求。

更多测试技能干货,可以关注微信公众号<大话性能>

更多好文章

1、必须掌握的正则字符

先简要看下,最常用的字符含义。

"^" ^会匹配行或者字符串的起始位置有时还会匹配整个文档的起始位置

"$"  $会匹配行或字符串的结尾

"\w"匹配字母数字下划线

例如我要匹配"a2345BCD__TTz" 正则"\w+"  这里的"+"字符为一个量词指重复的次数 

"\s"匹配空格

例如字符 "a b c" 正则"\w\s\w\s\w"  一个字符后跟一个空格如有字符间有多个空格直接把"\s" 写成 "\s+" 让空格重复 

"."匹配除了换行符以外的任何字符

"[abc]": 字符组匹配包含括号内元素的字符

"*":   重复零次或更多(贪婪模式)

例如"aaaaaaaa" 匹配字符串中所有的a  正则"a*" 会出到所有的字符"a"

"+":   重复一次或更多次(懒惰模式)

例如"aaaaaaaa" 匹配字符串中所有的a  正则"a+"会取到字符中所有的a字符"a+""a*"不同在于"+"至少是一次而"*" 可以是0次

"?":   重复零次或一次

例如"aaaaaaaa" 匹配字符串中的a 正则  "a?" 只会匹配一次也就是结果只是单个字符a

"{n}":  重复n次

例如从"aaaaaaaa" 匹配字符串的a 并重复3次 正则"a{3}" 结果就是取到3个a字符 "aaa"

"{n,m}":  重复n到m次

例如正则 "a{3,4}" 将a重复匹配3次或者4次所以供匹配的字符可以是三个"aaa"也可以是四个"aaaa"正则都可以匹配到

"{n,}":  重复n次或更多次

{n,m}不同之处就在于匹配的次数将没有上限但至少要重复n次  正则"a{3,}" a至少要重复3次

"*?":   重复任意次但尽可能少重复

 "acbacb" 正则"a.*?b" 只会取到第一个"acb" 原本可以全部取到但加了限定符后只会匹配尽可能少的字符 "acbacb"最少字符的结果就是"acb"

"+?":  重复1次或更多次但尽可能少重复

与上面一样只是至少要重复1次

"??":  重复0次或1次但尽可能少重复

 "aaacb" 正则 "a.??b"只会取到最后的三个字符"acb"

"{n,m}?":  重复n到m次但尽可能少重复

 "aaaaaaaa"  正则 "a{0,m}" 因为最少是0次所以取到结果为空

以上就是正则表达式中最基础的部分知识,大家是必须知道的知识点,对于更加复杂部分的内容本文未涉及。其实你看多了,就知道是什么意思了,就和你一开始对 Linux 命令不熟悉一样,用多了自然而然就记住了。不过也可以先收藏着,当作字典查找。

写完正则表达式,最好自己先验证下是否和预想的一样,能够提取你想要的。大家随便百度一下在线正则表达式测试,就可以验证了。

2、正则如何在 jmeter 中运用

在使用 Jmeter 过程中,会经常使用到正则表达式提取器提取器,正则在做验证,与数据过滤时体现的威力是巨大的。

(1)引用名称:下一个请求要引用的参数名称,如填写 accesstoken,则可用 ${accesstoken}引用它。

(2)正则表达式:这个是重点,可以利用上面讲的那些内容提前自己想要的。

(3)模板:用 $$ 引用起来,如果在正则表达式中有多个正则表达式,则可以是 $2$,$3$ 等等,表示解析提取第几个值。如:$1$ 表示解析到的第 1 个值。

(4)匹配数字:可以理解为匹配到结果所出现的次数,比如需要设置匹配数字为 1,在 JMeter 中使用 1 来表示,通常情况下填 0 即可

(5)缺省值:如果参数没有取得到值,那默认给一个值让它取,我填的 Error。

3、最常见需求

应用的场景:B 接口需要使用 A 接口返回的数据,故需要对 A 接口的响应报文进行后置处理,提取响应内容中的某个字段。


下一个接口要用到 auth2 度值就可以通过 ${auth2}去使用了,这个是最常见的需求。

说明:
( ) :将 () 之间括起来的表达式定义为 “组”(group),并且将匹配这个表达式的字符保存到一个临时区域,我们主要就是利用这个元字符配合所指定的字符串匹配规则来进行匹配信息的提取;
.+: 一个以上的任意字符,通过贪婪型匹配策略进行表达式模板的匹配(最大匹配);
.+?:通过?元字符表示一个非贪婪模式匹配,即(最小匹配);

更多性能测试相关学习可以关注公众号大话性能。更多好文章

共收到 5 条回复 时间 点赞

好记性不如好整理😊

什么零宽断言什么的,深感头痛.
还有各种 /(?:)/ /(?#)/啥的,感觉要屎

hellohell 回复

是的,这部分比较高级了

看完我的表情是这样的 (?_?)

Kissshot 回复

有这么夸张么,我写的还只是基础的哦

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册