导读
在jmeter中,正则表达式提取器是经常用到的,其实也比较简单,总之我比较喜欢用这个,也没遇到过提取不到的问题,但是正则却坑了不少测试人员。
01、一个正则提取问题
前几天,有朋友咨询这样一个问题:服务器返回:name="tom" value="jerry" ,要提取出name的值和value的值。
其实,我觉得这个需求是不明确的,到底是name和value提取出来拼接为一个字符串呢?还是分别保存name和value的值?我在群里问这位提问的群友,没答复,其实我都想忽略这个问题了,但是觉得这还是比较重要且基础的一个知识点。
既然我说简单,那就一起跟着我的思路来操作一遍吧,我也当回顾练手了。前提是需要安装jmeter,参考:
02、安装Dummy插件
这个插件可以模拟服务器返回,相当于一个mockserver了。
首先安装Dummy,选项--插件管理--可选插件--Dummy Sampler。
勾选后,点击右下方开始安装,安装完成后会自动重启jmeter。
03、模拟响应
添加线程组,在线程组下添加Dummy取样器(在Dummy取样器的响应数据中填入模拟返回数据)、查看结果树监听器,在Dummy下添加正则表达式提取器、调试后置处理程序(用于查看提取结果的)。
04、正则基础
参考:
. 匹配除“\r\n”之外的任何单个字符。要匹配包括“\r\n”在内的任何字符,请使用像“[\s\S]”的模式。
* 匹配前面的子表达式(也可以是一个字符)任意次。例如,zo*能匹配“z”,也能匹配“zo”以及“zoo”。*等价于o{0,}。
+ 匹配前面的子表达式一次或多次(大于等于1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。
? 匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“do”或“does”中的“do”。?等价于{0,1}。
组合:
.*具有贪婪的性质,匹配到不能匹配为止,最大匹配原则。
+或*后跟?表示非贪婪匹配,即尽可能少的匹配,最小匹配原则。
.*? 表示在能匹配成功的前提下尽可能少的匹配,最小匹配原则。
05、name和value提取为一个字符串
字符串保存到name_value
运行结果
也可以用其它字符拼接,比如-,即如果模板写为:$1$-$2$,结果就是:name_value=tom-jerry,如果要分别保存,就需要beanshell处理这个字符串了(这里不做演示,需要脚本的朋友可以后台回复“微信”联系获取),也可以用下面的简单方式。
06、name和value分别保存
name
value
运行结果