一、Jmeter之if控制器&正则表达式提取器
前一课的思考解答。
场景:
用户在注册页面输入用户名时,
如果是已存在的用户名会跳转到登录页面进行登录,进入查询页面。
如果是不存在的用户名就会进行注册,再跳转到登录页面进行登录,进入查询页面。
是两个不同的流程,如何控制用户名的效验结果不同时,走不同的流程呢,这里要用到Jmeter的if控制器。
(1)抓取用户效验请求:
-
在注册页面随便输入一个用户名,用Fiddler抓包
- 用前面学过的,使用黑夜小怪插件,将Fiddler抓包数据导入Jmeter
-
跑一次,看到用户效验的响应报文如下:
-
当注册用户名是已存在的用户名时,响应报文如下
-
可以通过判断用户效验的响应报文字段,来控制要走的流程。
(2)if控制器
-
添加:线程组添加-逻辑控制器-如果(if)控制器
-
我们可以看到if控制器是要填写条件的,我们的条件是根据响应报文的字段中提取。需要与正则表达式提取器搭配使用
(3)正则表达式提取器
-
Jmeter里的正则表达式提取器的作用是提取响应报文的某个字段存在变量中。
-
"respDesc":"(.*?)"}
括号可以看做定位,左边字段是左边界,右边字段是右边界。
还记得我们要根据什么来控制if的判断吗?
我们截取含有需要判断的部分 "respDesc":"成功"} 作为响应报文中需要判断的字段,把需要判断的“成功”改为(.*?),就得到我们的正则表达式。
即:把需要提取的字符串前后都复制下来,保证其他部分是不变的,然后需要提取的字符串用(.*?)代替
-
在if控制器里填:
if控制器的条件是正则表达式中的result等于'成功'时。
-
把满足条件要走的流程放在if控制器内部
-
复制上面流程,把if条件改为不等于成功,再把注册接口删除。就完成我们第二条流程。
当然此处有些不严谨,因为用户名效验为已存在的用户名,但是其实可能并不是我的账号,我们暂定情景流程是按文章开头来的。
二、正则表达式拓展
正则表达式,又称规则表达式。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
匹配字符
[ ] 匹配这个范围内的任意字符;如,[a-z]匹配小写字母a到z这个范围的任意字符
. 匹配任意字符;
\w 匹配字母或数字、或下划线。
\W 匹配除英文、数字外的字符
\d 匹配0-9,等价[0-9]
\D 匹配除数字外的字符匹配表达式的次数
? 匹配表达式0-1次
* 匹配表达式0到无穷次
+ 匹配表达式1到无穷次
{m,n} 匹配表达式m到n次
{m, } 匹配表达式m到无穷次
3.贪婪模式
贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配。与之相反的是,非贪婪模式,非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配。在匹配优先量词后加上“?”,就是非贪婪模式。
4.实例
-
菜鸟工具-正则表达式在线测试
可以使用这个网站进行正则表达式练习。
贪婪模式:
非贪婪模式: