本文详细介绍了如何在JMeter中传递Token,包括获取Token、使用正则表达式提取Token以及在后续请求中使用Token的过程。文章还提供了详细的配置示例和验证方法,帮助读者掌握JMeter传递token资料的相关操作。
JMeter简介JMeter 是一个开源的 Java 应用程序,主要用于测试各种组件的功能、性能和负载。它能够模拟多种负载(例如多用户并发访问),并支持多种协议(如HTTP、FTP、Web Services、TCP等),因此广泛应用于Web应用性能测试中。
JMeter的基本功能JMeter 提供了以下基本功能:
- 模拟用户行为:可以模拟多个用户同时访问Web服务器,进行压力测试。
- 性能监控:能够监控Web服务器的响应时间、吞吐量、错误率等指标。
- 脚本录制与回放:支持录制浏览器中的操作,生成测试脚本。
- 多种协议支持:除了HTTP,还支持HTTPS、FTP、WebSocket、JDBC等其他协议。
- 数据驱动测试:支持CSV数据输入、正则表达式提取等,能进行复杂的数据驱动测试。
JMeter 主要应用于以下场景:
- Web应用负载测试:用于测试Web应用的响应速度和稳定性。
- 功能测试:验证应用的功能是否符合预期。
- 性能测试:评估应用在不同负载下的性能表现。
- 资源监控:监控服务器资源使用情况。
- 数据库性能测试:通过JDBC采样器测试数据库性能。
Token 是一种用于身份验证和授权的字符串。当用户成功登录后,服务器会返回一个Token,该Token用于后续的API请求中以证明用户身份。Token 可以是JWT(JSON Web Token)、OAuth Token等。
Token的基本概念Token 是一种轻量级认证方式,通过在每个请求中包含Token以代替传统的Cookie认证,从而简化了客户端的存储和服务器的处理。Token 的生命周期由服务器控制,可以设置过期时间或刷新机制。
Token的使用场景Token 通常用于以下场景:
- API接口认证:通过在HTTP头中传递Token进行身份验证。
- 无状态服务:由于Token可以存储在客户端,服务端无需保存会话状态。
- 跨域请求:通过Token实现前端与后端之间安全的跨域通信。
- 移动应用:移动应用中通常使用Token进行用户认证和权限管理。
- 存储方式:Session通常存储在服务器端,而Token存储在客户端。
- 安全性:Token更安全,因为其通过加密签名保证了安全性,而Session可能因为会话劫持而被攻击者利用。
- 性能:Token机制减少了服务器端维护会话的负担,因此在大规模并发场景下性能更好。
- 移动端支持:Token由于其特性,更适合在移动应用中使用。
在JMeter中传递Token,需要先通过一个HTTP请求获取到Token,然后使用正则表达式提取器从响应中提取Token,接着在后续的请求中使用提取到的Token。
准备工作:在JMeter中创建测试计划- 打开JMeter,创建一个新的测试计划,命名为“Token传递测试”。
- 在测试计划下添加一个线程组。线程组用于模拟多个用户并发访问。
- 在线程组下添加第一个HTTP请求,用于获取Token。
HTTP请求示例
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="登录请求" enabled="true">
<stringProp name="HTTPSampler.domain">www.example.com</stringProp>
<stringProp name="HTTPSampler.port">80</stringProp>
<stringProp name="HTTPSampler.path">/login</stringProp>
<stringProp name="HTTPSampler.method">POST</stringProp>
<stringProp name="HTTPSampler.use_keepalive">true</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re">.*</stringProp>
<collectionProp name="HTTPSampler.parameters">
<elementProp name="用户名" elementType="HTTPArgument">
<stringProp name="Argument.name">username</stringProp>
<stringProp name="Argument.value">user</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
<elementProp name="密码" elementType="HTTPArgument">
<stringProp name="Argument.name">password</stringProp>
<stringProp name="Argument.value">password</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
</collectionProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.embedded_url_re">.*</stringProp>
<boolProp name="HTTPSampler.postBodyRaw">false</boolProp>
</HTTPSamplerProxy>
上述代码是一个登录请求的示例,其中包含用户名和密码参数。
获取Token通过HTTP请求获取Token
- 请求类型:POST或GET
- 请求参数:根据API文档设置
- 请求头:根据需要设置Content-Type等
正则表达式提取器
正则表达式提取器用于从HTTP响应中提取Token。在获取Token的HTTP请求后添加一个正则表达式提取器。
<RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="提取Token" enabled="true">
<stringProp name="RegexExtractor.useHeaders">false</stringProp>
<stringProp name="RegexExtractor.refName">Token</stringProp>
<stringProp name="RegexExtractor.regex">access_token":"(.*?)",</stringProp>
<stringProp name="RegexExtractor.template">${1}</stringProp>
<stringProp name="RegexExtractor.match_number">1</stringProp>
<stringProp name="RegexExtractor.default">NOT_FOUND</stringProp>
<stringProp name="RegexExtractor.useNamedGroups">false</stringProp>
</RegexExtractor>
上述代码中的正则表达式将匹配access_token
字段,提取Token。
使用正则表达式提取器从HTTP响应中抽取Token,并将其存储在变量中,供后续使用。
使用Token将Token变量插入到新的HTTP请求中,作为请求头或请求参数。
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="获取用户信息" enabled="true">
<stringProp name="HTTPSampler.domain">www.example.com</stringProp>
<stringProp name="HTTPSampler.port">80</stringProp>
<stringProp name="HTTPSampler.path">/user</stringProp>
<stringProp name="HTTPSampler.method">GET</stringProp>
<stringProp name="HTTPSampler.use_keepalive">true</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re">.*</stringProp>
<collectionProp name="HTTPSampler.parameters">
</collectionProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.embedded_url_re">.*</stringProp>
<boolProp name="HTTPSampler.postBodyRaw">false</boolProp>
<stringProp name="HTTPSampler.head">Authorization: Bearer ${Token}</stringProp>
</HTTPSamplerProxy>
上述代码中的新HTTP请求使用了提取的Token作为请求头。
JMeter配置示例 创建HTTP请求示例创建一个HTTP请求,设置请求的URL、方法等参数。示例中的请求是一个登录请求,用于获取Token。
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="登录请求" enabled="true">
<stringProp name="HTTPSampler.domain">www.example.com</stringProp>
<stringProp name="HTTPSampler.port">80</stringProp>
.
.
.
</HTTPSamplerProxy>
上述代码是一个HTTP请求示例,包含请求参数。
使用正则表达式提取器示例添加正则表达式提取器用于从HTTP响应中抽取Token。
<RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="提取Token" enabled="true">
<stringProp name="RegexExtractor.useHeaders">false</stringProp>
<stringProp name="RegexExtractor.refName">Token</stringProp>
<stringProp name="RegexExtractor.regex">access_token":"(.*?)",</stringProp>
<stringProp name="RegexExtractor.template">${1}</stringProp>
<stringProp name="RegexExtractor.match_number">1</stringProp>
<stringProp name="RegexExtractor.default">NOT_FOUND</stringProp>
<stringProp name="RegexExtractor.useNamedGroups">false</stringProp>
</RegexExtractor>
上述代码中的正则表达式提取器配置了提取Token。
使用用户定义的变量示例创建用户定义的变量,用于存储Token或其他自定义数据。
<ConfigTestElement guiclass="ConfigTestPanel" testclass="ConfigTestElement" testname="用户定义的变量" enabled="true">
<collectionProp name="ConfigTestElement.arguments">
<elementProp name="Token" elementType="Argument">
<stringProp name="Argument.name">Token</stringProp>
<stringProp name="Argument.value">${Token}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
</collectionProp>
</ConfigTestElement>
上述代码中定义了一个名为Token的用户定义变量。
测试验证 如何验证Token传递是否成功通过查看后续请求的响应结果。如果Token传递成功,服务器会返回正确的数据。如果Token无效或缺失,服务器通常会返回401未授权等错误码。
验证步骤:
- 检查HTTP响应码:确保获取Token请求返回200 OK。
- 验证Token提取:确保正则表达式提取器成功提取Token。
- 检查后续请求响应:确保使用Token的请求返回正常数据。
测试验证示例
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="验证Token有效性" enabled="true">
<stringProp name="HTTPSampler.domain">www.example.com</stringProp>
<stringProp name="HTTPSampler.port">80</stringProp>
<stringProp name="HTTPSampler.path">/validate</stringProp>
<stringProp name="HTTPSampler.method">GET</stringProp>
<stringProp name="HTTPSampler.use_keepalive">true</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<stringProp name="HTTPSampler.embedded_url_re">.*</stringProp>
<collectionProp name="HTTPSampler.parameters">
</collectionProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.embedded_url_re">.*</stringProp>
<boolProp name="HTTPSampler.postBodyRaw">false</boolProp>
<stringProp name="HTTPSampler.head">Authorization: Bearer ${Token}</stringProp>
</HTTPSamplerProxy>
上述代码中的验证请求用于检查Token的有效性。
常见问题及解决方法- Token未正确提取:检查正则表达式是否正确匹配。
- 获取Token的请求失败:检查请求参数、URL等是否正确。
- Token过期:可能需要在测试计划中加入Token刷新逻辑。
本文介绍了JMeter中通过Token的身份验证流程,包括如何获取Token,使用正则表达式提取Token,以及如何在后续请求中使用Token。通过这种方式,可以模拟真实场景中用户的身份验证过程,从而进行更准确的性能测试。
推荐进一步学习的资源- 慕课网(https://www.imooc.com/) 提供了大量的编程和测试相关的课程,包括JMeter在内的各种工具教程。
- JMeter官方文档:提供了详细的教程和示例,可以帮助你深入了解JMeter的各种功能。
- Stack Overflow:可以搜索和查看其他用户关于JMeter的问题和解决方案。
- GitHub:有许多JMeter相关的开源项目和示例脚本,可以学习和参考。
通过这些资源,你可以进一步学习和掌握JMeter的高级功能,例如使用聚合报告、分布式测试等,以更好地进行性能测试和压力测试。
共同学习,写下你的评论
评论加载中...
作者其他优质文章