您当前的位置:首页 > 互联网教程

JMeter 用JSON和正则提取多个值

发布时间:2025-05-20 14:11:49    发布人:远客网络

JMeter 用JSON和正则提取多个值

一、JMeter 用JSON和正则提取多个值

1、JMeter中处理JSON与正则表达式提取多个值时,面对数据中的转义符,会产生不同影响。本文将详细探讨如何在JMeter中使用这两种方法提取数据,并针对转义符的处理进行说明。

2、首先,我们通过示例接口了解提取需求。示例接口用于登录,提取返回的uuid和token作为后续请求的头部信息。两个示例返回数据结构相似,但示例2的字段值包含转义符。

3、使用JSON提取器,一次性提取多个值相对直觉。对于不包含转义符的示例1,JSON提取操作简便。然而,面对示例2中转义符的存在,常规JSON提取策略可能无法直接有效提取uuid和token。为解决此问题,可以先提取data字段,再结合shell脚本进行进一步处理,以获取uuid和token。欢迎分享更优解决方案,共同探讨。

4、对于正则提取,我们通常认为其提取多个值的逻辑与JSON提取相似,然而实际情况并非如此简单。尝试使用形如`token":“(.?)“,“identity”:”(.?)”`的正则表达式时,会发现如何正确设置“Name of created variable”字段成为关键问题。面对多个变量名称与分隔符号的设置,正确的配置对于提取过程至关重要。调试后发现,虽然可以写出多个变量名称并使用符号分隔,但提取的多个值最终会合并到一个变量中,且包含特定符号,而非各自独立。为解决此问题,通过调整正则表达式和变量引用,例如将`XX_g1 XX_g2`作为提取结果,我们能够分别引用`user_g1`和`user_g2`,实现预期的数据提取。

5、面对数据中包含斜杠转义符的情况,使用正则表达式提取时会遇到挑战。这是因为JMeter在处理响应数据时,对转义符的处理可能不够理想,导致正则表达式提取失败。为应对这一挑战,需要在正则表达式中添加额外的转义处理,确保转义符被正确识别和处理。通过这一调整,可以有效克服转义符对提取操作的负面影响,实现数据的准确提取。

二、JMeter中提取登录中的token

1、在JMeter中进行登录操作并提取token,主要步骤如下:

2、接着,添加HTTP默认信息头,确保请求是POST方法,设置content-type为application/json。

3、随后,添加HTTP请求,用于执行登录操作。

4、紧接着,添加查看树,用于检查请求的详细响应。

5、随后,添加后置处理JSON提取器,用于从登录响应中提取token。

6、步骤完成后,执行JSON提取器参数,从响应中准确获取token。

7、然后,添加另一个HTTP请求,这次是用于获取需要使用token的接口。

8、在新请求中,添加信息头,并引用之前提取的token变量。

9、最后,通过查看树结果,确保token成功添加到请求中。

10、对于正则表达式提取器的使用,其方法与JSON提取器类似,只是替换为正则表达式。

11、“()”:用于括起来提取特定的匹配项。

12、“.”:匹配除换行符外的任何字符。

13、“+”:匹配字符至少出现一次(一次或多次)。

14、“?”:匹配字符最多出现一次(0次或1次)。

15、“?”:匹配字符可以不出现、出现一次或多次(0次、1次或多次)。

16、“(.*)”:使用贪婪模式,匹配尽可能多的字符。

17、“(.*?)”或“(.+?)”:使用非贪婪模式,匹配尽可能少的字符。

18、总结,JMeter中提取登录中的token涉及添加线程组、设置请求、使用JSON或正则表达式提取器,最后通过查看树验证提取结果。

三、jmeter接口测试-15正则表达式关联

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

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

3、那么我们在接下来的接口-经验库列表中,就必须带入这一串token,否则响应报错,如下图所示

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

5、观察请求头,发现传入了一串token,并且响应结果正确

6、自此,一个完整的登录关联就结束了。后续接口直接调用该token就可以。我们接下来继续说其它的参数关联

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

8、先新增一个经验库,可以看到结果中返回了一个id,我在后续接口中都必须调用此唯一性的id

9、接下来写一个正则将其取出,注意与之前token正则的不同之处

10、后续接口可以调用此参数,并正确响应

11、好了,一个完整的登录-查看-删除的流程到这里就可以结束了

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

13、一般(.+?)和(.*?)能够满足我们80%的使用场景。所以,一般的正则表达式都可以写成下面这2种

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

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

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

17、匹配数字-****1****:表示取所有返回值,此时提取结果是一个数组,其余正整数代表第几个匹配的内容提取出来。如果匹配数字选择的是-1,后续还可以通过{XXX_2}来取第2个匹配的内容。

18、匹配数字0:表示随机取一个返回值

19、例3:表达式同时提取Name和population,并传出两个参数