Jmeter(7)Jmeter关联案例(正则表达式提取器+Json提取器)

Jmeter 关联案例(正则表达式提取器+Json提取器)

本次案例使用到正则表达式提取器,利用招生系统http://192.168.239.130:8080/recruit.students/login/view,实现新建学校和立马禁用学校的关联,也就是新建学校和禁用学校这两个步骤处在同一个线程内完成。

image-20200826092154459

学习参考链接:https://www.cnblogs.com/wwho/p/7277349.html

image-20200826092559744

为什么创建学校和禁用学校要进行关联?

下面我们先分析一下禁用学校这个步骤:

image-20200826093015273

idschoolId都是动态变化,那它们是跟着哪里变化的,根据哪里变化的,这些动态变化的数字是哪里产生的?

答案是新建学校一步为每一个新建的学校创建了不同的idschoolId

接下来通过分析创建学校一步:

image-20200826135859088

学校这里设置没有什么问题,学校名被参数化了,所以每次运行基本都能成功新建新的学校。

运行测试计划,查看结果观察树,发现新建学校一步的响应内容包含了禁用学校一步需要的请求信息:

image-20200827115908910

所以我们可以给新建学校一步添加正则表达式后置提取器,从响应内容response data提取禁用一步需要的数据,最后进行参数化,达到关联和动态变化的效果。

image-20200827124559369

image-20200827120400540

正则表达式提取器使用方法:

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

登录帐号为(.*?),密码为

设置好正则表达式提取器后,将禁用一步的idschoolId进行参数化:

image-20200827130422063

然后,运行,刷新浏览器,最终的目标效果如下(新建学校后,立马禁用了学校):

image-20200827130627321

本案例的jmx文件下载链接:https://github.com/jimmy688/jmeter_jmx_files

补充:其实禁用要用到的idschoolId不一定非要从新建学校一步的响应body里面提取,也可以从其它地方提取,如学校的列表页。而且,因为新建学校的响应内容是json格式的,我们还可以使用json提取器来替换正则表达式提取器,两者能达到的效果是一样的。

image-20200827134819634

保证自己写的json 表达式能提取出我们想要的数据的方式:

1、查看观察树,查看新建学校一步,选择json格式:

image-20200827135016671

2、进行Test试验:

image-20200827135144947

如果响应内容是json格式的,我们就可以使用后置json提取器来提取,否则就用正则表达式的就行,也还有其它类型的提取器可以用。

不同类型的提取器用法都差不多,只不过是这个表达式的提取语法不太一样而已。

posted @ 2020-08-27 20:29  Whatever_It_Takes  阅读(657)  评论(0编辑  收藏  举报