手记

JMeter传递token资料简易教程

概述

本文详细介绍了如何在JMeter中传递Token,包括获取Token、使用正则表达式提取Token以及在后续请求中使用Token的过程。文章还提供了详细的配置示例和验证方法,帮助读者掌握JMeter传递token资料的相关操作。

JMeter简介

JMeter 是一个开源的 Java 应用程序,主要用于测试各种组件的功能、性能和负载。它能够模拟多种负载(例如多用户并发访问),并支持多种协议(如HTTP、FTP、Web Services、TCP等),因此广泛应用于Web应用性能测试中。

JMeter的基本功能

JMeter 提供了以下基本功能:

  1. 模拟用户行为:可以模拟多个用户同时访问Web服务器,进行压力测试。
  2. 性能监控:能够监控Web服务器的响应时间、吞吐量、错误率等指标。
  3. 脚本录制与回放:支持录制浏览器中的操作,生成测试脚本。
  4. 多种协议支持:除了HTTP,还支持HTTPS、FTP、WebSocket、JDBC等其他协议。
  5. 数据驱动测试:支持CSV数据输入、正则表达式提取等,能进行复杂的数据驱动测试。
JMeter的应用场景

JMeter 主要应用于以下场景:

  1. Web应用负载测试:用于测试Web应用的响应速度和稳定性。
  2. 功能测试:验证应用的功能是否符合预期。
  3. 性能测试:评估应用在不同负载下的性能表现。
  4. 资源监控:监控服务器资源使用情况。
  5. 数据库性能测试:通过JDBC采样器测试数据库性能。
什么是Token

Token 是一种用于身份验证和授权的字符串。当用户成功登录后,服务器会返回一个Token,该Token用于后续的API请求中以证明用户身份。Token 可以是JWT(JSON Web Token)、OAuth Token等。

Token的基本概念

Token 是一种轻量级认证方式,通过在每个请求中包含Token以代替传统的Cookie认证,从而简化了客户端的存储和服务器的处理。Token 的生命周期由服务器控制,可以设置过期时间或刷新机制。

Token的使用场景

Token 通常用于以下场景:

  1. API接口认证:通过在HTTP头中传递Token进行身份验证。
  2. 无状态服务:由于Token可以存储在客户端,服务端无需保存会话状态。
  3. 跨域请求:通过Token实现前端与后端之间安全的跨域通信。
  4. 移动应用:移动应用中通常使用Token进行用户认证和权限管理。
Token与Session的区别
  • 存储方式:Session通常存储在服务器端,而Token存储在客户端。
  • 安全性:Token更安全,因为其通过加密签名保证了安全性,而Session可能因为会话劫持而被攻击者利用。
  • 性能:Token机制减少了服务器端维护会话的负担,因此在大规模并发场景下性能更好。
  • 移动端支持:Token由于其特性,更适合在移动应用中使用。
JMeter中如何传递Token

在JMeter中传递Token,需要先通过一个HTTP请求获取到Token,然后使用正则表达式提取器从响应中提取Token,接着在后续的请求中使用提取到的Token。

准备工作:在JMeter中创建测试计划
  1. 打开JMeter,创建一个新的测试计划,命名为“Token传递测试”。
  2. 在测试计划下添加一个线程组。线程组用于模拟多个用户并发访问。
  3. 在线程组下添加第一个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未授权等错误码。

验证步骤:

  1. 检查HTTP响应码:确保获取Token请求返回200 OK。
  2. 验证Token提取:确保正则表达式提取器成功提取Token。
  3. 检查后续请求响应:确保使用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的高级功能,例如使用聚合报告、分布式测试等,以更好地进行性能测试和压力测试。

0人推荐
随时随地看视频
慕课网APP