Jmeter中关联的使用

关联是Jmeter工具中非常重要的一个技术。因为在测试过程过有些数据是经常发生变化的,要获取并使用这些数据,就要使用关联。
比如: 用户登录后,session信息都不同,有些操作要使用session,就需要将这个动态的信息保存下来。
还有经常遇到的场景,第二个请求提交的参数要从第一个请求的返回数据中获取。

今天要测试是获取某一个城市的天气信息:
http://www.weather.com.cn/data/cityinfo/101010100.html

但这里面有一个城市代码(101010100)不是固定的,要根据测试数据获取不同城市的代码编号,再查询该城市的天气状况。
分析后得出的结论是先要请求一个可以获取城市代码的接口,将获取的代码传递给这个获取天气信息的地址,请求形式为http://www.weather.com.cn/data/cityinfo/ citycode.html, {citycode}就是前一个请求传过来的值。

Step1:
添加一个用户变量city。
这里写图片描述
为TestPlan添加一个线程组。添加第一个HTTP Sampler, 命名为GetCityCode。
添加HTTP信息头管理器,再填写请求信息。
这里写图片描述

这里写图片描述

Step2:
添加一个后置处理器,利用正则提取器将获取到的城市代码取出。
这里写图片描述

Step3:
为该请求添加一个BeanShell断言,验证获取的信息是否正确。
这里写图片描述
关于BeanShell会另有篇幅介绍。
在这其中的FailureMessage就是指,如果断言失败,就是提示该信息。

Step4:
添加断言监听器和结果树。

发送请求后,查看断言和结果树。
这里写图片描述

这里写图片描述

会发现断言失败,使用获取的城市代码和期望的不一致,刚才在FailureMessage中指定的信息就会出现。
因为断言失败了,所以结果树显示为红色。

这里是故意将期望的城市代码写错的。现在在BeanShell断言中修改过来。
这里写图片描述
现在断言成功啦。

Step5:
添加第二个HTTP Sampler,命名为GetWeatherInfo。请求信息如下。
这里写图片描述
在路径中要使用第一个请求返回来的城市代码来提起具体的值。/data/cityinfo/${citycode}.html,要与Step2中正则提取器中的引用名称一致。

Step6:

再添加一个BeanShell断言,来验证结果。
这里写图片描述

查看结果树,显示请求返回的响应数据正确。
这里写图片描述

<think>好的,用户想知道如何在JMeter中设置注册和登录的关联操作。首先,我需要回忆一下JMeter中的关联机制,通常涉及参数提取和变量传递。注册接口通常会产生动态数据,比如用户ID或手机号,而登录可能需要这些数据,同时生成token之类的认证信息。 根据用户提供的引用,比如引用[3]和[4],注册时需要参数化手机号,然后在登录时引用这个手机号,并通过后置处理器(如JSON提取器或正则表达式提取器)提取token。引用[5]详细说明了正则表达式提取器的配置步骤,包括引用名称和正则表达式的写法。 接下来,我需要分步骤说明实现方法。第一步是注册接口的参数化,使用CSV数据文件或者用户参数。第二步是在注册响应中提取动态参数,比如用户ID,可能需要正则表达式或JSON提取器。第三步是登录接口关联注册的数据,引用之前提取的变量,并再次提取登录后的token。最后,在后续请求中使用这些token,比如查询或下单操作。 还要注意线程组的设置,确保每个线程的用户数据独立,避免竞争条件。可能需要提到作用域的问题,比如变量的作用域是当前线程组,跨线程组的话需要其他方法。此外,调试方法如查看结果树和调试取样器也很重要,确保变量正确提取和引用。 用户可能遇到的问题包括变量未正确提取、正则表达式写错或者作用域问题,需要提醒他们检查提取器的配置和变量引用格式是否正确。另外,引用中的示例代码可能帮助用户更直观地理解步骤,比如正则表达式中的写法,或者JSON提取器的路径配置。 最后,相关问题部分需要考虑用户可能进一步想了解的内容,比如如何参数化、如何处理多个动态参数、如何关联跨线程组,或者如何调试关联问题。这些都需要根据已有的引用内容来生成,确保问题相关且有参考依据。</think>### JMeter中注册与登录关联操作的实现方法 在JMeter中实现注册、登录的关联操作,**核心是通过参数提取和变量传递**,将前序接口(如注册)的响应数据传递给后续接口(如登录)。以下是具体步骤: --- #### **一、注册接口参数化** 1. **动态数据生成** - 使用`CSV Data Set Config`或`User Parameters`生成动态用户名、手机号等。例如,注册接口请求体中引用变量`${mobile}`[^3][^4]。 - **示例代码**: ```java // 注册请求体示例(JSON格式) { "username": "${username}", "mobile": "${mobile}", "password": "123456" } ``` 2. **提取注册响应中的动态参数** - 在注册接口后添加`JSON Extractor`或`Regular Expression Extractor`,提取响应中的用户ID或其他标识。例如: - **JSON路径**:`$.data.userId`,保存为变量`registered_userId`[^4]。 - **正则表达式**:`"userId":"(.*?)"`,模板`$1$`,匹配数字`1`[^5]。 --- #### **二、登录接口关联注册数据** 1. **引用注册生成的变量** - 在登录接口的请求参数中直接引用注册提取的变量。例如: ```java // 登录请求体示例 { "mobile": "${mobile}", // 来自注册时的动态参数 "password": "123456" } ``` 2. **提取登录后的Token** - 添加`JSON Extractor`,从登录响应中提取Token,保存为变量`login_token`[^3][^4]。例如: ```java // JSON路径:$.data.token // 正则表达式:"token":"(.*?)" ``` --- #### **三、后续接口使用关联数据** 在需要身份验证的接口(如查询用户信息)中,将Token添加到请求头: ```java // HTTP头管理器 Authorization: Bearer ${login_token} ``` --- #### **四、调试与验证** 1. **添加`View Results Tree`**:检查请求和响应数据,确认变量是否正确提取[^2]。 2. **使用`Debug Sampler`**:查看JMeter变量值,验证关联逻辑是否生效[^5]。 --- #### **注意事项** - **作用域**:提取的变量默认在**当前线程组内有效**,跨线程组需使用`__setProperty`和`__P`函数[^4]。 - **动态参数唯一性**:确保注册时的手机号、用户名等参数唯一(例如添加时间戳或随机数)[^3]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值