1、正则表达式提取器介绍
如果有这样的情况:一个完整的操作流程,需要先完成某个操作,获得某个值或数据信息,然后才能进行下一步的操作,也就是常说的接口关联,将上一个请求的响应结果作为下一个请求的参数。
在JMeter中,可以利用正则表达式提取器来帮助我们完成这一动作。
2、正则表达式提取器界面详解
添加正则表达式提取器组件操作:选中“取样器”右键—>添加—>后置处理器—>正则表达式提取器。
界面如下图所示:
下面是正则表达式提取器组件的详细说明:
- 名称:正则表达式提取器组件的自定义名称,见名知意最好。
- 注释:即添加一些备注信息,对该正则表达式提取器组件的简短说明,以便后期回顾时查看。
(1)Apply to:作用范围(返回内容的取值范围)
- Main sample and sub-samples:作用于父节点的取样器及对应子节点的取样器。
- Main sample only:仅作用于父节点的取样器。
- Sub-samples only:仅作用于子节点的取样器。
- JMeter Variable Name to use:作用于JMeter变量(输入框内可输入JMeter的变量名称),从指定变量中提取需要的值。
(2)Field to check:要检查的响应字段
- 主体:响应报文的主体,最常用。
- Body(unescaped):是替换了所有的HTML转义符的响应主体内容,注意HTML转义符处理时不考虑上下文,因此可能有不正确的转换,不太建议使用。(即:替换了转义码的Body部分)
- Body as a Document:从不同类型的文件中提取文本,注意这个选项比较影响性能。
- Response Headers:从响应头信息中提取数据,如果你使用中文语言的JMeter,会看到这一项是信息头,这是中文翻译问题,应以英文为准。
- Request Headers:从请求头信息中提取数据。
- URL:从请求URL中提取数据。
- 响应码(Response Code):提取响应状态码,比如:200、404等。
- 响应信息(Response Message):响应信息中提取数据。
(3)第三部分内容
- 引用名称(Name of created variable):定义提取值的引用变量名称。
- 正则表达式(Regular Expression):用于提取值的正则表达式。
- 模板(Template ($i$ where iis capturing group number, starts at 1)):正则表达式的提取模式。如果正则表达式有多个提取结果,则结果是数组形式,模板为$1$,$2$,表示把解析到的第几个值赋给变量,从1开始匹配,以此类推。若只有一个结果,则只能是$1$。
- 匹配数字(0代表随机):正则表达式匹配数据的结果可以看做一个数组,表示如何取值:0代表随机取值,正数n则表示取第n个值,比如1代表第一个,2代表第二个,以此类推。负数则表示提取所有符合条件的值,如-1。
- 缺省值(Default Value):匹配失败时候的默认值;通常用于后续的逻辑判断,一般通常为特定含义的英文大写组合,比如:ERROR等。
- Use empty defau't value:使用空值为默认值。
3、正则表达式提取器的使用
需求:
- 访问网易官网,获取title值。
- 将title值放入百度搜索框,进行搜索。
(1)测试计划内包含的元件
添加元件操作步骤:
- 创建测试计划。
- 创建线程组:选中“测试计划”右键 —> 添加 —> 线程(用户) —> 线程组。
- 在线程组下,添加取样器“HTTP请求”组件:选中“线程组”右键 —> 添加 —> 取样器 —> HTTP请求。
- 在取样器下,添加后置处理器“正则表达式提取器”组件:选中“取样器”右键 —> 添加 —> 后置处理器 —> 正则表达式提取器。
- 在线程组下,添加监听器“察看结果树”组件:选中“线程组”右键 —> 添加 —> 监听器 —> 察看结果树。
提示:需要重复添加的组件这里不重复描述。最终测试计划中的元件如下:
点击运行按钮,会提示你先保存该脚本,脚本保存完成后会直接自动运行该脚本。
(2)网易首页请求界面内容
非常简单的Get请求,之前说了很多次了,这里就不做解释了。界面内容如下图所示:
(3)正则表达式提取器界面内容
我们在编辑正则表达式提取器组件之前,一般先请求一下需要提取返回数据的接口。
因为我们需要先查看一下,需要提取的数据在什么位置,如下图所示:
然后选择RegExp Tester视图模式,先手动编写正则表达式,看看是否能够取到需要的数据。
如下图所示:
之后我们就可以编写正则表达式提取器组件界面了,如下:
编写引用名称、正则表达式、选择第几个模版,匹配数据选择。
正则表达式提取器组件提取出来的数据,会存储在线程变量中,供其他后续接口使用。
(4)百度首页请求界面内容
填写接口的基本请求信息,然后把正则表达式提取器提取出来的数据,作为参数化变量应用到请求中。
如下图所示:
(5)查看结果
我们可以看到在第二个请求中,拿到了第一个请求提取出来的数据“网易”。如下图所示:
提示:可以添加Debug PostProcessor(调试后置处理器),或者Debug Sampler(调试取样器),来查看正则表达式提取器中,提取出的内容是否正确。
注意:正常跑用例时删除或禁用它们。
4、总结
正则表达式提取器可以用于对任何文本的提取。提取完参数后,相当于把参数以key-value的形式放到参数池,以便后面的请求使用。
注意:不能超前引用。
正则表达式提取器和XPath提取器的区别:
- 正则表达式提取器可以用于对页面任何文本的提取,提取的内容是根据正则表达式在页面内容中进行文本匹配;
- XPath提取器则可以提取返回页面任意元素的任意属性;
- 如果需要提取的文本是页面上某元素的属性值,建议使用XPath Extractor;
- 如果需要提取的文本在页面上的位置不固定,或者不是元素的属性,建议使用正则表达式提取器。
5、正则表达式简单说明
正则表达式(Regular Expression):使用正则表达式解析响应结果,()表示提取字符串中的部分值,请不要使用||,除非你本身需要匹配这个字符。
- .:代表匹配任意一个字符。
- []:表示取值范围。比如:[0-9]代表匹配0-9之间任意一个数字。[a-z]代表匹配a-z之间任意一个字符。[A-Z]代表匹配A-Z之间任意的一个字符。
- +:匹配前面的子表达式一次或多次。
- ?:代表匹配一次或一次也没有。这个符号还有特殊的用法,当放到*号后面的时候,标识取到的数据是非贪婪的。说明:贪婪与非贪婪模式是两种不同的表达式匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配,即匹配第一个。
- *:匹配前面的子表达式零次或多次。
- \d:匹配一个数字字符,等价于[0-9]。
- \w:匹配包括下划线的任何单词字符,等价于[A-Za-z0-9_]。
- {3}:代表匹配3次,示例如下:[1-9][0-9]{4,14}:代表前面的子表达式,至少匹配4次,最多不超过14次。1[358]\d{9}:匹配手机号。[a-zA-Z0-9_]+@[a-zA-Z0-9]+\.[a-zA-Z]+:匹配邮箱。
最后:下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!【100%无套路免费领取】
软件测试面试小程序
被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!
涵盖以下这些面试题板块:
1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux
6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础