为了账号安全,请及时绑定邮箱和手机立即绑定

JMeter压测学习:入门与实践指南

概述

本文详细介绍了JMeter压测学习的全过程,从下载安装到创建简单的压测脚本,再到分布式压测和结果分析。文章涵盖了JMeter的基本概念、配置优化、以及如何生成和解读测试报告,帮助读者全面掌握JMeter压测技能。JMeter压测学习不仅涉及基础操作,还包括高级配置和实践应用。

JMeter简介与下载安装

JMeter是什么

JMeter是一款开源的Java应用,主要用于进行负载测试、功能测试以及性能测试。它能模拟多种用户行为,并支持各种协议,如HTTP、HTTPS、FTP、Web Services等。JMeter在Web测试中尤其强大,可以测试静态和动态资源,如动态网页、JSP组件、Java对象、数据库、FTP服务器等。此外,JMeter还可以用于测试静态资源加载时间、服务器响应速度、网络延迟等。

JMeter的下载与安装

JMeter的最新版本可以在其官方网站上找到。以下是下载与安装步骤:

  1. 访问JMeter官网下载页面,选择合适的版本。通常选择最新版本即可,但也可以根据自己的需求选择。
  2. 下载完成后,解压下载的文件夹。
  3. 解压后,打开bin文件夹,选择对应的启动脚本。对于Windows用户,可以直接运行jmeter.bat;对于Linux或Mac用户,需要使用jmeter命令。
  4. 运行启动脚本后,JMeter窗口将会打开,此时可以开始使用了。

JMeter的界面介绍

JMeter的界面主要包括以下几个部分:

  • 菜单栏:包含文件、编辑、运行等菜单项。
  • 工具栏:常用功能的快捷按钮,包括新建、保存、运行测试等。
  • 工作区:用于添加各种测试组件,如线程组、取样器、监听器等。
  • 测试计划树:展示当前测试计划结构,包括线程组、取样器、监听器等。
  • 日志栏:展示JMeter的运行日志信息。
JMeter的基本概念与术语

测试计划

测试计划是JMeter中一个重要的组件,它定义了一个测试的所有组件,包括线程组、取样器、监听器等。它相当于一个测试脚本的容器,可以包含多个线程组和取样器。测试计划是可配置的,可以设置名称、注释等。

线程组

线程组是JMeter的核心组件之一,它定义了测试中用户的虚拟行为。线程组可以设置模拟用户数量、启动时间间隔、循环次数等参数。线程组下可以添加取样器、定时器、断言等组件,用于模拟用户的行为。

取样器

取样器是JMeter中最基本的组件,它负责向服务器发送请求并接收响应。常见的取样器如HTTP请求、JDBC请求等。取样器的配置取决于请求的协议类型。

监听器

监听器用于收集和显示测试结果。常见的监听器包括查看结果树、聚合报告、响应时间等。监听器可以配置不同的参数,以便显示所需的信息。例如,查看结果树监听器可以展示每次请求的具体信息,如请求URL、响应时间、响应内容等。

创建第一个简单的压测脚本

新建测试计划

  1. 打开JMeter。
  2. 在菜单栏选择文件 -> 新建,创建一个新的测试计划。
  3. 在测试计划的名字框内输入测试计划名称,如My First Test Plan
  4. 保存测试计划,可以选择文件 -> 保存,输入文件名保存。

添加线程组

  1. 在测试计划中右键,选择添加 -> 线程(用户) -> 线程组。
  2. 在弹出的线程组配置窗口中,设置线程数,如设置线程数为10,表示模拟10个用户。
  3. 设置每个线程的启动延迟时间,如每个线程启动间隔5秒。
  4. 设置循环次数,如设置为1,表示每个用户只执行一次请求。

添加HTTP请求

  1. 在线程组内右键,选择添加 -> 取样器 -> HTTP请求。
  2. 在HTTP请求配置窗口中,输入请求的URL,如http://example.com
  3. 设置协议(HTTP或HTTPS)、服务器名称或IP地址、端口号、路径等。
  4. 可以设置其他参数,如设置Content-Type为application/json
  5. 保存配置。

示例代码(线程组配置):

<ThreadGroup>
    <elementProp name="ThreadGroup-1-1" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
        <collectionProp name="Arguments.arguments"/>
    </elementProp>
    <stringProp name="ThreadGroup.num_threads">10</stringProp>
    <stringProp name="ThreadGroup.ramp_time">5</stringProp>
    <boolProp name="ThreadGroup.scheduler">false</boolProp>
    <stringProp name="ThreadGroup.duration"></stringProp>
    <stringProp name="ThreadGroup.delay"></stringProp>
    <boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp>
</ThreadGroup>

添加查看结果树监听器

  1. 在线程组内右键,选择添加 -> 监听器 -> 查看结果树。
  2. 保存配置。

运行测试

  1. 选择菜单栏的运行 -> 启动,开始测试。
  2. 测试运行中,可以在查看结果树监听器中看到每个请求的详细信息,包括响应时间、响应内容等。
  3. 测试结束后,可以分析结果并进行优化。
JMeter的配置与优化

线程组参数设置

线程组的参数设置直接影响测试行为和结果。设置参数时,需要考虑以下几点:

  • 线程数:模拟的用户数量。增加线程数可以模拟更多的并发用户。
  • 启动延迟:每个线程启动的间隔时间。适当的延迟可以模仿真实用户的访问间隔,减少服务器压力。
  • 循环次数:每个线程执行请求的次数。可以设置为无限制(持续运行),直到特定条件或时间为止。

示例代码(线程组配置):

<ThreadGroup>
    <elementProp name="ThreadGroup-1-1" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
        <collectionProp name="Arguments.arguments"/>
    </elementProp>
    <stringProp name="ThreadGroup.num_threads">10</stringProp>
    <stringProp name="ThreadGroup.ramp_time">5</stringProp>
    <boolProp name="ThreadGroup.scheduler">false</boolProp>
    <stringProp name="ThreadGroup.duration"></stringProp>
    <stringProp name="ThreadGroup.delay"></stringProp>
    <boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp>
</ThreadGroup>

设置采样器参数

采样器参数的设置决定了请求的具体内容。参数设置包括URL、请求方法(GET、POST等)、请求头、请求体等。

示例代码(采样器配置):

<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP Request" enabled="true">
    <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
        <collectionProp name="Arguments.arguments"/>
    </elementProp>
    <stringProp name="HTTPSampler.domain">example.com</stringProp>
    <stringProp name="HTTPSampler.port"></stringProp>
    <stringProp name="HTTPSampler.path">/path</stringProp>
    <stringProp name="HTTPSampler.method">GET</stringProp>
    <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
    <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
    <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
    <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
    <boolProp name="HTTPSampler.postBodyRaw">false</boolProp>
</HTTPSamplerProxy>

添加断言与定时器

断言用于验证请求的预期结果,例如响应码是否为200。定时器用于设置请求之间的延迟时间,模拟真实用户的访问间隔。

示例代码(断言配置):

<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP Request" enabled="true">
    <boolProp name="HTTPSampler.postBodyRaw">false</boolProp>
    <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
        <collectionProp name="Arguments.arguments"/>
    </elementProp>
    <stringProp name="HTTPSampler.domain">example.com</stringProp>
    <stringProp name="HTTPSampler.port"></stringProp>
    <stringProp name="HTTPSampler.path">/path</stringProp>
    <stringProp name="HTTPSampler.method">GET</stringProp>
    <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
    <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
    <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
    <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
    <elementProp name="HTTPSampler.assertion_1" elementType="Assertion" guiclass="AssertionGui" testclass="Assertion" testname="Response Assertion" enabled="true">
        <boolProp name="Assertion.testField">false</boolProp>
        <stringProp name="Assertion.testProperty">Response code was not 200</stringProp>
        <collectionProp name="Assertion.response_field_names">
            <stringProp name="1">Response Code</stringProp>
        </collectionProp>
        <collectionProp name="Assertion.response_field_values">
            <stringProp name="1">200</stringProp>
        </collectionProp>
        <boolProp name="Assertion.assertAllIfThreadsEqualOne">false</boolProp>
    </elementProp>
</HTTPSamplerProxy>

示例代码(定时器配置):

<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP Request" enabled="true">
    <boolProp name="HTTPSampler.postBodyRaw">false</boolProp>
    <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
        <collectionProp name="Arguments.arguments"/>
    </elementProp>
    <stringProp name="HTTPSampler.domain">example.com</stringProp>
    <stringProp name="HTTPSampler.port"></stringProp>
    <stringProp name="HTTPSampler.path">/path</stringProp>
    <stringProp name="HTTPSampler.method">GET</stringProp>
    <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
    <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
    <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
    <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
    <elementProp name="HTTPSampler.timer_1" elementType="ConstantTimer" guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
        <stringProp name="ConstantTimer.delay">500</stringProp>
    </elementProp>
</HTTPSamplerProxy>
JMeter的分布式压测

分布式压测的概念

分布式压测是指使用多台机器同时运行JMeter测试,这样可以模拟更多的用户并发访问,提高测试的准确性和可靠性。分布式压测通常用于大型系统或需要大量并发压力的场景。

分布式压测的配置与运行

分布式压测的配置与运行包括以下几个步骤:

  1. 准备压测服务器:选择多台服务器作为压测服务器。服务器需要安装JMeter并且配置环境变量。
  2. 配置主控机:主控机用于控制多台服务器的测试运行。在主控机的jmeter.properties文件中,需要配置服务器列表。
  3. 配置从属服务器:从属服务器需要设置JMeter的jmeter.properties文件,指定服务器角色为从属。
  4. 分发测试计划:将测试计划分发到所有从属服务器。
  5. 启动测试:在主控机上启动测试,开始分布式压测。

示例代码(主控机配置):

server_port=4445
remote_hosts=server1,server2,server3

示例代码(从属服务器配置):

server_port=4445
client.rmi.localport=50000

示例代码(启动命令):

jmeter -n -t /path/to/testplan.jmx -R server1,server2,server3

JMeter服务器的搭建与管理

JMeter服务器的搭建与管理包括以下几个步骤:

  1. 安装JMeter:在每台服务器上安装JMeter。
  2. 配置JMeter:修改配置文件jmeter.properties,设置相应的参数。
  3. 启动JMeter:启动JMeter并加入分布式测试集群。
  4. 管理JMeter:监控和管理服务器的运行情况,确保测试的稳定性和准确性。
JMeter报告与结果分析

生成测试报告

生成测试报告是测试完成后的重要步骤,测试报告可以提供详细的测试结果和分析数据。JMeter提供了多种监听器来生成不同的报告。

示例代码(聚合报告监听器配置):

<AggregateReport guiclass="AggregateReportGui" testclass="AggregateReport" testname="Aggregate Report" enabled="true">
    <boolProp name="aggregateByTS">false</boolProp>
    <boolProp name="aggregateByLabel">true</boolProp>
    <stringProp name="aggregateByField"></stringProp>
    <boolProp name="aggregateBySample">false</boolProp>
    <boolProp name="aggregateByHost">false</boolProp>
    <stringProp name="aggregateByFieldKey"></stringProp>
    <boolProp name="showPercentiles">true</boolProp>
    <boolProp name="showResponseTimes">true</boolProp>
    <boolProp name="showAggTime">true</boolProp>
    <boolProp name="showAvg">true</boolProp>
    <boolProp name="showCount">true</boolProp>
    <boolProp name="showError">true</boolProp>
    <boolProp name="showSuccess">true</boolProp>
    <boolProp name="showThroughput">true</boolProp>
    <boolProp name="showThroughputUnit">true</boolProp>
    <boolProp name="showThroughputUnitValue">true</boolProp>
    <boolProp name="showConcurrency">true</boolProp>
    <boolProp name="showLatency">true</boolProp>
    <boolProp name="showLabel">true</boolProp>
    <stringProp name="includeLabels"></stringProp>
    <stringProp name="excludeLabels"></stringProp>
    <stringProp name="percentilesToDisplay"></stringProp>
    <stringProp name="minResponseTime"></stringProp>
    <stringProp name="maxResponseTime"></stringProp>
    <stringProp name="percentile1"></stringProp>
    <stringProp name="percentile2"></stringProp>
    <stringProp name="percentile3"></stringProp>
    <stringProp name="percentile4"></stringProp>
    <stringProp name="percentile5"></stringProp>
    <stringProp name="percentile6"></stringProp>
    <stringProp name="percentile7"></stringProp>
    <stringProp name="percentile8"></stringProp>
    <stringProp name="percentile9"></stringProp>
    <stringProp name="percentile10"></stringProp>
    <stringProp name="percentile11"></stringProp>
    <stringProp name="percentile12"></stringProp>
    <stringProp name="percentile13"></stringProp>
    <stringProp name="percentile14"></stringProp>
    <stringProp name="percentile15"></stringProp>
    <stringProp name="percentile16"></stringProp>
    <stringProp name="percentile17"></stringProp>
    <stringProp name="percentile18"></stringProp>
    <stringProp name="percentile19"></stringProp>
    <stringProp name="percentile20"></stringProp>
</AggregateReport>

分析测试结果

分析测试结果是测试完成后的重要工作。通过分析结果,可以了解系统的性能瓶颈、响应时间、吞吐量等关键指标。此外还可以发现系统中的错误和异常情况。

使用后处理器与聚合报告

后处理器用于处理响应数据,例如可以从响应中提取特定信息并保存到变量中。聚合报告是JMeter中常用的监听器之一,它可以汇总测试结果,提供各种统计信息。

示例代码(BeanShell后处理器配置):

<BeanShellPostProcessor guiclass="BeanShellPostProcessorGui" testclass="BeanShellPostProcessor" testname="BeanShell PostProcessor" enabled="true">
    <stringProp name="beanshell_variables">vars.put("responseCode", responseCode)</stringProp>
    <stringProp name="beanshell_script"></stringProp>
    <stringProp name="beanshell_reset">true</stringProp>
    <stringProp name="beanshell_init"></stringProp>
    <stringProp name="beanshell_reset_init"></stringProp>
    <stringProp name="beanshell_reset_tearDown"></stringProp>
    <stringProp name="beanshell_tearDown"></stringProp>
</BeanShellPostProcessor>

示例代码(聚合报告监听器配置):

<AggregateReport guiclass="AggregateReportGui" testclass="AggregateReport" testname="Aggregate Report" enabled="true">
    <boolProp name="aggregateByTS">false</boolProp>
    <boolProp name="aggregateByLabel">true</boolProp>
    <stringProp name="aggregateByField"></stringProp>
    <boolProp name="aggregateBySample">false</boolProp>
    <boolProp name="aggregateByHost">false</boolProp>
    <stringProp name="aggregateByFieldKey"></stringProp>
    <boolProp name="showPercentiles">true</boolProp>
    <boolProp name="showResponseTimes">true</boolProp>
    <boolProp name="showAggTime">true</boolProp>
    <boolProp name="showAvg">true</boolProp>
    <boolProp name="showCount">true</boolProp>
    <boolProp name="showError">true</boolProp>
    <boolProp name="showSuccess">true</boolProp>
    <boolProp name="showThroughput">true</boolProp>
    <boolProp name="showThroughputUnit">true</boolProp>
    <boolProp name="showThroughputUnitValue">true</boolProp>
    <boolProp name="showConcurrency">true</boolProp>
    <boolProp name="showLatency">true</boolProp>
    <boolProp name="showLabel">true</boolProp>
    <stringProp name="includeLabels"></stringProp>
    <stringProp name="excludeLabels"></stringProp>
    <stringProp name="percentilesToDisplay"></stringProp>
    <stringProp name="minResponseTime"></stringProp>
    <stringProp name="maxResponseTime"></stringProp>
    <stringProp name="percentile1"></stringProp>
    <stringProp name="percentile2"></stringProp>
    <stringProp name="percentile3"></stringProp>
    <stringProp name="percentile4"></stringProp>
    <stringProp name="percentile5"></stringProp>
    <stringProp name="percentile6"></stringProp>
    <stringProp name="percentile7"></stringProp>
    <stringProp name="percentile8"></stringProp>
    <stringProp name="percentile9"></stringProp>
    <stringProp name="percentile10"></stringProp>
    <stringProp name="percentile11"></stringProp>
    <stringProp name="percentile12"></stringProp>
    <stringProp name="percentile13"></stringProp>
    <stringProp name="percentile14"></stringProp>
    <stringProp name="percentile15"></stringProp>
    <stringProp name="percentile16"></stringProp>
    <stringProp name="percentile17"></stringProp>
    <stringProp name="percentile18"></stringProp>
    <stringProp name="percentile19"></stringProp>
    <stringProp name="percentile20"></stringProp>
</AggregateReport>

通过上述内容,您可以全面了解和掌握JMeter的使用方法与技巧。从入门到实践,从基本功能到高级配置,JMeter提供了丰富的功能,帮助您更好地进行性能测试和负载测试。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消