一、提取单个字符
分析数据:
{
"pageSize":20,
"totalPageNum":1,
"totalItemNum":1,
"currentPageNum":1,
"data":[
{
"domain":"testdomainadd0002.com",
"bookEndTime":"2020-08-25 22:50:00",
"type":"PreRelease",
"deleteTime":"2020-08-11",
"channels":[
{
"id":"91",
"name":"GuoYu",
"price":1,
"transferPrice":69
}
],
"_map":{
}
}
],
"code":"200",
"msg":"操作成功"
}
上面的特殊字符包括如下几个:
():封装了待返回的匹配字符串
. : 匹配任何字符
? :不要太贪婪,在找到第一个匹配后停止,如果没有?,在找到第一个name后,还会继续往后找,知道找完并输出最后一个数据
尽管上面的表达式可以达到目的,但是更有效率的表达式是:
其中[^"]-意味着匹配任何东西(除了")。在这种情况下,匹配引擎在找到第一个右侧"后,就会停止搜索。而 上面例子中的匹配引擎会去寻找
二、提取多个字符串
假如我要提取上述name的值GuoYu以及price的值1.0
符合要求的正则表达式:
"name":"([^"]+)","price":([^"]+)
这会创建两个组合,并用于jmeter正则表达式的模板,如$1$和$2$
JMeter正则表达式提取器会将组合的值放在指定变量中。
三、关键字
正则表达式使用特定字符作为关键字,这些字符对正则表达式引擎有特殊意义。在字符串中使用这些字符必须进行转义(使用反斜杠"\"),目的是将它们当成原始字符,而非正则表达式的关键字。下面是关键字和它们的含义
^ :^会匹配行或者字符串的起始位置,有时还会匹配整个文档的起始位置。
[abc] : 字符组,匹配包含括号内元素的字符。
* : 重复零次或更多(贪婪模式)。例如"cccccc" 匹配字符串中所有的c 正则:”c*” 会出到所有的字符”c”。
( ):组合。
[ ]:字符集合。
{n} : 重复n次。例如从"aaaaaaaa" 匹配字符串的a 并重复3次 正则:"a{3}" 结果就是取到3个a字符 "aaa"。
{n,} : 重复n次或更多次。与{n,m}不同之处就在于匹配的次数将没有上限,但至少要重复n次 如 正则"a{3,}" a至少要重复3次。
{n,m} : 重复n到m次。例如正则 "a{3,4}" 将a重复匹配3次或者4次;所以供匹配的字符可以是三个"aaa"也可以是四个"aaaa"正则都可以匹配到。
{n,m}? : 重复n到m次,但尽可能少重复。如 "aaaaaaaa" 正则 "a{0,m}" 因为最少是0次所以取到结果为空
+ : 重复一次或更多次(懒惰模式)。例如"aaaaaaaa" 匹配字符串中所有的a; 正则:"a+"会取到字符中所有的a字符,"a+"与"a*"不同在于"+"至少是一次而"*" 可以是0次。
? : 重复零次或一次。例如"aaaaaaaa" 匹配字符串中的a 正则 : "a?" 只会匹配一次,也就是结果只是单个字符a。
*? : 重复任意次,但尽可能少重复。如 "acbacb" 正则"a.*?b" 只会取到第一个"acb" 原本可以全部取到但加了限定符后,只会匹配尽可能少的字符 ,而"acbacb"最少字符的结果就是"acb"。
+? : 重复1次或更多次,但尽可能少重复。
?? : 重复0次或1次,但尽可能少重复。如 "aaacb" 正则 "a.??b"只会取到最后的三个字符"acb"。
.:任意匹配字符。
\:转义字符。
\w :匹配字母,数字,下划线,例如我要匹配”12345BCD__TTz" 正则:"\w+" 这里的"+"字符为一个量词指重复的次数。
\s :匹配空格。例如字符 "a b c" 正则:"\w\s\w\s\w" 一个字符后跟一个空格,如有字符间有多个空格直接把"\s" 写成 "\s+" 让空格重复
| -:选择符。
^ $:字符串或行的起始和结尾。
注意:ORO不支持\Q和\E关键字。
例如:需要提取_map中 的括号就得用到转义
四、实操项目例子
话不多说,我们来看一个例子,例子场景是我们需要在预订列表获取可预订的域名后,再根据其中一个域名获取其可预订的通道
1、首先可以像我一样,对一些服务器的参数做一个全局的参数化,server.csv文件遵循按行读取,逗号分隔多个参数的规则不多讲了
2、分别建立线程组、并建立HTTP Request、Regular Expression、View Results Tree,简单的架构大概是长这样:
3、可预订列表返回的参数有点复杂:可以像我一样,用RegExp Tester模式下进行正则表达式调试
4、调试正确后,即可在Regular Expression Extractor中设值
说明:
Name of created variable:引用名称,在HTTP等请求中,引用此数据,需要用到的名称
Regular Expression:正则表达式,用于将需要的数据提取出来
Template:模板,表示使用提取到的第几个值:
$-1$:表示取所有值
$0$:表示随机取值
$1$:表示取第1个
$2$:表示取第二个
以此类推:$n$:表示取第n个
Match No:匹配数字,0 代表随机取值,1 代表全部取值
Default Value:缺省值,如果正则表达式没有搜找到值,则使用此缺省值
5、${domain}可以引用到获取可预订列表返回的域名
6、查看结果可以发现返回成功
这就是一个简单的应用正则表达式串联关联接口测试的例子!