JMeter学习-关联

当请求之间有依赖关系,比如一个请求的入参是另一个请求返回的数据,这时候就需要用到关联处理。 JMeter可以通过“后置处 理器”中的一些组件来处理关联。

关联有两种方式:

  • 线程组内部的关联
  • 跨线程组

1.线程组内部的关联

1.1 正则表达式提取器

添加方式 :选中“取样器”右键 —> 添加 —> 后置处理器 —> 正则表达式提取器。

1.1.1 介绍

正则表达式在线测试工具

类似于一个公式,要找到左边界和右边界字段,

        “.”:通配符,一个.代表一个任意字符(除换行回车),

        “*”:表示前面的字符出现0次或者多次

        “?”:代表非贪婪匹配,找到左边界后,往右查找匹配有边界,只要有匹配的右边界就停止继续查找,再次查找左边界、右边界

        “<>()<>”:将()里数保存为一个参数,两边的<><>不要

        /d:表示数字

        如:010 111 1111,用正则表示为:(/d*)-(/d*)-(/d*),$1$、$2$、$3$:表示取出第1组值、第2组值、第3组值

        如:.*:贪婪匹配

                .*?:非贪婪匹配

1.1.2 场景

请求:http://www.itcast.cn/ ,获取网页的title值
请求:https://www.baidu.com/ ,把获取到的title作为请求参数

JMeter学习-关联_第1张图片
1.2 XPath提取器

添加方式 :选中“取样器”右键 —> 添加 —> 后置处理器 —> Xpath提取器

1.2.1 介绍

有些WEB项目是前后端不分离的,接口返回的内容不是Json格式的数据,而返回的是一个HTML页面。并且有些参数是隐藏在HTML页面里面的,需要从HTML页面中提取出这些隐藏参数,这个时候就会用到XPath提取器组件。

XPath提取器组件常用于接口返回值为HTML或XML格式数据的时候,进行数据的提取。

XPath提取器组件在后置处理器元件中,后置处理器主要的作用,在请求结束或者返回响应结果时发挥作用。
1.2.2 场景

  1. 访问网易官网,获取title值。
  2. 将title值放入百度搜索框,进行搜索。

JMeter学习-关联_第2张图片

1.3 JSON提取器

添加方式 :选中“取样器”右键 —> 添加 —> 后置处理器 —> JSON提取器
 

1.3.1 介绍

场景分析:有时候我们的业务需要发送多次请求,每次请求都是上下相互依赖,也就是说串行执行,每个请求需要上一个请求的部分数据返回作为本次请求的参数,该如何在Jmeter中实现呢?

例如:登录之后的响应结果中会返回用户id、token信息; 而更新昵称需要传参member_id、且需要请求头传token;也就是我们要想办法从“登录”的响应结果中获取到id、token信息,再去传给“更新昵称”请求。因为返回数据格式是json,所以我们用JSON提取器来实现。当然也可以用正则表达式提取器,只是现在用的不多。


1.3.2 场景

1. 请求获取天气的接口,http://www.weather.com.cn/data/sk/101010100.html
2. 获取返回结果中的城市名称
3. 请求:https://www.baidu.com/s?wd=北京 ,把获取到的城市名称作为请求参数

JMeter学习-关联_第3张图片

JSON提取器说明:

**Apply to:**应用范围

**Names of created variables :**接收值的变量名,自定义,多个变量用分号分隔

JSON Path expression: json path表达式,也是用分号分隔

Match No.(0 for Random):
0表示随机;
n取第几个匹配值;
-1匹配所有。
若只要获取到匹配的第一个值,则填写1

**Compute concatenation var(suffix_ALL)*如果找到许多结果,则插件将使用’ , '分隔符将它们连接起来,并将其存储在名为 _ALL的var中

Default Values: 缺省值,匹配不到值的时候取该值,可写error。
 

2跨线程组关联

在做压力测试的时候常常会遇见一个场景,想要测试的接口需要登录接口返回的token做参数,或者需要其它接口的认证信息,通常能想到的就是正则表达式提取器,把需要的参数提取出来,传递到另一个HTTP请求中。

如果有多个线程组的情况下,需要每个线程组中都要有登陆请求,这不符合我们的规范,最理想状态就是获取token的接口只请求一次。然后登陆的认证信息,在JMeter测试脚本中的所有接口请求中都可以使用。

这样就实现了跨线程组传递参数,这使得接口之间的关联更加灵活。

所以:什么是跨线程组关联呢?就是在不同线程组之间实现参数传递

1、JMeter中实现跨线程组关联说明

  • JMeter中实现跨线程组关联步骤

先进行登陆请求。
记录登陆请求返回的Cookie,或者有关登录状态的token信息。
如果是Cookie,就用HTTP Cookie管理器获取。
如果是token,就用提取器进行提取。
然后通过函数助手中的__setProperty函数,把Cookie值升级为JMeter的全局属性,就可以在线程组和线程组之间共享了。
然后从另一个线程组中通过__property函数,获取全局数据。
然后把获取的Cookie或token,加入到查看购物车请求中,保持用户登陆状态。
如果是Cookie,就用添加到HTTP信息头管理器组件中。
如果是token,就添加到请求的参数中。
执行脚本,查看运行结果。

2.   示例

方式1-放到beanshell取样器

JMeter学习-关联_第4张图片

方式2-放到beanshell后置处理器中

JMeter学习-关联_第5张图片


 

你可能感兴趣的:(jmeter,学习)