本文详细介绍了如何在JMeter中传递Token,包括获取Token、使用正则表达式提取Token以及在后续请求中使用Token的过程。文章还提供了详细的配置示例和验证方法,帮助读者掌握JMeter传递token资料的相关操作。
JMeter 是一个开源的 Java 应用程序,主要用于测试各种组件的功能、性能和负载。它能够模拟多种负载(例如多用户并发访问),并支持多种协议(如HTTP、FTP、Web Services、TCP等),因此广泛应用于Web应用性能测试中。
JMeter 提供了以下基本功能:
JMeter 主要应用于以下场景:
Token 是一种用于身份验证和授权的字符串。当用户成功登录后,服务器会返回一个Token,该Token用于后续的API请求中以证明用户身份。Token 可以是JWT(JSON Web Token)、OAuth Token等。
Token 是一种轻量级认证方式,通过在每个请求中包含Token以代替传统的Cookie认证,从而简化了客户端的存储和服务器的处理。Token 的生命周期由服务器控制,可以设置过期时间或刷新机制。
Token 通常用于以下场景:
在JMeter中传递Token,需要先通过一个HTTP请求获取到Token,然后使用正则表达式提取器从响应中提取Token,接着在后续的请求中使用提取到的Token。
<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>
上述代码是一个登录请求的示例,其中包含用户名和密码参数。
正则表达式提取器用于从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变量插入到新的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作为请求头。
创建一个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无效或缺失,服务器通常会返回401未授权等错误码。
<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的有效性。
本文介绍了JMeter中通过Token的身份验证流程,包括如何获取Token,使用正则表达式提取Token,以及如何在后续请求中使用Token。通过这种方式,可以模拟真实场景中用户的身份验证过程,从而进行更准确的性能测试。
通过这些资源,你可以进一步学习和掌握JMeter的高级功能,例如使用聚合报告、分布式测试等,以更好地进行性能测试和压力测试。