在测试过程中,某些操作步骤与其相邻步骤存在一定的依赖关系,导致某个步骤的输入数据来源于上一步的返回数据,这时就需要“关联”来建立步骤之间的联系。从前面接口的响应结果中提取数据,作为下一个接口的请求参数。
Regular Expression Extractor(正则表达式提取器)
从服务器的响应中通过使用perl的正则表达式提取值。该元素会作用在指定范围取样器,用正则表达式提取所需值,生成模板字符串,并将结果存储到给定的变量名中。
Apply to(作用范围)
1)Main sample and sub-samples:作用于父节点的取样器及对应子节点的取样器
2)Main sample only:仅作用于父节点的取样器
3)Sub-samples only:仅作用于子节点的取样器
4)JMeter Variable:作用于JMeter变量(输入框内可输入JMeter的变量名称)。
Field to check(要检查的响应字段)
1)主体:响应报文的主体
2)Body(unescaped):主体,响应的主体内容且替换了所有的html转义符,注意html转义符处理时不考虑上下文,因此可能有不正确的转换,不太建议使用。
3)Body as a Document:从不同类型的文件中提取文本,注意这个选项比较影响性能。
4)Response Headers:响应信息头
5)Request Headers:请求信息头
6)URL:统一资源定位符,即Internet上用来描述信息资源的字符串。
7)响应代码:响应状态码,例如200、404、500等。
8)响应信息:响应信息
Name of created variable(引用名称):提取结果存储到JMeter变量的名称。
Expression Extractor(正则表达式):使用正则表达式解析响应结果,“()” 表示要提取的数据。
Template(模板):$0$代表全部结果,$1$代表第1个“()” 提取的数据,$1$$2$代表拼接第1个“()”和第2个“()”提取的数据,$3$,$4$代表用一个逗号连接第3个“()”和第4个“()”提取的数据。
Match No.(匹配数字):-1代表全部,0代表随机,1代表第一个(为-1时,要用variable_1、variable_2。。引用)。
Default Value(缺省值):如果没有匹配到任何值,该变量的默认值。
JSON Extractor(JSON提取器)
从接口响应返回的json中提取内容,作为变量在不同的请求中引用。
JSON Path expressions:调试通过的json path表达式。
Match No.(匹配数字):-1代表全部,0代表随机,1代表第一个。
Compute concatenation var(suffix_ALL):是否统计所有,即将匹配到的所有值保存,名为“变量名_ALL”。
XPath Extractor(XPath提取器)
XPath 是一门在 XML 文档中查找信息的语言,XPath 可用来在 XML 文档中对元素和属性进行遍历。
XML Parsing Options(要解析的XML参数)
1)Use Tidy:当需要处理的页面是HTML格式时,必须选中该选项;如果是XML或XHTML格式(例如RSS返回),则取消选中(Quiet:只显示需要的HTML页面,Report errors:显示响应报错,Show warnings:显示警告)。
2)Use Namespaces:如果启用该选项,后续的XML解析器将使用命名空间来分辨。
3)Validate XML:根据页面元素模式进行检查解析
4)Ignore Whitespace:忽略空白内容
5)Fetch external DTDs:如果选中该项,外部将使用DTD规则来获取页面内容。
Return entire XPath fragment of text content:返回文本内容的整个XPath片段
一次性提取多个字段
一次性取出第一个位置的id、title、imgUrl字段
在其他元件中可以通过 ${id}、${title}、${imgUrl} 引用
提取最后一个id(id个数不确定)
方法一:使用嵌套函数
1)通过正则表达式提取器或JSON提取器,提取所有id
2)通过 ${__V(id_${id_matchNr})} 引用
方法二:使用BellShell 后置处理器
1)通过正则表达式提取器或JSON提取器,提取所有id
2)添加BeanShell 后置处理器
String str = vars.get("id_matchNr"); String var = "id_"+str; String value = vars.get(var); vars.put("id_last",value);
3)通过 ${id_last} 引用
提取最大的level并加1(返回结果未按level排序)
1)使用提取器提取所有的 level
2)使用BeanShell后置处理器找到最大的level,再level+1
String num = vars.get("level_matchNr"); int n = Integer.parseInt(num); String str,value; String max = vars.get("level_1"); for(i = 2;i <= n;i++){ str = "level_"+i; value = vars.get(str); if(max < value){ max = value; } } int level = Integer.parseInt(max); level = level+1; vars.put("level_new",Integer.toString(level));
提取name对应的id
方法一:使用正则表达式提取器
方法二:使用BellShell 后置处理器
1)使用提取器提取所有的id、name
2)使用BeanShell后置处理器遍历name,找出符合条件name对应的id
String num = vars.get("id_matchNr"); int n = Integer.parseInt(num); String str,id,name,value; for(int i = 1;i <= n;i++){ str = "name_" + i.toString(); name = vars.get(str); if(name == "test01"){ id = "id_" + i.toString(); value = vars.get(id); vars.put("id_select",value); break; } }