el表达式获取hashmap的key对应的值_Jmeter系列_正则表达式token关联(一)

da2d28e553081ecbc6588493600920f5.png

jmeter中,接口自动化的关键在于参数关联。比如需要登录的接口,如何调用登录口令?一个增删改查的闭环,如何将接口参数上下传递?下面就以实际的例子来仔细说一说

1:登录接口

这里有一个实际的登录接口,在响应中返回了一串token,如下图:

38e1ef0ddb36695eeda353fc66009065.png

那么我们在接下来的首页-退回待处理中(无论测试这个系统中哪个接口,都需要带入token信息,否则就会报错),就必须带入这一串token,否则就会响应报错,如下图:

877dae19e93a65b8ab9e2781ecd885b0.png

如何获取登录的口令呢?这里详细说明一下,如下图:

5d964a77a9bb7de8d754e15f049eae47.png

726fcc4b53beaa531207dc64a6087e98.png

这里我们可以在线程组中添加一个调试取样器(debug sampler),检验正则表达式是否提取到我们想要提取的token值,如下图:

aeeff6187d7a7ed80cac9a4d33cf964e.png

添加完调试取样器后,直接运行,看一下查看结果树响应数据中的返回值,如下图:

97e1832b5d3f5c014451c3867787ec55.png

在接下来的接口中可以将获取的token作为变量调用(这里调用token,根据系统实际情况而定),我这里演示的token是在请求信息头中传参的,所以我这里需要在首页-退回待审核下添加一个HTTP信息头管理器进行传参,如下图:

63da081b2ad9dd8f78ad76a58ca4a762.png

这是通过谷歌F12获取到系统中的实际信息,如下图:

7dda5206d7dbcc084c96a83a6f12f733.png

现在开始调用变量,变量名为${autho},如下图:

cfa6447f48b9c9fdf4e6deae554e4330.png

还有这样调用token的,我这里使用这种方法的是不适用的,根据具体情况,大家可以参考,如下图:

65c61488497d77386504a63bd366d814.png

观察请求头,发现传入了一串token,并且响应结果正确,如下图:

75917aaee36a873205073c103b75b281.png

6c4402b4f9936738864ce264c555f619.png

自此,一个完整的同一线程组内的登录关联就结束了。后续接口如果都在同一个线程组内,直接调用该token就可以。

我们接下来继续说说跨线程组的token参数关联,如果我们进行接口测试或者是性能测试时,可能会存在不同模块使用多个线程组进行测试和维护的情况,这种时候使用之前那种方式直接获取token,运行以后会发现响应数据报错401,说明无登录授权。

b5a6953a4c523785225c2c574d6dbfc8.png

这时候我们只要在之前提取token的基础上,再进行两步操作就可以获取登录权限了(学习是一个艰难且无聊的过程,但是坚持下来收获还是颇丰的,还在坚持的孩子们要加油啊!你们都棒棒的!!!)

第一步:在登录的http请求下添加后置处理器BeanShell PostProcessor(BeanShell后置处理程序)

3b190b55992a14a55fcd27feea50c009.png

在脚本中添加代码如下图:

String token = bsh.args[0];

print(token);

props.put("newtoken",token);

11842615d3c9fffc20503dbd21149e11.png

第二步:在测试计划下添加前置处理器BeanShell PreProcessor(BeanShell预处理程序)

80215e3b00c855f109e7c82cb04571bf.png

在脚本中添加代码如下图:

//获取登录token

String newtoken =props.get("newtoken");

log.info(newtoken);

vars.put("newtoken",newtoken);

5dded30ec96b9b3a075d3143710c1e8e.png

最后引用newtoken值,这里需要根据实际情况,传递参数,我这边是需要传到请求信息头中(还有直接在请求体中进行传参的),如下图:

6a30928887cb631a694d2d038afef2c9.png

ea486c9027d488b5182648802861fee8.png

最后看一下,运行一下jmeter,看token值有没有被成功获取

093ac16b59f50fa2c6e5a024bd62b2b3.png

比如一个增删改查流程,想要做自动化检验就必须形成一个闭环,那么删除-修改-查看就必须调用同一个必填参数,例如唯一性的id。下面还是实例演示

我先新增一个界别,可以看到界别列表结果中返回了一个新增的数据id,在后续接口中都必须调用此唯一性的id,如下图:

37b86bdf528bcab3cf8c2f9172044564.png

接下来写一个正则将其取出,我要取的是第二个id,所以匹配数字填写了“2”,如下图:

a0b4afb3515a784bcc95f3738d925db5.png

运行一下程序,发现已经正确提取了我想要的id,如下图:

25eeb8a2bc31b17bf627ef959189fe2c.png

后续接口可以调用此参数(注意此处传参的具体格式应该以接口文档和抓包结果为准),并运行程序,查看结果,发现可以正确响应,如下图:

c0405ac562b98f043e0e4710ca0eb8cc.png

ae42cac263688e873709f3520645d7cc.png

好了,一个完整的登录-新增-编辑-删除的流程到这里就可以结束了~下面是结尾彩蛋

上述的正则都是获取单个的参数,那么如果要传入一组参数要怎么写呢?

b0b06bddf32ee74c3226cd201e4bc1b2.png

修改正则表达式

15ed154f9e748c7ee17bb03bc170d0d8.png

结果中可以看到传入了一整个数组

521be481ca3320c7fce351344482cdb0.png

正则提取器核心用法: 它通过正则表达式获取接口响应,并传入下个接口

引用名称:定义一个变量,供后续请求引用

一般(.+?)和(.*?)能够满足我们80%的使用场景。所以,一般的

正则表达式都可以写成下面这2种

左边界(.+?)右边界

左边界(.*?)右边界

left对应匹配目标的起始字符

right对应匹配目标的结束字符

正则表达式:利用正则将需要的数据提取出来

() 括起来的部分就是需要提取的,对于你要提的内容需要用小括号括起来

. 点号表示匹配任何字符串

+ 一次或多次

? 在找到第一个匹配项后停止

模板:用$$引用起来,如果在正则表达式中有多个正则表达式(多个括号括起来),则可以是$N$等,表示提取第N个括号里面的值

匹配数字-1代表提取所有值,此时提取结果是一个数组,其余正整数代表第几个匹配的内容被提取出来。如果匹配数字选择的是-1,后续可以通过${XXX_1}的方式来取第1个匹配的内容,${XXX_2}来取第2个匹配的内容。0表示随机匹配一个值

缺省值:正则匹配失败时取的值

例1:提取第一个Name

a1d5e4d7db9bdce0b6edcaac3732cb6a.png

3829b5f4a39b5429ac94f7711947a22b.png

452b1f89dc104400f780f15f31e00b20.png

例2:提取全部Name

6f6348f92478492f32b32d0a4c77127d.png

23b8d50827f336f385ea0c66b0fce628.png

例3:表达式同时提取Name和population

622637aa00442d00c63e33618f334cde.png

7b82e0a787fd253b7702175130024940.png

例4:拆分身份证号码,提取生日

一个18位的身份证号码,前1-6位是地区,7-14位是生日,15-17位是顺序码,最后1位是校验码,试图通过正则从身份证号中提取地区和生日

正则表达式:

{"(.{6})(.{8})(.{3})"}

(.{6}):任意字符匹配6次,对应匹配结果中的前6位字符(地区)

(.{8}):任意字符匹配8次,对应匹配结果中的第7-14位字符(生日)

从身份证号码中取出地区和生日,对应的正则表达式为:

(.{6})(.{8})(.{3})(.)

匹配第二组→$2$

9441c39015d3f544ec06a460377be727.png

b0d5d5be977689fc1300b6ca1412ca68.png

例5:条件判断取值

提取population=800的城市

e8e95e59e1480c5a16f4941a7af21da3.png

804f4e70917d79e572bd07f27af51820.png

6d2f3423bbc4ed52de02f6caae3c5c00.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值