超详细!Jmeter性能测试(二)

*Jmeter 性能测试(二)关联

正则表达式提取器和JSON Extractor提取器

接入上篇博文继续
上篇地址:https://blog.csdn.net/weixin_44954642/article/details/103054387

  • 上篇我们是把下单获取Token的接口给调通了,那么我们这篇继续讲到用token去完成下单支付。
  • 接下来直接看代码(这块代码就很简单了)看下图:在这里插入图片描述
  • 这个我稍微来解释一下
  • 看到第102行代码,直接写的是 string dmPayUrl = “http://172.16.*************”;这个意思就是动码支付接口的URL等于http://172.16*****************
  • 然后看到第103行,又写了个dmPayUrl += "?token=" + token + "&payTool=WECHAT_GZH";这个意思就是在URL后面又加上了"?token=" + token + “&payTool=WECHAT_GZH”,这是什么意思呢?就是在原始的URL后面加上这几个参数就好了,其中包含了token,这个token我们就把上个下单接口返回的Token填入进去就好了。
  • 这个时候,发现没有,我们要取上个接口返回的Token,竟然这样的话,我们就要用到正则了。
  • 来,继续返回到上个接口,添加一个正则表达式提取器
    在这里插入图片描述
  • 然后我们先去发送一个请求,看返回的格式是什么样的.
    在这里插入图片描述
  • 这个token长得有点奇怪啊,它不是一个单独的字符串,而是夹在中间,我复制出来吧
 "returnUrl":"http://dfq***.cn/jup.html?token=tk1194897560727445504&alipayAppId=2019061065525104&appId=wx00aefb43180bce2c"
  • 这个的话,要怎么去获取呢? 因为是夹在中间所以我们不能直接整个字符串的去取,如果取整个字符串的话
    “returnUrl”:"(.*?)"这样写就可以了,但是这个是获取全部的啊,我们只要是Token那一部分。
    由于Token是夹在中间,所以我们可以用捕捉的方式来获取,至于正则的写法我就不一一讲了,可以自行百度正则表达式语法问题,下面附图

在这里插入图片描述

  • 第一个引用名称:它的意思就是给获取的数值取一个变量名,那么获取成功后就可以拿这个去调用了,取什么样的值,调用的时候就输入什么。
  • 第二个正则表达式:token=(.+?)(?=(&)) 这是什么意思呢
    我们先把获取的数值拿下来吧,方便看
 "returnUrl":"http://dfq***.cn/jup.html?token=tk1194897560727445504&alipayAppId=2019061065525104&appId=wx00aefb43180bce2c"

我们只需要token那一部分,所以正则表达式先写上token= 为什么要这样写,因为我们要告诉jmeter我们要取token=开头的部分,但是从token=开头到最后面还有很多参数是不是,但是有没有注意到token=tk1194897560727445504&alipayAppId,&alipayAppId这个是拿&隔开了,我们只需要取token=到&的中间部分,所以加上(?=(&)),为什么这样加呢,你们知道吗?我们先来看下语法
* ():括起来的部分就是要提取的,就是我们要的部分。
* .:匹配任何字符串。
* +:0次或多次。
* ?:不要太贪婪,在找到第一个匹配项后停止。
* 也就是说token=(.+?)到了这一步确实是取到了我们需要的值,但是回过头来看上面,上面说了这个问号?是找到第一个匹配项后停止,但是它们是在一个字符串里面的,所以它会取到Token=后面的字符串里的所有数值,但是后面的数值包含了我们不需要的值,所以不行,这个时候我们用一个抓取的方式(?=(&)),这个是什么意思呢? 就是说它取到token=后面的值,但是当它读取到这个&符号后就不取了,就停了,它就明白这个意思了,就好像是看到这个符号,他就不会继续去获取了,它就懂你的意思了,所以就停止了,所以它取到的就是token=到&中间的值。

  • 第三个 模板:用 $ 引用起来,$1 $引用起来,如果在正则表达式中有多个正则表达式,则可以是$2 $,$3 $ 等等,表示解析到的第几个值给title。如:$ 1$表示解析到的第1个值,$2 $就表示解析到第二个值。

  • 第四个匹配数字:0代表随机取值,1代表全部取值,通常情况下填0,不填问题也不大。

  • 第五个缺省值:如果参数没有取得到值,那默认给一个值让它取,我填的Error。

  • 这个时候我们就可以去看看我们写的正则到底取到没有,这个的话要怎么看呢?看下方

  • 我们来创建一个Debug Sampler
    在这里插入图片描述

    • 这是什么意思呢?就是可以抓取所有请求中的参数的值,这样的话我们就可以看到正则到底有没有抓取到,然后在它的下面添加一个查看结果树。
      在这里插入图片描述
      很明显我们是取到了,因为我在正则表达式提取器给它起了个变量名为token,所以这里就直接显示token=***,但是对不对呢?我们打开获取token下单请求下的结果树来核对一下。
      在这里插入图片描述
      看,是一样的吧,说明我们获取到了。好,我们继续下一步。
      这样的话,我们可以开始创建支付接口了,直接把Token加上去就可以运行了,返回到最开始,继续看代码
      在这里插入图片描述
  • 我们先添加一个HTTP请求,然后把接口的URL和后面加上的参数都填上去,因为我们已经把上个接口的Token给获取到了,所以我们直接去引用就好了,上面也说了怎么去引用,直接${token}就好了,括号里输入引用的名称,因为我们在正则那里给获取的值取了个变量名叫token,所以,把名字输入进去就可以引用了。

    在这里插入图片描述

  • 然后再添加一个查看结果树,再改个名字吧,取个支付吧,我们运行试一下。
    在这里插入图片描述

  • 看,是不是成功了呀。这样的话,我们就跑完了哟,后面还有个接口,我就不讲了,整个流程都是一样的,这里我再来讲一个关联方法:JSON Extractor提取器

JSON Extractor提取器

  • 这个提取器呢,只是针对于返回格式是JSON格式的才可以用,当数据返回的是一个JSON格式,我们就可以用JSON Extractor提取器来获取啦,我们来举个例子,看图
    在这里插入图片描述

  • 其实我们上个返回的响应数据就是JSON格式的,我们同样也可以用JSON Extractor提取器来获取。
    我们在支付这个接口的下面创建一个JSON Extractor
    在这里插入图片描述

  • 然后我们打开支付接口的结果树,我们选一个参数来获取,就选这个agentNo
    在这里插入图片描述

  • 然后打开JSON Extractor提取器,请看
    在这里插入图片描述
    Variable names 就是给获取到的值取个变量名,然后去调用的,和上面的正则表达式一样的意思。
    JSON Path expressions 这个就是输入我们要去抓取的内容,我输入的是$.data.agentNo 为什么要这样输入呢?首先,先用 $ (dollar)符号引用,后面有个点 . 发现没有,这个点的意思呢就是下一阶层的意思,我来截个图吧,好解释一点。
    在这里插入图片描述
    Match No.(0 for Random) 这个不要去管它
    Default Values 这个就是默认值,如果参数没有取得到值,那默认给一个值让它取,我填的error。

  • 我们去验证一下吧,在Debug Sampler 里就可以看到,如果取到了的话agentNo就是COO1,如果没取到就是显示的默认值error。
    在这里插入图片描述

  • 看上图,是不是取到了,需要的话,直接调用就好了,调用的方式还是一样的 ${} ,括号里输入变量名。

  • 我们再来取一个错误的吧
    在这里插入图片描述

  • 继续看debug sampler 里的结果树
    在这里插入图片描述

  • 因为我上面故意输错了,所以它没取到,显示的就是默认值。

  • 好了,这篇文章就先写到这里,接口全部调通了,下一篇我们就讲怎么去做压测。

  • 若有不懂的,可以评论留言给我,要是有说的不对的,也可以反馈给我哟!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

收藏等于学会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值