JMeter--关联(正则表达式单个值和多个值)以及实战

时间:2021-07-21
本文章向大家介绍JMeter--关联(正则表达式单个值和多个值)以及实战,主要包括JMeter--关联(正则表达式单个值和多个值)以及实战使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一、关联

讲关联之前先熟悉一下后置处理器,因为关联取的数据就是请求后的数据。
后置处理器:

后置处理器(Post Processors)负责在请求后进行工作。后置处理器常作为处理响应的数据,后置处理器中的正则表达式提取器常常用于提取动态关联的数据。后置处理器放在请求的子集中。

什么时候需要关联?

1. 服务器返回的动态变化而且对业务有影响的需要关联。

2. 回放脚本看是否正确,检查下脚本,是否有动态数据影响

3. 一大串字符串,每次请求参数是否有变化

4. 可以找开发问问,接口是开发做的,最清楚了

动态数据关联:
1.在HTTP请求的参数中经常会遇到一些参数的值是服务器的响应中的动态数据,这些数据需要进行关联才能使得每一次请求都能成功地被服务器接受,在JMeter中常用正则表达式或者JSON提取器来获取这些动态数据。
2.正则表示式允许用户从服务器响应中获取数据,作为后置处理器,正则表示式在每个请求执行后再执行。正则表示式提取出来的数据放在变量中,供后续的请求使用。


注意点:

1.取数据 :

从接口的响应中取,要数据,就把该数据括起来 (.*?)

2.不要删多了,

3.千万注意看见post,首先要看请求的数据类型,如果是json类型,要加信息头管理器

4.接口的入参都是有来源的,1手动输入(进去的密码类似于),2从前面的接口的响应中来的(类似于前面新建的学校,然后多出来了id和学校的账号)。

5.报错看请求,看有没有空格,

6.正则表达式一定要放在需要捕捉的页面里面,调试取样器是放在引用的界面的。

正则表达式提取器:
添加 》 后置处理器 》 正则表达式提取器

  1. 名称:该节点的名称,自行定义
  2. 注释:节点的注释
  3. Apply to:默认选择Main sample only,从主请求中获取数据
  4. 要检查的响应字段:响应包含响应行、响应头、body等,选择从主体即可。
  5. 引用名称:正则取出来的数据放在变量中,变量的名称自己根据实际情况写,比如:token、id等。把值放在变量中,供后续的请求使用。
  6. 正则表示式:用于解析响应数据的正则表达式。
  7. 模板:取一个数据的模板$1$,取两个数据的模板$1$$2$。
  8. 匹配数字(0代表随机):正则取出来的数据可能是多个,0代表随机一个。
  9. 缺省值:正则取不到数据,要展示的信息。 

正则表示式:

  1. .点:匹配任何单个字符,除了\n\r之外
  2. +加号:匹配前面的子表示式一次或者多次
  3. ?问号:当该字符紧跟在任何一个其他限制符(*,+,?)后面时,匹配模式是非贪婪的,非贪婪模式尽可能少地匹配所搜索的字符串
  4. *星号:匹配前面的子表达式任意次
  5. ()小括号:将()之间的表示式定义为“组”,并且将匹配这个表示式的字符保存到一个临时区域


举例:要获取token的正则表达式为:”token”:”(.+?)”
如果想获取响应的所有结果使用(.+)即可


二、Jmeter中的关联元件可以帮助我们从服务器响应数据中找到我们需要的数据,把想要的数据提取出来。

  1. 写了个登录脚本,放回发现登录不成功,然后看了一下请求中的参数,发现post提交的参数中有可疑数据,一排的字母+数字

 2. 然后通过抓包看每次登录提交的authenticity_token值都不一样,所以就是这个值需要关联了

查看登录页面源代码要抓取authenticity_token这个值出来

三、正则表达式抓取数据步骤 1.添加正则表达式

2.编写正则表达式

 3.看看正则表达式能否提取出动态的authenticity_token值

 提取出来动态的authenticity_token值后,在post协议中把这个值给替换成变量,这样每次提交的时候这个值就会跟着变化了

 然后再次回放脚本

下面实例讲解:
要实现这样一个功能:新建一个学校,然后再把刚才新建的学校禁用了。
通过抓包工具抓到禁用学校的接口

 通过分析,id和schoolid则为禁用那个学校的字段,而这两个值一般都会在禁用接口前面的接口中获取的。在列表页的接口中可以看到

所以只需要把列表页接口的响应中的这两个数据取出来,然后供给禁用的接口使用,就能实现:新建一个学校,然后把新建的学校禁用了。

分开取数据,先取id:
加一个调试取样器,在查看结果树好查看正则表达式有没有取出数据。

 如果里面有特殊字符,根据实际情况需要进行转义:

把id取出来了。
接下来取schoolid,一样的方法。

 在查看结果树中看到schoolid取出来了。

 把取出来的id和schoolid引用到禁用学校的接口即可。
通过 ${变量名}把取出来的值引用过来。

 到此即可实现,新建一个学校,然后把刚新建的学校禁用。
可以到页面上看效果。

正则表达式取多个值:

接口的响应
{"code":1,"message":"","costTime":0,"data":[{"id":386739,"schoolId":449,"laccount":null,"pwd":null,"loginTime":null,"loginTotal":null,"islogin":null,"disable":"0","isadmin":null}],"start":0,"page":0,"total":0}

应取这个接口中code对应的值1和costTime对应的值0这两个数据。

 在查看结果树中看一下结果:

引用的时候要注意,引用的是${id_1}和${id_2}这两个。
还有一种情况就是,要取的这两个值,如果中间的字段比较多的话,可以使用正则来代替。

这样也可以实现的,这样就省去了中间可能要填写很多字符串。

   

原文地址:https://www.cnblogs.com/Ding-Peng/p/15040942.html