jmeter正则表达式提取器_Jmeter常用获取数据的几种方式

Jmeter在互联网测试中应用广泛,可用于接口测试和性能测试。本文介绍了Jmeter获取数据的多种方法,包括手动写入、正则表达式提取器、Json提取、读取文件、数据库查询、使用随机数和计数器、用时间戳做变量以及将返回值存入文件再使用等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Jmeter在互联网测试中应用非常多,可以用来做接口测试或者性能测试,算是非常不错的一个工具。今天我们简单介绍下Jmeter获取数据的几种方法。

1、手动写入

所有可以固定的参数,我们都可以通过手动写入的方式。例如:HTTP信息头管理器中的Content-Type的值是application/json,通过手动写入的方式来获得数据。

2、正则表达式提取器

对于前后接口有关联,需要将前一个接口的返回值做为后一个接口的请求参数。对于这种参数,我们没有办法提前写入。为了整个项目的连贯性,所以我们需要用到正则表达式提取器来提取前一接口的返回值,然后传递给下一接口。

aceca288b7e7f1ffeb5b8542f31ea112.png

要检查的响应字段:根据实际选择。引用名称:即后面使用要引用的变量名字。

正则表达式:用于将需要的数据提取出来。模板: 表示要提取第几个值,$1$,1表示第一个,$2$,2表示第二个。匹配数据: 0表示随机,1表示全部。缺省值:匹配不到的默认值。

例如:前面一个接口是创建订单,从返回值中得到orderId。现在测试取消这个订单,需要orderId,我们用正则表达式提取器提取出来,可以直接拿来使用。使用方法如下${变量名}

3、Json提取

对于前后接口有关联,需要将前一个接口的返回值做为后一个接口的请求参数。对于这种参数,我们没有办法提前写入。为了整个项目的连贯性,所以我们需要用到Json提取器来提取前一接口的返回值,然后传递给下一接口。

8d93e151456a46634167404b74ceecdd.png

Names of created variables,写入变量名,多个变量名用英文分号分隔。JSON Path中写入json的格式,多个格式用英文分号分隔,例如:$.data.id,

例如:前面一个接口是创建订单,从返回值中得到orderId。现在测试取消这个订单,需要orderId,我们用正则表达式提取器提取出来,可以直接拿来使用。使用方法如下${变量名}

4、读取文件

CSV Data Set Config可以从指定文件中读取数据,filename即文件路径,Variable Names即做为变量名。如果有多列就写多个,逗号隔开。

ae9b5ad37e67815d76b3b5960abfe01d.png

5、数据库查询

在有些使用场景,我们需要去数据库中查询一些数据。这个时候我们就要用到JDBC Connection Config及JDBC Request。

JDBC Connection Config负责连接数据库,JDBC Request负责查询。

JDBC Connection Config的设置中Variable Name与JDBC Request中保持一致,正确填写Database URL, Username,Password,这样可以和数据库建立连接。

JDBC Request中Variable Name与前面一致。SQL Query中输入要执行的SQL语句。Variable Name即要传递的变量名。查询结果的数据是数组,变量值需要带下标。

fe5208c2d236017c76b4d722ebd8d6a4.png

521ec0f94042cfd0eb17ede2f1562d4f.png

6、使用随机数和计数器

在配置元件中的随机变量和计数器,非常好用。随机变量控件中,输入最大和最小值,变量名称和输出格式。计数器空间中,输入最大和最小值,递增频率和引用名称

f78d95451a867bbf2e73e57569c6bdb1.png

46de5a459cc952f87856c0a7729ba5c1.png

7、用时间戳做为变量

有时候随机数可能不能满足我们对于参数的要求,我们可以采用时间戳+随机数的方式,大大减低数据重复的可能性。

${__time(,)} : 默认该公式精确到毫秒级别, 13位数

8、返回值存入文件再使用

前面我们说了采用正则表达式提取器和json提取器来传递参数,能满足我们大部分场景,当使用场景如下时就会显得不那么好用了:在压力测试时,我们需要每个用户都是登录情况下操作。如果我们在前面调用登录接口,势必大大影响整个系统的处理能力,这样不能能客观得到接口的性能。

我们可以采用如下处理方式,在setUp线程组中批量注册或者登陆一批用户(当然总数是够跑一次测试的),把他们的登录信息存入一个文档。在主线程组中再把他们从文件中读取处理,放入headers中,执行下单请求测试。

### 如何在 JMeter 中使用正则表达式提取器及其引用方法 #### 什么是正则表达式提取器正则表达式提取器JMeter 提供的一个功能强大的组件,主要用于从服务器返回的响应中提取所需的数据[^1]。通过定义特定的正则表达式模式,可以精确匹配目标数据并将其存储到变量中以便后续使用。 --- #### 配置正则表达式提取器的关键参数 以下是配置正则表达式提取器时需要设置的主要字段: 1. **名称 (Name)** 给提取器指定一个易于识别的名字,方便管理测试计划中的多个提取器[^3]。 2. **应用范围 (Apply to)** 定义正则表达式作用于哪个部分的内容,默认情况下可以选择 `Body` 或其他选项(如 Headers)。如果仅需处理响应体,则保持默认值即可[^4]。 3. **正则表达式 (Regular Expression)** 输入用于匹配目标数据的具体正则表达式。例如,在 HTML 响应中查找 `<input>` 标签内的属性值可采用如下形式: ```regex <name=(.+?)\svalue=(.+?)> ``` 4. **模板 (Template)** 指定如何解析匹配结果。通常格式为 `$n$`,其中 n 表示捕获组编号。对于上述例子,若希望分别保存 name 和 value 的值,则模板设为 `$1$$;$2$`[^2]。 5. **匹配序号 (Match No.)** 如果存在多个符合条件的结果,可以通过此参数选择具体哪一项作为最终输出。负数表示随机选取其中之一;0 则意味着返回所有可能的匹配项列表[^1]。 6. **默认值 (Default Value)** 当没有任何满足条件的数据被找到时所使用的替代字符串。这有助于防止因缺失预期信息而导致脚本失败[^3]。 --- #### 实际操作案例分析 假设我们正在开发一款登录页面的功能测试场景,并希望通过正则表达式提取 CSRF Token 来完成安全校验流程。已知该令牌嵌套在一个隐藏输入框内,形似下面这段代码片段: ```html <input type="hidden" id="_csrf_token" name="token" value="abcde12345"> ``` 此时可以根据实际需求设计相应的正则表达式与模板组合实现自动化抓取过程: - 正则表达式:`<input.*?id="_csrf_token".*?value="(.*?)">` - 模板:`$1$` 随后将提取出来的 token 存储至自定义变量 `${CSRF_TOKEN}` 下面,从而允许在整个线程组范围内重复调用它参与动态交互逻辑构建工作流[^4]。 --- #### 调试技巧推荐 为了提高效率减少错误发生概率建议遵循以下几个原则来进行前期准备工作: - 将完整的 HTTP 请求单独运行一遍并将完整结果复制粘贴下来; - 运用第三方网站或者插件辅助验证初步构思好的规则准确性; - 只有当确认无误之后才正式集成回原项目文件当中去执行下一步骤动作[^3]。 --- ```python import re # 示例 Python 代码展示简单的正则匹配原理 response_text = '<input type="hidden" id="_csrf_token" name="token" value="abcde12345">' pattern = r'<input.*?id="_csrf_token".*?value="(.*?)">' # 对应前面提到过的正则表达式 match_result = re.search(pattern, response_text) if match_result: csrf_token_value = match_result.group(1) print(f'Extracted CSRF Token: {csrf_token_value}') else: print('No matching pattern found.') ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值