如何在jmeter中把响应中的数据提取出来并引用

 🔥 交流讨论:欢迎加入我们一起学习!

🔥 资源分享耗时200+小时精选的「软件测试」资料包

🔥 教程推荐:火遍全网的《软件测试》教程  

📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

jmeter做接口测试过程中,经常遇到请求需要用到token的时候,我们可以把返回token的接口用后置处理器提取出来,但是在这种情况下,只能适用于当前的线程组,其他线程组无法引用到提取的token变量值,所以必须要生成全局变量让测试计划下的所有线程组都可以引用变量。

同一个线程组下提取token并引用

1、执行获取token接口(登录接口),在查看结果树这里,使用$符号提取token值

$.根节点$.data.token 表示提取根节点下的data节点下的token节点的值

2、使用json提取器,提取登录接口响应结果中的access_token,保存在变量token中

变量路径就是把在结果树提取的路径写上

3、可以使用调试取样器查看提取的token值是否正确

4、下一个接口(列表查询接口)中,需要使用上个登录接口返回的token值,使用${token}引用

不同线程组下提取token并引用

1、使用json提取器提取登录接口响应结果中的access_token,保存在变量token中,操作与上文提到的一样。

2、使用函数助手对话框的setProperty函数,有两个输入框要填写(属性名称和Value of property),属性名称填写一个全局变量名,Value of property填写json提取器提取的access_token(json提取器提取到的access_token赋值给了变量token,此处引用变量${token}得到) 

3、在json提取器下添加一个后置处理器BeanShell PostProcessor;

4、把生成的setProperty函数(${__setProperty(new_token,${token},)})复制到BeanShell PostProcessor中,此时已经把接口需要用到的access_token生成了并保存在全局变量new_token中。

5、引用该全局变量有两种方式

(1)使用函数助手中的property函数,只填写属性名称对应的输入框:全局变量名new_token

把生成的结果填写到列表查询接口需要引用的地方

(2)使用函数助手中的P函数,只填写属性名称对应的输入框:全局变量名new_token 

把生成的结果填写到列表查询接口需要引用的地方

总结

${__setProperty()}${__property()}/${__P()}一起配合使用,setProptety等于把值拿出来,__property/__P 对值进行使用

__P__property函数的简化版,举个例子:${__P(prop1)}会返回属性prop1的值;${__P(prop1,123)} 会返回属性prop1的值,如果prop1未定义值,则返回123;

__property__P之间的区别:用法上__property函数仅仅是比__P函数多了一个可以存值的变量,举个__property用法例子:${__property(pro,var,abcd)}会返回pro的值,如果pro未定义值则会返回abcd,同时会将pro的值存到变量var中

注意事项

如果遇到跨线程组调用参数值不是token值而是变量名时且登录接口能够正常使用的情况下,请检查线程组设置

原因:如果不设置此项,会导致jmeter测试计划下所有添加的线程组同步运行,导致token还没获取出来就已经在调用了,导致获取值时出现错误

最后我邀请你进入我们的【软件测试学习交流群:785128166】, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路

作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:程序员二黑】自提!

<think>嗯,用户问的是JMeter如何提取URL中的数据。首先,我需要确定用户对JMeter的了解程度。可能他们已经有基础,但需要具体的提取方法。JMeter常用的提取方式有用后置处理器,比如正则表达式提取器、JSON提取器或者XPath提取器,但URL的话,可能需要处理路径参数或查询参数。 首先,URL的结构通常包含协议、域名、路径、查询参数等部分。用户可能想从路径中提取动态部分,比如RESTful API中的资源ID,或者从查询参数中获取特定值。比如,URL可能是http://example.com/users/123?name=John,需要提取123或John。 然后,考虑JMeter的元件。正则表达式提取器比较通用,可以处理路径和查询参数。比如,对于路径中的数字,可以用正则表达式/\d+来匹配。而边界提取器可能更适合固定位置的情况。另外,如果URL是作为响应的一部分,可能需要先获取整个URL,再解析。或者,如果请求中已经包含参数,可以通过预处理器提取。 可能需要分步骤说明:首先确定数据位置,然后选择合适的提取器,配置相关参数,最后使用变量。注意,JMeter变量作用域和元件顺序也很重要,后置处理器要在请求之后。另外,用户可能需要调试,比如使用Debug Sampler或查看结果树来验证提取结果。 还要提醒用户关于URL编码的问题,比如查询参数中的特殊字符可能需要处理。或者,如果使用HTTP请求默认值,路径中的变量可能需要动态替换。总之,需要具体例子来演示如何操作,比如正则表达式提取路径参数,或使用${__urlencode()}函数处理参数。 最后,确保回答结构清晰,步骤明确,给出示例和注意事项,帮助用户正确应用。</think>在JMeter提取URL数据,可通过以下步骤实现: --- ### 一、确定数据来源位置 URL数据通常出现在以下场景: 1. **请求路径中的动态参数** (如:`/api/users/${userId}/orders`) 2. **查询参数(Query String)** (如:`?productId=123&category=books`) 3. **服务器重定向后的URL** (需从响应头`Location`字段提取) --- ### 二、常用提取方法 #### 方法1:正则表达式提取器(适用于所有场景) 1. 添加**正则表达式提取器**到请求下 2. 配置参数: - **Apply to**:选择作用范围(主样本/重定向等) - **Field to check**:选`Request URI`(提取请求URL)或`URL`(提取响应URL) - **正则表达式**:例如提取路径参数: ```regex /users/(\d+)/orders # 匹配数字型ID ``` - **模板**:`$1$`(提取第一个捕获组) 3. 通过`${变量名}`引用提取值 #### 方法2:边界提取器(适合固定格式URL) 1. 添加**边界提取器**到请求下 2. 配置左右边界: - 例如提取`productId=123`中的`123`: ```text 左边界:productId= 右边界:& ``` #### 方法3:预处理器(动态生成URL时提取) 在**HTTP请求**中使用前置处理器: ```java // 示例:从变量中拼接URL String id = vars.get("orderId"); sampler.setPath("/api/orders/" + id); ``` --- ### 三、实际案例演示 #### 场景:从重定向URL提取会话ID 1. 发送请求后,服务器返回`302`重定向,响应头包含: ```http Location: /dashboard?sessionId=abc123xyz ``` 2. 添加**正则表达式提取器**: - 正则表达式:`sessionId=(\w+)` - 变量名:`SESSION_ID` 3. 后续请求直接使用`${SESSION_ID}` --- ### 四、调试技巧 1. 使用**Debug Sampler**查看提取的变量值 2. 在**查看结果树**中检查请求/响应数据 3. 正则表达式测试工具推荐:[regex101.com](https://regex101.com) --- ### 五、注意事项 1. **作用域问题**:提取器需放在目标请求的子层级 2. **匹配数量**:默认提取第一个匹配项,需处理多值时设置`Match No.=-1` 3. **性能影响**:避免复杂正则表达式影响测试效率 通过上述方法,可灵活提取URL中的动态参数、路径变量或查询字符串,满足接口串联、数据验证等性能测试需求。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值