文章目录
一,组件简介
1、正则表达式提取器
文章目录
界面介绍
官方介绍:
允许用户使用Perl类型的正则表达式从服务器响应中提取值。作为后处理器,此元素将在其范围内的每个Sample请求之后执行,应用正则表达式,提取请求的值,生成模板字符串,并将结果存储到给定的变量名称中。
鸭的,就是把上面一个请求的值抓取出来,给下面的请求用,也就是关联。
Apply to:
- Main sample and sub-samples:主样本和子样本都适用
- Main sample only:仅适用于主样本(默认)
- Sub-samples only:仅适用于子样本
- JMeter Variable:提取将应用于命名变量的内容
要检查的响应字段:
- 主体:即headr+body。(默认)
- Body(unescaped):响应的正文
- Body as a Document:主体为文档
- 信息头:对于非HTTP示例可能不存在
- Request Headers:对于非HTTP样本可能不存在
- URL:网址
- 响应代码:200,400等
- 响应信息:确定,失败等
重点参数:
参数 | 含义 |
---|---|
引用名称 | 变量名,将提取的值存储到这个变量中方便后面使用 |
正则表达式 | 1)一般 `(.+?)`和`(.*?)`能够满足80%的使用场景,所以一般正则表达式都可以写成: 左边界(.+?)右边界,可以取空值 左边界(.*?)右边界,不可以取空值 2)返回数据:name="xiaoming",提取正则:name="(.*?)" 3)返回数据:{"name":"xiaoming"},提取正则:"name":"(.*?)" 4)返回数据:"data":{"list":[{"name":"xiaoming","age":"20"}]},提取整个列表:"list":(.+) 5)获取多个值,编写多个正则,比如:"name":"(.*?)","id":"(.*?)" |
模板 | $1$,表示第一个正则表达式;两个个表达式:$1$$2$ |
匹配数字 | 1)数字1,表示取第一个值,数字2,第二个值 2)数字0,表示随机 3)数字-1,表示全部(此时结果是一个数组,如果引用名称是user,也可以通过${user_1}的方式来取第1个匹配的内容) 4)匹配数字写-1(取全部的值),在后面组件调用中,即便只有一个值,也必须写作:变量名_1 来调用 |
缺省值 | 没有匹配到就使用缺省值,设置个error什么的,随便 |
正则基础:
1). 匹配除“\r\n”之外的任何单个字符。要匹配包括“\r\n”在内的任何字符,请使用像“[\s\S]”的模式。
2)* 匹配前面的子表达式(也可以是一个字符)任意词。例如,zo*能匹配“z”,也能匹配“zo”以及“zoo”。*等价于o{0,}
3)+ 匹配前面的子表达式一次或多次(大于等于1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。
4)? 匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“do”或“does”中的“do”。?等价于{0,1}。
组合:
1).*具有贪婪的性质,匹配到不能匹配为止,最大匹配原则。
2)+或*后跟?表示非贪婪匹配,即尽可能少的匹配,最小匹配原则。
3).*? 表示在能匹配成功的前提下尽可能少的匹配,最小匹配原则。
举个栗子
1.1)最简单的取单个值
新建一个脚本:
jp@gc - Dummy Sampler模拟服务器数据返回:
正则表达式提取名字:
Debug PostProcessor用来调试,查看提取结果集
第二个请求调用,提取出来的name。运行:
1.2)拆分单个数值
拆分身份证号码,提取生日:
18位身份证,前1–6位是地区,7–14位是生日,15–17位是顺序吗,最后一位是校验码。正则:
(.{6})(.{8})(.{3})(.)
其实就是把这个号码切割成了4部分:
(.{6}):任意字符匹配6次,依次类推
选中第二个模板提取值
2、XPath Extractor
界面介绍
该测试元素允许用户使用XPath查询语言从结构化响应-XML或(X)HTML中提取值。
Apply to:
- Main sample and sub-samples:主样本和子样本都适用
- Main sample only:仅适用于主样本(默认)
- Sub-samples only:仅适用于子样本
- JMeter Variable:提取将应用于命名变量的内容
XML Parsing Options:
- Use Tidy:当需要处理的页面是HTML格式时,必须选中该选项;如果是XML或XHTML格式(例如RSS返回),则取消选中;
- Quiet:只显示需要的HTML页面
- Report errors:表示显示响应报错
- Show warnings:表示显示警告
- Use Namespaces:如果启用该选项,后续的XML解析器将使用命名空间来分辨
- Validate XML:根据页面元素模式进行检查解析
- Ignore Whitespace:忽略空白内容
- Fetch external DTDs:如果选中该项,外部将使用DTD规则来获取页面内容
- Return entire XPath fragment of text content:返回文本内容的整个XPath片段
Reference Name:存放提取出的值的参数。
XPath Query:用于提取值的XPath表达式。
Default Value:参数的默认值。
3、JSON Extractor
界面介绍
可以使用JSON-PATH语法从JSON响应中提取数据。该后处理器与正则表达式提取器非常相似。必须将其放置为HTTP Sampler或具有响应的任何其他Sampler的子级。
Apply to:
- Main sample and sub-samples:主样本和子样本都适用
- Main sample only:仅适用于主样本(默认)
- Sub-samples only:仅适用于子样本
- JMeter Variable:提取将应用于命名变量的内容
参数:
- Variable names:填写变量名,后面调用格式:${变量名}
- JSON Path:通过这里的json path表达式提取
- Match Numbers:匹配数字(-1表示所有,0表示随机,1表示第一个)
- Default Values:找不到时默认值,随便什么null
- Compute…:是否统计所有,勾选了之后,会有一个总值,变量名_ALL=…的
注:当json提取器要提取两个或以上数量值的时候,一定要填写默认值,不然会报错:“Mismatch between number of variables ,json expressions and default values”,反之:只提取两个值,默认值填了三个,也会报该错。
JsonPath:
$
:根节点@
:当前节点.or[]
:子节点..
:选择所有符合条件的节点*
:所有节点[]
:迭代器标示,如数组下标[,]
:支持迭代器中做多选[start:end:step]
:数组切片运算符?()
:支持过滤操作()
:支持表达式计算
举个栗子
脚本设置:
设置的返回数据:
3.1)单值提取:
随便哪个写法都可以:
$.data[*].["name"]
$.data[*].name
$..name
3.2)多值提取:
$.data[*].["name"];$.data[*].["age"]
所有多值写法中间都是用英文 ; 连接,缺省值个数也是一样
3.3)条件提取
顺序筛选:
$.data[*].name
这个表达式中,[*]里的*进行替换
[1]
正序取值,正数第二条[:1]
正序取值,正数第一条[:-1]
倒序过滤,倒序第一条[1:]
正序过滤,正数第一条[-1:]
倒序取值,倒序第一条
将上述脚本进行修改:
返回值:
执行结果是:
4、JDBC PostProcessor
5、Debug PostProcessor
简介
JMeter中用于调试的Debug组件有两个:
- Debug Sampler(调试取样器)
- Debug PostProcessor(调试后置处理程序)
两者在官网均没找到使用说明,其实两个的作用是差不多的,就是用来调试查看后置处理器,提取数据的情况
Debug Sampler(调试取样器)
Debug PostProcessor(调试后置处理程序)
举个栗子
创建一个脚本:
模拟一下返回的数据:
正则提取一下:
直接执行可以查看我们正则是否正确提取了数据:
6、CSS/JQuery Extractor
https://jlhxxxx.github.io/jmeter-doc-cn-18.html#csscssjquery