本文详细介绍了如何在JMeter中获取和传递Token,包括创建HTTP请求获取Token、使用正则表达式提取Token以及设置用户定义的变量保存Token值。此外,文章还讲解了如何在后续请求中使用Token进行身份验证,并提供了详细的示例代码和配置说明。通过这些步骤,可以确保Token在JMeter中的正确传递和验证。JMeter传递token教程包含了从获取到传递Token的完整流程。
JMeter简介JMeter是一个开源的Java桌面应用程序,主要用于测试Web应用和其他基于服务器的应用程序。它支持多种协议,包括HTTP、HTTPS、FTP、SOAP、JDBC等,可以模拟不同类型的负载,帮助开发人员和测试人员测试应用的性能,确保应用在各种负载下的稳定性和响应速度。
JMeter的主要用途包括:
JMeter的基本架构包括以下几个部分:
Token是一种身份验证机制,用于确认用户的身份和权限。它通常是一个字符串,包含加密或哈希的数据,用于在客户端和服务端之间传递用户身份信息。Token通常由服务器生成,并在客户端存储和传递,以便后续的请求中验证用户身份。
Token的主要作用包括:
常见的Token类型包括:
首先,需要创建一个HTTP请求取样器来获取Token。具体步骤如下:
添加 -> 取样器 -> 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值。JMeter提供了正则表达式提取器来实现这一功能。
添加 -> 后置处理器 -> 正则表达式提取器
。示例代码(正则表达式提取器配置示例):
<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值,以便后续请求使用。
添加 -> 配置元件 -> 用户定义的变量
。示例代码(用户定义的变量配置示例):
<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
示例代码(用户定义的变量在后续请求中的使用):
<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请求默认管理器可以帮助你设置全局的请求参数,包括Header中的Token。
添加 -> 配置元件 -> HTTP请求默认管理器
。示例代码(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>
假设有一个Web服务,需要通过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>
示例代码(后续请求配置示例):
<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>
添加 -> 监听器 -> 查看结果树
。示例代码(查看结果树监听器配置示例):
<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值配置示例):
<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>常见问题及解决方案