本文详细介绍了如何在JMeter中获取和传递Token,包括创建HTTP请求获取Token、使用正则表达式提取Token以及设置用户定义的变量保存Token值。此外,文章还讲解了如何在后续请求中使用Token进行身份验证,并提供了详细的示例代码和配置说明。通过这些步骤,可以确保Token在JMeter中的正确传递和验证。JMeter传递token教程包含了从获取到传递Token的完整流程。
JMeter简介什么是JMeter
JMeter是一个开源的Java桌面应用程序,主要用于测试Web应用和其他基于服务器的应用程序。它支持多种协议,包括HTTP、HTTPS、FTP、SOAP、JDBC等,可以模拟不同类型的负载,帮助开发人员和测试人员测试应用的性能,确保应用在各种负载下的稳定性和响应速度。
JMeter的主要用途
JMeter的主要用途包括:
- 性能测试:通过模拟不同数量的用户并发访问,测试系统的性能,包括响应时间、吞吐量等指标。
- 功能测试:验证应用程序的功能是否正常,确保各个功能模块按预期工作。
- 压力测试:通过增加负载,测试系统的极限性能,找出系统的瓶颈。
- 负载测试:模拟实际用户访问模式,测试系统在不同负载情况下的表现。
- 接口测试:测试不同系统或应用之间的接口,确保它们能正确交互。
JMeter的基本架构
JMeter的基本架构包括以下几个部分:
- 线程组:定义一组虚拟用户进行测试,可以设置线程数(用户数)和循环次数(用户行为)。
- 取样器:发送请求到服务器,如HTTP请求、JDBC请求等。
- 监听器:用于查看响应结果,如查看结果树、聚合报告等。
- 逻辑控制器:控制请求的执行顺序,如循环控制器、If控制器等。
- 断言:用于验证响应数据,确保满足预期结果。
- 定时器:控制请求之间的间隔。
- 配置元件:设置请求参数,如HTTP请求默认管理器、用户定义的变量等。
- 前置处理器:在取样器之前执行,如设置请求头、用户参数等。
Token的概念
Token是一种身份验证机制,用于确认用户的身份和权限。它通常是一个字符串,包含加密或哈希的数据,用于在客户端和服务端之间传递用户身份信息。Token通常由服务器生成,并在客户端存储和传递,以便后续的请求中验证用户身份。
Token的作用
Token的主要作用包括:
- 身份验证:确认用户身份,确保用户请求来自已知的用户。
- 授权:通过Token中的权限信息,限制用户可以访问的资源或执行的操作。
- 无状态:Token通常存储在客户端,服务器端无需维护会话状态,减轻了服务器的负担。
- 安全性:通过加密和哈希等技术,增加身份验证的安全性,避免未授权的访问。
常见的Token类型
常见的Token类型包括:
- JWT(JSON Web Token):一种开放标准(RFC 7519),用于在网络间传输声明(声明是JSON对象)。JWT由三个部分组成:头部、载荷和签名。
- OAuth Token:OAuth是一种授权框架,用于授权第三方应用访问受保护资源,常见的OAuth Token包括访问令牌和刷新令牌。
- Session Token:通常用于Web应用,类似于传统的会话ID,存储在客户端的Cookie中。
- Bearer Token:Bearer是一种简单令牌类型,要求持有令牌的人具有访问权限,通常用于API访问。
创建HTTP请求获取Token
首先,需要创建一个HTTP请求取样器来获取Token。具体步骤如下:
- 添加HTTP请求取样器:右键点击测试计划,选择
添加 -> 取样器 -> HTTP请求
。 - 配置HTTP请求:在HTTP请求取样器中,设置请求的URL、方法(如POST)、路径等。
- 添加请求参数:如果需要传递参数,可以在HTTP请求取样器的
参数
标签页中添加参数。例如,POST请求通常需要传递一些参数来获取Token。
示例代码(HTTP请求取样器配置示例):
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Get Token" enabled="true">
<elementProp name="HTTPsampler.postBodyRaw" elementType="HTTPSampler" guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Get Token" enabled="true">
<stringProp name="HTTPSampler.postBodyRaw">grant_type=password&username=admin&password=123456</stringProp>
</elementProp>
<stringProp name="HTTPSampler.domain">localhost</stringProp>
<stringProp name="HTTPSampler.port">8080</stringProp>
<stringProp name="HTTPSampler.path">/token</stringProp>
<stringProp name="HTTPSampler.method">POST</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">true</boolProp>
<stringProp name="HTTPSampler.connect_timeout">30000</stringProp>
<stringProp name="HTTPSampler.response_timeout">30000</stringProp>
</HTTPSampler>
使用正则表达式提取Token
获取Token后,需要从响应中提取Token值。JMeter提供了正则表达式提取器来实现这一功能。
- 添加正则表达式提取器:右键点击获取Token的HTTP请求取样器,选择
添加 -> 后置处理器 -> 正则表达式提取器
。 - 配置正则表达式提取器:设置正则表达式匹配的规则,从响应中提取Token。
示例代码(正则表达式提取器配置示例):
<RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract Token" enabled="true">
<stringProp name="RegexExtractor.refName">token</stringProp>
<stringProp name="RegexExtractor.regex">access_token":"(.*?)</stringProp>
<stringProp name="RegexExtractor.template">$1$</stringProp>
<stringProp name="RegexExtractor.matchNr">1</stringProp>
<stringProp name="RegexExtractor.default">NOT_FOUND</stringProp>
</RegexExtractor>
保存并查看获取到的Token
获取并提取Token后,可以在测试计划中定义一个用户定义的变量来保存Token值,以便后续请求使用。
- 添加用户定义的变量:右键点击测试计划,选择
添加 -> 配置元件 -> 用户定义的变量
。 - 设置变量值:在用户定义的变量中,设置变量名和提取的Token值。
示例代码(用户定义的变量配置示例):
<UserDefinedVariables guiclass="UserDefinedVariablesGui" testclass="Arguments" testname="User Defined Variables" enabled="true">
<collectionProp name="Arguments.arguments">
<collectionProp name="Argument.value">
<stringProp name="Argument.value">${__BeanShell(vars.get("token"))}</stringProp>
</collectionProp>
<stringProp name="Argument.name">token</stringProp>
</collectionProp>
</UserDefinedVariables>
如何在JMeter中传递Token
使用用户定义的变量传递Token
- 设置用户定义的变量的值:在正则表达式提取器中,将提取的Token值设置到用户定义的变量中。
- 在后续请求中使用变量:在后续的HTTP请求中,使用用户定义的变量名作为Token的值。
示例代码(用户定义的变量在后续请求中的使用):
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Use Token" enabled="true">
<stringProp name="HTTPSampler.domain">localhost</stringProp>
<stringProp name="HTTPSampler.port">8080</stringProp>
<stringProp name="HTTPSampler.path">/protected</stringProp>
<stringProp name="HTTPSampler.method">GET</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">true</boolProp>
<stringProp name="HTTPSampler.connect_timeout">30000</stringProp>
<stringProp name="HTTPSampler.response_timeout">30000</stringProp>
<elementProp name="HTTPsampler.headers" elementType="Header">
<elementProp name="" elementType="Header">
<stringProp name="Header.name">Authorization</stringProp>
<stringProp name="Header.value">Bearer ${token}</stringProp>
</elementProp>
</elementProp>
</HTTPSampler>
使用HTTP请求默认管理器传递Token
HTTP请求默认管理器可以帮助你设置全局的请求参数,包括Header中的Token。
- 添加HTTP请求默认管理器:右键点击测试计划,选择
添加 -> 配置元件 -> HTTP请求默认管理器
。 - 设置全局参数:在HTTP请求默认管理器中,设置全局的请求参数,如URL、路径、Header等。
- 添加Token到Header:在Header中设置Token值。
示例代码(HTTP请求默认管理器配置示例):
<HTTPSamplerProxy guiclass="TestBeanGUI" testclass="HTTPSamplerProxy" testname="HTTP Request Defaults" enabled="true">
<stringProp name="HTTPSampler.domain">localhost</stringProp>
<stringProp name="HTTPSampler.port">8080</stringProp>
<stringProp name="HTTPSampler.path"></stringProp>
<stringProp name="HTTPSampler.method">GET</stringProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler follow_redirects">true</boolProp>
<elementProp name="HTTPsampler.headers" elementType="Header">
<elementProp name="" elementType="Header">
<stringProp name="Header.name">Authorization</stringProp>
<stringProp name="Header.value">Bearer ${token}</stringProp>
</elementProp>
</elementProp>
</HTTPSamplerProxy>
示例演示:实际场景中的Token传递
假设有一个Web服务,需要通过Token进行身份验证。具体步骤如下:
- 获取Token:通过登录请求获取Token。
- 保存Token:使用正则表达式提取器从响应中提取Token。
- 设置Token:在后续的HTTP请求中使用Token进行身份验证。
示例代码:
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Get Token" enabled="true">
<elementProp name="HTTPsampler.postBodyRaw" elementType="HTTPSampler" guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Get Token" enabled="true">
<stringProp name="HTTPSampler.postBodyRaw">grant_type=password&username=admin&password=123456</stringProp>
</elementProp>
<stringProp name="HTTPSampler.domain">localhost</stringProp>
<stringProp name="HTTPSampler.port">8080</stringProp>
<stringProp name="HTTPSampler.path">/token</stringProp>
<stringProp name="HTTPSampler.method">POST</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">true</boolProp>
<stringProp name="HTTPSampler.connect_timeout">30000</stringProp>
<stringProp name="HTTPSampler.response_timeout">30000</stringProp>
</HTTPSampler>
<RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract Token" enabled="true">
<stringProp name="RegexExtractor.refName">token</stringProp>
<stringProp name="RegexExtractor.regex">access_token":"(.*?)</stringProp>
<stringProp name="RegexExtractor.template">$1$</stringProp>
<stringProp name="RegexExtractor.matchNr">1</stringProp>
<stringProp name="RegexExtractor.default">NOT_FOUND</stringProp>
</RegexExtractor>
<UserDefinedVariables guiclass="UserDefinedVariablesGui" testclass="Arguments" testname="User Defined Variables" enabled="true">
<collectionProp name="Arguments.arguments">
<collectionProp name="Argument.value">
<stringProp name="Argument.value">${__BeanShell(vars.get("token"))}</stringProp>
</collectionProp>
<stringProp name="Argument.name">token</stringProp>
</collectionProp>
</UserDefinedVariables>
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Use Token" enabled="true">
<stringProp name="HTTPSampler.domain">localhost</stringProp>
<stringProp name="HTTPSampler.port">8080</stringProp>
<stringProp name="HTTPSampler.path">/protected</stringProp>
<stringProp name="HTTPSampler.method">GET</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">true</boolProp>
<stringProp name="HTTPSampler.connect_timeout">30000</stringProp>
<stringProp name="HTTPSampler.response_timeout">30000</stringProp>
<elementProp name="HTTPsampler.headers" elementType="Header">
<elementProp name="" elementType="Header">
<stringProp name="Header.name">Authorization</stringProp>
<stringProp name="Header.value">Bearer ${token}</stringProp>
</elementProp>
</elementProp>
</HTTPSampler>
测试Token传递是否成功
配置后续请求传递Token
- 添加后续请求:在获取Token的请求之后,添加一个新的HTTP请求,用于验证Token是否传递成功。
- 设置请求参数:在请求中使用提取的Token值进行身份验证。
示例代码(后续请求配置示例):
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Verify Token" enabled="true">
<stringProp name="HTTPSampler.domain">localhost</stringProp>
<stringProp name="HTTPSampler.port">8080</stringProp>
<stringProp name="HTTPSampler.path">/protected</stringProp>
<stringProp name="HTTPSampler.method">GET</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">true</boolProp>
<stringProp name="HTTPSampler.connect_timeout">30000</stringProp>
<stringProp name="HTTPSampler.response_timeout">30000</stringProp>
<elementProp name="HTTPsampler.headers" elementType="Header">
<elementProp name="" elementType="Header">
<stringProp name="Header.name">Authorization</stringProp>
<stringProp name="Header.value">Bearer ${token}</stringProp>
</elementProp>
</elementProp>
</HTTPSampler>
检查响应结果验证Token有效性
- 添加查看结果树监听器:右键点击测试计划,选择
添加 -> 监听器 -> 查看结果树
。 - 查看响应结果:运行测试后,查看结果树,确认响应状态码是否为200,以及响应内容是否符合预期。
示例代码(查看结果树监听器配置示例):
<ResultCollector guiclass="ViewResultsTreeGui" testclass="ResultCollector" testname="View Results Tree" enabled="true">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
<name>saveConfig</name>
<value class="SampleSaveConfiguration">
<boolProp name="SaveControllerSuccess">false</boolProp>
<boolProp name="SaveControllerFailure">false</boolProp>
<boolProp name="SaveSampleLabel">true</boolProp>
<boolProp name="SaveCode">true</boolProp>
<boolProp name="SaveMessage">true</boolProp>
<boolProp name="SaveThreadName">true</boolProp>
<boolProp name="SaveData">true</boolProp>
<boolProp name="SaveBytes">true</boolProp>
<boolProp name="SaveStringEncoding">false</boolProp>
<boolProp name="SaveLatency">true</boolProp>
<boolProp name="SaveThreadName">true</boolProp>
<boolProp name="SaveDataType">true</boolProp>
<boolProp name="SaveSuccess">true</boolProp>
<boolProp name="SaveTimestamp">true</boolProp>
<boolProp name="SaveLatency">true</boolProp>
<boolProp name="SaveEncoding">true</boolProp>
</value>
</objProp>
<boolProp name="ResultCollector.debug_logging">false</boolProp>
<stringProp name="ResultCollector.testLabel">View Results Tree</stringProp>
<stringProp name="ResultCollector.filename"></stringProp>
<stringProp name="ResultCollector.fileFormat">0</stringProp>
<stringProp name="ResultCollector.md5calc">false</stringProp>
</ResultCollector>
确保Token的正确传递
- 检查Token值:确保在请求中正确传递了Token值。
- 验证响应结果:通过查看结果树中的响应内容,确认Token传递成功。
示例代码(检查Token值配置示例):
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Check Token Value" enabled="true">
<stringProp name="HTTPSampler.domain">localhost</stringProp>
<stringProp name="HTTPSampler.port">8080</stringProp>
<stringProp name="HTTPSampler.path">/token</stringProp>
<stringProp name="HTTPSampler.method">GET</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">true</boolProp>
<stringProp name="HTTPSampler.connect_timeout">30000</stringProp>
<stringProp name="HTTPSampler.response_timeout">30000</stringProp>
<elementProp name="HTTPsampler.headers" elementType="Header">
<elementProp name="" elementType="Header">
<stringProp name="Header.name">Authorization</stringProp>
<stringProp name="Header.value">Bearer ${token}</stringProp>
</elementProp>
</elementProp>
</HTTPSampler>
常见问题及解决方案
Token传递失败的常见原因
- Token值未正确传递:检查Token值是否正确传递到后续请求中。
- Token值未正确提取:检查正则表达式提取器是否正确匹配Token值。
- 请求Header配置错误:检查请求Header中的Token值配置是否正确。
- 服务器端Token验证失败:确保服务器端支持传递的Token格式和配置。
解决Token传递中遇到的问题
- 检查请求Header:确保请求Header中包含了正确的Token值。
- 检查正则表达式匹配:确保正则表达式正确匹配并提取了Token值。
- 检查Token的有效性:确保Token值在服务器端是有效的,没有过期。
- 查看日志和响应码:检查服务器端的日志和响应码,定位问题原因。
注意事项及最佳实践
- 使用HTTPS:确保使用HTTPS协议进行Token传递,增加安全性。
- 检查Token格式:确保传递的Token格式正确,符合服务器端的预期。
- 定期刷新Token:对于时效性较强的Token,定期刷新Token以确保验证。
- 使用环境变量:在开发和测试环境中使用环境变量存储Token值,避免硬编码。
共同学习,写下你的评论
评论加载中...
作者其他优质文章