Jmeter(7)Jmeter关联案例(正则表达式提取器+Json提取器)
Jmeter 关联案例(正则表达式提取器+Json提取器)
本次案例使用到正则表达式提取器,利用招生系统http://192.168.239.130:8080/recruit.students/login/view,实现新建学校和立马禁用学校的关联,也就是新建学校和禁用学校这两个步骤处在同一个线程内完成。
学习参考链接:https://www.cnblogs.com/wwho/p/7277349.html
为什么创建学校和禁用学校要进行关联?
下面我们先分析一下禁用学校这个步骤:
那id
和schoolId
都是动态变化,那它们是跟着哪里变化的,根据哪里变化的,这些动态变化的数字是哪里产生的?
答案是新建学校一步为每一个新建的学校创建了不同的id
和schoolId
接下来通过分析创建学校一步:
学校这里设置没有什么问题,学校名被参数化了,所以每次运行基本都能成功新建新的学校。
运行测试计划,查看结果观察树,发现新建学校一步的响应内容包含了禁用学校一步需要的请求信息:
所以我们可以给新建学校一步添加正则表达式后置提取器,从响应内容response data
提取禁用一步需要的数据,最后进行参数化,达到关联和动态变化的效果。
正则表达式提取器使用方法:
Apply to:和要检查的相应字段,一般都默认,主要是针对响应数据中的值去处理,如有其它需要,可以参考jmeter说明
- 引用名称:自己定义的变量名称,后续请求将要引用到的变量名,如填写的是:actionId,后面的引用方式是$
- 正则表达式:提取内容的正则表达式,相当于lr中的关联函数
- 【"()" 括起来的部分就是需要提取的,对于你要提的内容需要用小括号括起来】
- 【".":匹配除了换行符以外的任何字符】
- 【"*"(贪婪) 重复零次或更多
例如"aaaaaaaa" 匹配字符串中所有的a 正则: "
a*
" 会出到所有的字符"a"】
- 【"+"(懒惰) 重复一次或更多次
例如"aaaaaaaa" 匹配字符串中所有的a 正则: "
a+
" 会取到字符中所有的a字符, "a+
"与"a
"不同在于"+"至少是一次而"" 可以是0次】
【"?"(占有) 重复零次或一次
例如"aaaaaaaa" 匹配字符串中的a 正则 : "
a?
" 只会匹配一次,也就是结果只是单个字符a】【"*?" 重复任意次,但尽可能少重复
例如 "acbacb" 正则 "
a.*?b
" 只会取到第一个"acb" 原本可以全部取到但加了限定符后,只会匹配尽可能少的字符 ,而"acbacb"最少字符的结果就是"acb" 】【"+?" 重复1次或更多次,但尽可能少重复,与"*?" 一样,只是至少要重复1次】
还有分组的情况,常用的就这两种,其它的可以再自行百度
- 【"(?=exp)" 匹配exp前面的位置】
- 【"(?<=exp)" 匹配exp后面的位置】
- 模板:用$$引用起来,如果在正则表达式中有多个正则表达式(多个括号括起来的),则可以是$2$,$3$等等,表示解析到的第几个值给actionId。例如:$1$表示匹配到的第一个值
- 匹配数字:0代表随机取值,-1代表所有值,此时提取结果是一个数组,其余正整数代表第几个匹配的内容提取出来。如果匹配数字选择的是-1,还可以通过${actionId}的方式来取第1个匹配的内容,${actionId}来取第2个匹配的内容。
- 缺省值:正则匹配失败时,取的值
本次案例的两个正则表达式设置为:
"data":{"id":(.*?),"schoolName
登录帐号为(.*?),密码为
设置好正则表达式提取器后,将禁用一步的id
和schoolId
进行参数化:
然后,运行,刷新浏览器,最终的目标效果如下(新建学校后,立马禁用了学校):
本案例的jmx
文件下载链接:https://github.com/jimmy688/jmeter_jmx_files
补充:其实禁用要用到的id
和schoolId
不一定非要从新建学校一步的响应body
里面提取,也可以从其它地方提取,如学校的列表页。而且,因为新建学校的响应内容是json格式的,我们还可以使用json
提取器来替换正则表达式提取器,两者能达到的效果是一样的。
保证自己写的json
表达式能提取出我们想要的数据的方式:
1、查看观察树,查看新建学校一步,选择json格式:
2、进行Test
试验:
如果响应内容是json
格式的,我们就可以使用后置json
提取器来提取,否则就用正则表达式的就行,也还有其它类型的提取器可以用。
不同类型的提取器用法都差不多,只不过是这个表达式的提取语法不太一样而已。