软件工程

JMeter传递token教程:新手入门指南

本文主要是介绍JMeter传递token教程:新手入门指南,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
概述

本文详细介绍了如何在JMeter中获取和传递Token,包括创建HTTP请求获取Token、使用正则表达式提取Token以及设置用户定义的变量保存Token值。此外,文章还讲解了如何在后续请求中使用Token进行身份验证,并提供了详细的示例代码和配置说明。通过这些步骤,可以确保Token在JMeter中的正确传递和验证。JMeter传递token教程包含了从获取到传递Token的完整流程。

JMeter简介

什么是JMeter

JMeter是一个开源的Java桌面应用程序,主要用于测试Web应用和其他基于服务器的应用程序。它支持多种协议,包括HTTP、HTTPS、FTP、SOAP、JDBC等,可以模拟不同类型的负载,帮助开发人员和测试人员测试应用的性能,确保应用在各种负载下的稳定性和响应速度。

JMeter的主要用途

JMeter的主要用途包括:

  1. 性能测试:通过模拟不同数量的用户并发访问,测试系统的性能,包括响应时间、吞吐量等指标。
  2. 功能测试:验证应用程序的功能是否正常,确保各个功能模块按预期工作。
  3. 压力测试:通过增加负载,测试系统的极限性能,找出系统的瓶颈。
  4. 负载测试:模拟实际用户访问模式,测试系统在不同负载情况下的表现。
  5. 接口测试:测试不同系统或应用之间的接口,确保它们能正确交互。

JMeter的基本架构

JMeter的基本架构包括以下几个部分:

  1. 线程组:定义一组虚拟用户进行测试,可以设置线程数(用户数)和循环次数(用户行为)。
  2. 取样器:发送请求到服务器,如HTTP请求、JDBC请求等。
  3. 监听器:用于查看响应结果,如查看结果树、聚合报告等。
  4. 逻辑控制器:控制请求的执行顺序,如循环控制器、If控制器等。
  5. 断言:用于验证响应数据,确保满足预期结果。
  6. 定时器:控制请求之间的间隔。
  7. 配置元件:设置请求参数,如HTTP请求默认管理器、用户定义的变量等。
  8. 前置处理器:在取样器之前执行,如设置请求头、用户参数等。
什么是Token

Token的概念

Token是一种身份验证机制,用于确认用户的身份和权限。它通常是一个字符串,包含加密或哈希的数据,用于在客户端和服务端之间传递用户身份信息。Token通常由服务器生成,并在客户端存储和传递,以便后续的请求中验证用户身份。

Token的作用

Token的主要作用包括:

  1. 身份验证:确认用户身份,确保用户请求来自已知的用户。
  2. 授权:通过Token中的权限信息,限制用户可以访问的资源或执行的操作。
  3. 无状态:Token通常存储在客户端,服务器端无需维护会话状态,减轻了服务器的负担。
  4. 安全性:通过加密和哈希等技术,增加身份验证的安全性,避免未授权的访问。

常见的Token类型

常见的Token类型包括:

  1. JWT(JSON Web Token):一种开放标准(RFC 7519),用于在网络间传输声明(声明是JSON对象)。JWT由三个部分组成:头部、载荷和签名。
  2. OAuth Token:OAuth是一种授权框架,用于授权第三方应用访问受保护资源,常见的OAuth Token包括访问令牌和刷新令牌。
  3. Session Token:通常用于Web应用,类似于传统的会话ID,存储在客户端的Cookie中。
  4. Bearer Token:Bearer是一种简单令牌类型,要求持有令牌的人具有访问权限,通常用于API访问。
如何在JMeter中获取Token

创建HTTP请求获取Token

首先,需要创建一个HTTP请求取样器来获取Token。具体步骤如下:

  1. 添加HTTP请求取样器:右键点击测试计划,选择添加 -> 取样器 -> HTTP请求
  2. 配置HTTP请求:在HTTP请求取样器中,设置请求的URL、方法(如POST)、路径等。
  3. 添加请求参数:如果需要传递参数,可以在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&amp;username=admin&amp;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提供了正则表达式提取器来实现这一功能。

  1. 添加正则表达式提取器:右键点击获取Token的HTTP请求取样器,选择添加 -> 后置处理器 -> 正则表达式提取器
  2. 配置正则表达式提取器:设置正则表达式匹配的规则,从响应中提取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值,以便后续请求使用。

  1. 添加用户定义的变量:右键点击测试计划,选择添加 -> 配置元件 -> 用户定义的变量
  2. 设置变量值:在用户定义的变量中,设置变量名和提取的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

  1. 设置用户定义的变量的值:在正则表达式提取器中,将提取的Token值设置到用户定义的变量中。
  2. 在后续请求中使用变量:在后续的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。

  1. 添加HTTP请求默认管理器:右键点击测试计划,选择添加 -> 配置元件 -> HTTP请求默认管理器
  2. 设置全局参数:在HTTP请求默认管理器中,设置全局的请求参数,如URL、路径、Header等。
  3. 添加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进行身份验证。具体步骤如下:

  1. 获取Token:通过登录请求获取Token。
  2. 保存Token:使用正则表达式提取器从响应中提取Token。
  3. 设置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&amp;username=admin&amp;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

  1. 添加后续请求:在获取Token的请求之后,添加一个新的HTTP请求,用于验证Token是否传递成功。
  2. 设置请求参数:在请求中使用提取的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有效性

  1. 添加查看结果树监听器:右键点击测试计划,选择添加 -> 监听器 -> 查看结果树
  2. 查看响应结果:运行测试后,查看结果树,确认响应状态码是否为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的正确传递

  1. 检查Token值:确保在请求中正确传递了Token值。
  2. 验证响应结果:通过查看结果树中的响应内容,确认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传递失败的常见原因

  1. Token值未正确传递:检查Token值是否正确传递到后续请求中。
  2. Token值未正确提取:检查正则表达式提取器是否正确匹配Token值。
  3. 请求Header配置错误:检查请求Header中的Token值配置是否正确。
  4. 服务器端Token验证失败:确保服务器端支持传递的Token格式和配置。

解决Token传递中遇到的问题

  1. 检查请求Header:确保请求Header中包含了正确的Token值。
  2. 检查正则表达式匹配:确保正则表达式正确匹配并提取了Token值。
  3. 检查Token的有效性:确保Token值在服务器端是有效的,没有过期。
  4. 查看日志和响应码:检查服务器端的日志和响应码,定位问题原因。

注意事项及最佳实践

  1. 使用HTTPS:确保使用HTTPS协议进行Token传递,增加安全性。
  2. 检查Token格式:确保传递的Token格式正确,符合服务器端的预期。
  3. 定期刷新Token:对于时效性较强的Token,定期刷新Token以确保验证。
  4. 使用环境变量:在开发和测试环境中使用环境变量存储Token值,避免硬编码。
这篇关于JMeter传递token教程:新手入门指南的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!