软件工程

JMeter传递token学习入门教程

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

本文介绍了如何使用JMeter进行token传递,适合JMeter初学者。文章详细讲解了JMeter的基本概念和功能,并指导读者如何下载和安装JMeter。同时,文章还提供了在JMeter中传递token的具体方法,涵盖从创建测试计划到实战演练的全过程。JMeter传递token学习入门教程将帮助读者掌握这一关键技能。

JMeter传递token学习入门教程
JMeter简介

JMeter的基本概念

Apache JMeter 是一个开源的压力测试工具。它主要用于测试Web应用程序的性能,支持多种协议,如HTTP、HTTPS、FTP、LDAP等,也可以测试数据库、WebSocket、JMS、Java对象、OS进程等。

JMeter的功能和应用场景

JMeter的主要功能包括:

  • 生成负载以测试服务器、网络或软件应用的性能。
  • 测试Web应用服务器,如Apache HTTP服务器。
  • 测试静态和动态资源,如文件、数据库查询和Java Web服务。
  • 在各种类型的数据库上执行测试。
  • 测试邮件服务器。
  • 测试数据库和外部系统调用。
  • 测试各种类型的应用程序,如Java、FTP服务器等。

应用场景:

  • 模拟真实用户的访问行为来测试Web应用性能。
  • 测试Web服务器的承载能力。
  • 测试数据库系统的响应时间。
  • 测试网络设备的稳定性。

如何下载和安装JMeter

  1. 访问JMeter官方网站下载最新版本的JMeter。
  2. 解压下载的压缩包到指定目录。
  3. 运行JMeter图形界面,可以通过双击 bin 目录下的 jmeter.bat(Windows)或 jmeter(Linux/Mac)文件启动。
  4. 通过图形界面创建测试计划。
# Windows 下载示例
wget https://downloads.apache.org/jmeter/binaries/apache-jmeter-5.4.1.zip
# 解压
unzip apache-jmeter-5.4.1.zip
# 启动JMeter
cd apache-jmeter-5.4.1/bin
jmeter.bat
Token的基本概念

什么是Token

Token是一种用于身份验证的凭证。在OAuth、JWT等协议中,token用于代替传统的Cookie登录方式。它可以在请求中传递,用以标识请求发起者的身份。Token通常由服务端生成,并在客户端存储,用于后续请求中的身份验证。

Token的作用和重要性

  • 身份验证:使用token验证用户身份,而不需要每次都调用数据库来验证用户名和密码。
  • 权限管理:通过token中的权限信息来限制用户操作。
  • 安全性:token可以通过加密来保护敏感信息。
  • 会话管理:token可以替代传统的会话(session)管理,支持无状态的会话管理。

Token与Session的区别

  • Session:通常在服务器端存储用户的会话信息,每次客户端请求时,服务器需要通过cookie或请求参数获取session标识,再访问服务器内存中的session对象。
  • Token:token存储在客户端,每次请求时,客户端将token作为请求的一部分发送给服务器,服务器仅需验证token的有效性即可。
JMeter的基本操作

创建JMeter测试计划

  1. 打开JMeter。
  2. 选择 "File" -> "New Test Plan" 创建一个新的测试计划。
  3. 在测试计划下创建线程组。
  4. 在线程组下添加HTTP请求等采样器。
<!-- 示例测试计划XML配置 -->
<TestPlan>
    <ThreadGroup>
        <HTTPSampler>
            <HTTPSamplerTest>
                <HTTPSamplerTestElement>
                    <!-- 请求参数配置 -->
                </HTTPSamplerTestElement>
            </HTTPSamplerTest>
        </HTTPSampler>
    </ThreadGroup>
</TestPlan>

添加线程组和采样器

  1. 线程组:模拟用户访问行为,参数如并发用户数、循环次数等。
  2. 采样器:用于发送HTTP请求,可以配置URL、请求方法(GET/POST)等。
<ThreadGroup>
    <elementProp name="Threads" elementType="jp.keizo.jmeter.gui.ThreadGroupGui">
        <ThreadGroup>
            <ThreadGroup guiclass="jp.keizo.jmeter.gui.ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
                <stringProp name="ThreadGroup.num_threads">5</stringProp>
                <stringProp name="ThreadGroup.ramp_time">1</stringProp>
                <boolProp name="ThreadGroup.scheduler">false</boolProp>
                <stringProp name="ThreadGroup.duration"></stringProp>
                <stringProp name="ThreadGroup.delay"></stringProp>
            </ThreadGroup>
        </ThreadGroup>
    </elementProp>
</ThreadGroup>

设置请求参数

  • HTTP请求参数:可以设置请求头、请求体等。
  • 参数化:使用变量等方式参数化请求参数。
<HTTPSampler>
    <HTTPSamplerTest>
        <HTTPSamplerTestElement>
            <stringProp name="HTTPSampler.domain">example.com</stringProp>
            <stringProp name="HTTPSampler.port">80</stringProp>
            <stringProp name="HTTPSampler.path">/login</stringProp>
            <stringProp name="HTTPSampler.method">POST</stringProp>
            <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
                <Arguments>
                    <elementProp name="username" elementType="Argument">
                        <Argument>
                            <stringProp name="Argument.name">username</stringProp>
                            <stringProp name="Argument.value">user1</stringProp>
                            <stringProp name="Argument.metadata">=</stringProp>
                        </Argument>
                    </elementProp>
                    <elementProp name="password" elementType="Argument">
                        <Argument>
                            <stringProp name="Argument.name">password</stringProp>
                            <stringProp name="Argument.value">pass123</stringProp>
                            <stringProp name="Argument.metadata">=</stringProp>
                        </Argument>
                    </elementProp>
                </Arguments>
            </elementProp>
        </HTTPSamplerTestElement>
    </HTTPSamplerTest>
</HTTPSampler>

查看结果树和监听器

  • 结果树:查看每个请求的响应结果,包括响应时间、响应码、响应体等。
  • 监听器:如查看听器可以记录每个请求的详情,聚合报告可以统计所有请求的性能数据。
<Listener>
    <ResultCollector>
        <ResultCollector guiclass="jp.keizo.jmeter.results.dashboard.gui.ResultCollectorGui" testclass="ResultCollector" testname="View Results Tree" enabled="true">
            <boolProp name="ResultCollector.error_logging">false</boolProp>
            <objProp>
                <name>saveConfig</name>
                <value class="jp.keizo.jmeter.results.dashboard.config.ResultCollectorSaveConfig">
                    <objProp>
                        <name>filename</name>
                        <value class="java.lang.String">jmeter_results.jtl</value>
                    </objProp>
                </value>
            </objProp>
            <objProp>
                <name>filterString</name>
                <value class="java.lang.String"></value>
            </objProp>
            <objProp>
                <name>filename</name>
                <value class="java.lang.String">${JMeterHome}/bin/jmeter_results.jtl</value>
            </objProp>
        </ResultCollector>
    </ResultCollector>
</Listener>
传递Token的方法

在HTTP请求中传递Token

可以在HTTP请求中直接添加token作为请求头或查询参数。

<HTTPSampler>
    <HTTPSamplerTest>
        <HTTPSamplerTestElement>
            <stringProp name="HTTPSampler.domain">example.com</stringProp>
            <stringProp name="HTTPSampler.port">80</stringProp>
            <stringProp name="HTTPSampler.path">/protected</stringProp>
            <stringProp name="HTTPSampler.method">GET</stringProp>
            <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
                <Arguments>
                    <elementProp name="token" elementType="Argument">
                        <Argument>
                            <stringProp name="Argument.name">Authorization</stringProp>
                            <stringProp name="Argument.value">Bearer ${__property(TOKEN)}</stringProp>
                            <stringProp name="Argument.metadata">=</stringProp>
                        </Argument>
                    </elementProp>
                </Arguments>
            </elementProp>
        </HTTPSamplerTestElement>
    </HTTPSamplerTest>
</HTTPSampler>

使用HTTP请求默认管理器设置Token

HTTP请求默认管理器可以设置全局的请求头,这样所有使用该管理器的HTTP请求都会包含这些默认设置。

<HTTPSampler>
    <HTTPSamplerTest>
        <HTTPSamplerTestElement>
            <stringProp name="HTTPSampler.domain">example.com</stringProp>
            <stringProp name="HTTPSampler.port">80</stringProp>
            <stringProp name="HTTPSampler.path">/protected</stringProp>
            <stringProp name="HTTPSampler.method">GET</stringProp>
        </HTTPSamplerTestElement>
    </HTTPSamplerTest>
    <HTTPDefaults>
        <HTTPDefaultsTestElement>
            <boolProp name="HTTPsampler.defaultHeaders">true</boolProp>
            <elementProp name="HTTPsampler.defaultHeaders" elementType="HTTPHeader">
                <HTTPHeader>
                    <HeaderElement>
                        <stringProp name="Header.name">Authorization</stringProp>
                        <stringProp name="Header.value">Bearer ${__property(TOKEN)}</stringProp>
                    </HeaderElement>
                </HTTPHeader>
            </elementProp>
        </HTTPDefaultsTestElement>
    </HTTPDefaults>
</HTTPSampler>

Token的自动提取和传递

使用PostProcessor中的正则表达式提取器或JSON提取器自动从响应中提取Token,并设置为全局变量。

<HTTPSampler>
    <HTTPSamplerTest>
        <HTTPSamplerTestElement>
            <stringProp name="HTTPSampler.domain">example.com</stringProp>
            <stringProp name="HTTPSampler.port">80</stringProp>
            <stringProp name="HTTPSampler.path">/login</stringProp>
            <stringProp name="HTTPSampler.method">POST</stringProp>
        </HTTPSamplerTestElement>
    </HTTPSamplerTest>
    <PostProcessor>
        <RegularExpressionExtractor>
            <RegularExpressionExtractorTestElement>
                <stringProp name="referenceName">USER_TOKEN</stringProp>
                <stringProp name="matchNo">1</stringProp>
                <stringProp name="defaultValue"></stringProp>
                <stringProp name="regexp">"token":"(.*?)",</stringProp>
                <stringProp name="scope">body</stringProp>
            </RegularExpressionExtractorTestElement>
        </RegularExpressionExtractor>
    </PostProcessor>
</HTTPSampler>

使用正则表达式提取Token

示例:假设响应体中包含如下JSON数据:

{
    "success": true,
    "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
    "message": "Login successful"
}

可以使用如下的正则表达式提取Token:

<HTTPSampler>
    <HTTPSamplerTest>
        <HTTPSamplerTestElement>
            <stringProp name="HTTPSampler.domain">example.com</stringProp>
            <stringProp name="HTTPSampler.port">80</stringProp>
            <stringProp name="HTTPSampler.path">/login</stringProp>
            <stringProp name="HTTPSampler.method">POST</stringProp>
        </HTTPSamplerTestElement>
    </HTTPSamplerTest>
    <PostProcessor>
        <RegularExpressionExtractor>
            <RegularExpressionExtractorTestElement>
                <stringProp name="referenceName">USER_TOKEN</stringProp>
                <stringProp name="matchNo">1</stringProp>
                <stringProp name="defaultValue"></stringProp>
                <stringProp name="regexp">"token":"(.*?)",</stringProp>
                <stringProp name="scope">body</stringProp>
            </RegularExpressionExtractorTestElement>
        </RegularExpressionExtractor>
    </PostProcessor>
</HTTPSampler>
实战演练

使用JMeter进行登录请求

  1. 创建HTTP请求,设置POST方法,请求URL为登录接口。
  2. 设置请求参数,如用户名和密码。
<HTTPSampler>
    <HTTPSamplerTest>
        <HTTPSamplerTestElement>
            <stringProp name="HTTPSampler.domain">example.com</stringProp>
            <stringProp name="HTTPSampler.port">80</stringProp>
            <stringProp name="HTTPSampler.path">/login</stringProp>
            <stringProp name="HTTPSampler.method">POST</stringProp>
            <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
                <Arguments>
                    <elementProp name="username" elementType="Argument">
                        <Argument>
                            <stringProp name="Argument.name">username</stringProp>
                            <stringProp name="Argument.value">user1</stringProp>
                            <stringProp name="Argument.metadata">=</stringProp>
                        </Argument>
                    </elementProp>
                    <elementProp name="password" elementType="Argument">
                        <Argument>
                            <stringProp name="Argument.name">password</stringProp>
                            <stringProp name="Argument.value">pass123</stringProp>
                            <stringProp name="Argument.metadata">=</stringProp>
                        </Argument>
                    </elementProp>
                </Arguments>
            </elementProp>
        </HTTPSamplerTestElement>
    </HTTPSamplerTest>
</HTTPSampler>

自动提取登录响应中的Token

使用正则表达式提取器从登录响应中提取Token,并将其保存为变量。

<HTTPSampler>
    <HTTPSamplerTest>
        <HTTPSamplerTestElement>
            <stringProp name="HTTPSampler.domain">example.com</stringProp>
            <stringProp name="HTTPSampler.port">80</stringProp>
            <stringProp name="HTTPSampler.path">/login</stringProp>
            <stringProp name="HTTPSampler.method">POST</stringProp>
        </HTTPSamplerTestElement>
    </HTTPSamplerTest>
    <PostProcessor>
        <RegularExpressionExtractor>
            <RegularExpressionExtractorTestElement>
                <stringProp name="referenceName">USER_TOKEN</stringProp>
                <stringProp name="matchNo">1</stringProp>
                <stringProp name="defaultValue"></stringProp>
                <stringProp name="regexp">"token":"(.*?)",</stringProp>
                <stringProp name="scope">body</stringProp>
            </RegularExpressionExtractorTestElement>
        </RegularExpressionExtractor>
    </PostProcessor>
</HTTPSampler>

在后续请求中使用提取的Token

设置后续请求的请求头,使用提取的Token。

<HTTPSampler>
    <HTTPSamplerTest>
        <HTTPSamplerTestElement>
            <stringProp name="HTTPSampler.domain">example.com</stringProp>
            <stringProp name="HTTPSampler.port">80</stringProp>
            <stringProp name="HTTPSampler.path">/protected</stringProp>
            <stringProp name="HTTPSampler.method">GET</stringProp>
            <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
                <Arguments>
                    <elementProp name="token" elementType="Argument">
                        <Argument>
                            <stringProp name="Argument.name">Authorization</stringProp>
                            <stringProp name="Argument.value">Bearer ${USER_TOKEN}</stringProp>
                            <stringProp name="Argument.metadata">=</stringProp>
                        </Argument>
                    </elementProp>
                </Arguments>
            </elementProp>
        </HTTPSamplerTestElement>
    </HTTPSamplerTest>
</HTTPSampler>

验证Token传递是否成功

通过查看响应结果,确认请求是否成功。可以检查响应码、响应时间等指标,确保请求正常。

<Listener>
    <ResultCollector>
        <ResultCollector guiclass="jp.keizo.jmeter.results.dashboard.gui.ResultCollectorGui" testclass="ResultCollector" testname="View Results Tree" enabled="true">
            <boolProp name="ResultCollector.error_logging">false</boolProp>
            <objProp>
                <name>saveConfig</name>
                <value class="jp.keizo.jmeter.results.dashboard.config.ResultCollectorSaveConfig">
                    <objProp>
                        <name>filename</name>
                        <value class="java.lang.String">${JMeterHome}/bin/jmeter_results.jtl</value>
                    </objProp>
                </value>
            </objProp>
            <objProp>
                <name>filterString</name>
                <value class="java.lang.String"></value>
            </objProp>
            <objProp>
                <name>filename</name>
                <value class="java.lang.String">${JMeterHome}/bin/jmeter_results.jtl</value>
            </objProp>
        </ResultCollector>
    </ResultCollector>
</Listener>

通过以上步骤,可以成功使用JMeter进行登录请求,并自动提取和传递Token。这有助于模拟真实用户的行为,进行更准确的压力测试和性能测试。

这篇关于JMeter传递token学习入门教程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!