如何在JMeter中用正则提取指定下拉框的option名称?
在JMeter中提取无效XML格式HTML的下拉列表值
针对无法用XPath提取的情况,以下几种方法可实现从id为tutu的<select>标签中提取所有<option>的name属性值:
方法1:CSS/JQuery提取器(推荐)
CSS选择器不依赖XML有效性,是最简便的方案:
- 在目标请求下添加「CSS/JQuery提取器」
- 配置参数:
- 引用名称:
tutu_names(自定义变量前缀) - CSS/JQuery表达式:
select#tutu option(定位tutu下的所有option) - 属性:
name(指定提取的属性名) - 匹配数字:
-1(提取所有匹配项,写1则只取第一个)
- 引用名称:
配置完成后,JMeter会生成变量:tutu_names_1=name1、tutu_names_2=name2、tutu_names_3=name3,以及tutu_names_matchNr=3(匹配总数)。
方法2:正则表达式提取器
通过正则定位目标内容:
- 在目标请求下添加「正则表达式提取器」
- 配置参数:
- 引用名称:
tutu_names - 正则表达式:
<select id="tutu"[\s\S]*?option selected name="(.*?)"(匹配tutu块内的option的name值) - 模板:
$1$(提取括号内的内容) - 匹配数字:
-1 - 勾选「单行」模式(让
.匹配换行符)
- 引用名称:
方法3:JS223提取器(Groovy脚本)
用脚本灵活处理非标准HTML:
- 在目标请求下添加「JS223提取器」,选择语言为
Groovy - 输入以下脚本:
def response = prev.getResponseDataAsString() // 截取id为tutu的select区块 def tutuMatcher = response =~ /<select id="tutu"[\s\S]*?<\/select>/ if (tutuMatcher.find()) { // 提取区块内所有name属性值 def nameMatcher = tutuMatcher.group() =~ /name="(.*?)"/ def index = 1 while (nameMatcher.find()) { vars.put("tutu_names_${index}", nameMatcher.group(1)) index++ } vars.put("tutu_names_matchNr", String.valueOf(index - 1)) }
内容的提问来源于stack exchange,提问作者Olof
相关产品推荐
相关产品推荐

