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

JMeter初识项目实战:新手入门教程

概述

本文详细介绍了JMeter的安装与基本使用方法,通过创建测试计划和线程组,添加HTTP请求和监听器,逐步引导读者入门。文中还提供了多个实战案例,包括模拟用户登录、测试网站性能和压测API接口,帮助读者深入理解JMeter初识项目实战。

JMeter简介与安装
什么是JMeter

JMeter是一个开源的性能测试工具,主要用于对网站应用或其他组件进行负载测试。它能模拟多种协议,包括但不限于HTTP、HTTPS、FTP、JDBC、SOAP、RESTful等。JMeter可用于测试静态和动态资源,如静态文件、Java Servlet、PHP脚本、ASP.NET页面、JSP组件、数据库查询和网页后端等等。此外,JMeter还可以作为功能测试工具,用于测试应用程序的功能性,如表单提交、点击流等。

JMeter的安装步骤
  1. 下载JMeter

    访问JMeter官网或GitHub页面,下载最新版本的JMeter压缩包。下载地址如下:

    https://jmeter.apache.org/download_jmeter.cgi
  2. 解压安装包

    使用解压工具(如WinRAR、7-Zip)将下载的JMeter压缩包解压到指定目录,例如C:\JMeter

  3. 配置环境变量

    • 打开系统的环境变量设置。
    • 在“系统变量”窗口中,点击“新建”,创建名为JMeter_HOME的变量,值为解压JMeter的目录路径,例如C:\JMeter\apache-jmeter-5.4
    • 在“系统变量”窗口中,找到Path变量,点击“编辑”,在变量值中添加;%JMeter_HOME%\bin(注意前面的分号)。
  4. 启动JMeter

    • 打开终端或命令提示符,输入jmeter并回车,启动JMeter。
    • 或者直接通过JMeter安装目录的bin文件夹中双击jmeter.bat启动JMeter。
验证JMeter是否安装成功

确保安装过程正确无误后,可以通过以下步骤验证JMeter是否成功安装:

  1. 打开JMeter

    在命令行中输入jmeter并按回车,或者直接找到JMeter的启动脚本并运行它。

  2. 检查启动界面

    正确安装后,JMeter的启动界面会显示出来,界面中可以看到各种组件和工具。

  3. 创建测试计划

    单击“文件”菜单中的“新建”选项,创建一个新的测试计划。如果能够成功创建新的测试计划,则说明JMeter已经正确安装了。

JMeter的基本使用
创建第一个测试计划
  1. 打开JMeter

    启动JMeter并创建一个新测试计划。

  2. 命名测试计划

    在测试计划的名称框内输入“我的第一个测试计划”。

  3. 添加线程组

    右键点击测试计划,然后选择“添加”>“线程(用户)”>“线程组”,在弹出的对话框中设置线程数(即模拟用户数),例如设置为5个用户,循环次数设置为1次,这意味着每个用户会发起一次请求。

  4. 添加HTTP请求

    右键点击线程组,选择“添加”>“取样器”>“HTTP请求”。在弹出的对话框中,设置请求的名称,例如“我的第一个请求”。在“服务器名称或IP”字段中输入目标服务器的地址,例如http://www.example.com

  5. 添加监听器

    右键点击线程组,选择“添加”>“监听器”>“查看结果树”,这样可以在测试过程中查看每个请求的详细响应。

添加线程组与取样器

继续上面的步骤,可以增加更多的HTTP请求来测试不同的功能,或者调整线程组的参数,例如增加线程数来模拟更多的用户并发访问。

  • 线程组参数设置:

    Thread Group
    - Number of Threads (Virtual Users): 5
    - Ramp-Up Period (in seconds): 0
    - Loop Count: 1
  • HTTP请求设置:

    HTTP Request
    - Name: 我的第一个请求
    - Protocol: http
    - Server Name or IP: www.example.com
    - Path: /
查看测试结果
  1. 启动测试

    单击测试计划上方的“启动”按钮,JMeter将开始执行测试计划。

  2. 观察结果

    在“查看结果树”监听器中,可以实时查看每个HTTP请求的响应状态、响应时间、请求内容等。

  3. 分析结果

    通过“聚合报告”监听器,可以查看整体的测试结果,包括平均响应时间、吞吐量等关键指标。

JMeter的常用组件详解
控制逻辑元件的使用

逻辑控制器

逻辑控制器用于控制取样器的执行顺序,常见的逻辑控制器包括:

  • Simple Controller

    该控制器允许你将多个请求组织成一个组,这些请求将按顺序执行。例如,可以将所有涉及登录的请求放入一个Simple Controller中。

    <SimpleController guiclass="LogicControllerGui" testclass="SimpleController" testname="登录流程" enabled="true">
    <elementProp guiclass="TestElement" testclass="ElementProperty" testname="HTTP请求1" enabled="true">
      <elementProp name="HTTPSampler.path" elementType="HTTPSampler">
        <stringProp name="HTTPSampler.domain">www.example.com</stringProp>
        <stringProp name="HTTPSampler.port">80</stringProp>
        <stringProp name="HTTPSampler.protocol">http</stringProp>
        <stringProp name="HTTPSampler.method">POST</stringProp>
        <stringProp name="HTTPSampler.path">/login</stringProp>
      </elementProp>
    </elementProp>
    <elementProp guiclass="TestElement" testclass="ElementProperty" testname="HTTP请求2" enabled="true">
      <elementProp name="HTTPSampler.path" elementType="HTTPSampler">
        <stringProp name="HTTPSampler.domain">www.example.com</stringProp>
        <stringProp name="HTTPSampler.port">80</stringProp>
        <stringProp name="HTTPSampler.protocol">http</stringProp>
        <stringProp name="HTTPSampler.method">GET</stringProp>
        <stringProp name="HTTPSampler.path">/profile</stringProp>
      </elementProp>
    </elementProp>
    </SimpleController>
  • While Controller

    使用While控制器可以创建循环,直到满足特定条件才停止。例如,可以设置一个While控制器来模拟长时间运行的任务。

    <WhileController guiclass="LogicControllerGui" testclass="WhileController" testname="长时间任务" enabled="true">
    <boolProp name="WhileController.condition">false</boolProp>
    <elementProp guiclass="TestElement" testclass="ElementProperty" testname="HTTP请求" enabled="true">
      <elementProp name="HTTPSampler.path" elementType="HTTPSampler">
        <stringProp name="HTTPSampler.domain">www.example.com</stringProp>
        <stringProp name="HTTPSampler.port">80</stringProp>
        <stringProp name="HTTPSampler.protocol">http</stringProp>
        <stringProp name="HTTPSampler.method">POST</stringProp>
        <stringProp name="HTTPSampler.path">/task</stringProp>
      </elementProp>
    </elementProp>
    </WhileController>

示例代码片段

<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="登录请求" enabled="true">
    <stringProp name="HTTPSampler.path">/login</stringProp>
    <stringProp name="HTTPSampler.domain">www.example.com</stringProp>
    <stringProp name="HTTPSampler.port">80</stringProp>
    <stringProp name="HTTPSampler.method">POST</stringProp>
    <stringProp name="HTTPSampler.embedded"></stringProp>
</HTTPSampler>
使用断言验证响应

断言用于验证服务器响应是否符合预期。JMeter提供了多种断言方式,例如:

  • HTTP响应码断言

    用于验证HTTP响应状态码是否在期望的范围内,例如200表示成功。

    <responseAssertion>
    <boolProp name="Assertion.tolerant">true</boolProp>
    <boolProp name="Assertion.ignoreStatus">false</boolProp>
    <stringProp name="Assertion.testField">Response Code</stringProp>
    <stringProp name="Assertion.testResponse">200</stringProp>
    </responseAssertion>
  • 响应内容断言

    用于检查响应内容是否包含特定的文本或符合正则表达式。

    <responseAssertion>
    <boolProp name="Assertion.tolerant">true</boolProp>
    <boolProp name="Assertion.ignoreStatus">false</boolProp>
    <stringProp name="Assertion.testField">Text Response</stringProp>
    <stringProp name="Assertion.testString">success</stringProp>
    </responseAssertion>

示例代码片段

<responseAssertion>
    <boolProp name="Assertion.tolerant">true</boolProp>
    <boolProp name="Assertion.ignoreStatus">false</boolProp>
    <stringProp name="Assertion.testField">Text Response</stringProp>
    <collectionProp name="Assertion.testString">
        <stringProp name="1">success</stringProp>
    </collectionProp>
</responseAssertion>
通过定时器控制请求间隔

定时器用于控制请求之间的间隔时间,常见的定时器类型有:

  • Constant Timer

    每个请求之间设置恒定的延迟时间,例如500毫秒。

    <constantTimer>
    <stringProp name="ConstantTimer.delay">500</stringProp>
    </constantTimer>
  • Uniform Random Timer

    每个请求之间设置一个随机的延迟时间,例如在100至500毫秒之间。

    <uniformRandomTimer>
    <stringProp name="UniformRandomTimer.delay">500</stringProp>
    <stringProp name="UniformRandomTimer.range">400</stringProp>
    </uniformRandomTimer>

示例代码片段

<constantTimer>
    <stringProp name="ConstantTimer.delay">500</stringProp>
</constantTimer>
JMeter的高级功能介绍
使用监听器实时查看测试结果
  • View Results Tree

    查看结果树监听器可以实时查看每个请求的详细响应,包括请求头、响应头、响应内容等。

    <viewResultsTree>
    <boolProp name="ViewResultsTree.saveDataOnError">false</boolProp>
    <boolProp name="ViewResultsTree.saveLogRowsOnError">false</boolProp>
    <stringProp name="ViewResultsTree.requestHeaders">true</stringProp>
    <stringProp name="ViewResultsTree.responseHeaders">true</stringProp>
    <stringProp name="ViewResultsTree.responseBody">true</stringProp>
    </viewResultsTree>
  • Aggregate Report

    聚合报告监听器可以汇总整个测试计划的测试结果,提供平均响应时间、吞吐量等关键指标。

    <aggregateReport>
    <boolProp name="SummaryReport.showPercentiles">true</boolProp>
    <boolProp name="SummaryReport.showLatency">true</boolProp>
    <boolProp name="SummaryReport.showPercentageErrors">true</boolProp>
    <boolProp name="SummaryReport.showThroughput">true</boolProp>
    </aggregateReport>

示例代码片段

<viewResultsTree>
    <boolProp name="ViewResultsTree.saveDataOnError">false</boolProp>
    <boolProp name="ViewResultsTree.saveLogRowsOnError">false</boolProp>
    <stringProp name="ViewResultsTree.requestHeaders">true</stringProp>
    <stringProp name="ViewResultsTree.responseHeaders">true</stringProp>
    <stringProp name="ViewResultsTree.responseBody">true</stringProp>
</viewResultsTree>
结果保存与回放
  • 结果保存

    测试完成后,可以保存结果以便后续分析。结果可以保存为HTML或JTL文件。

    <resultcollector>
    <boolProp name="ResultCollector.errorLogging">false</boolProp>
    <stringProp name="ResultCollector.filename">C:\results.jtl</stringProp>
    <stringProp name="ResultCollector.fileFormat">jtl</stringProp>
    </resultcollector>
  • 结果回放

    保存的测试结果可以通过JMeter回放,以便重复执行相同的测试用例。

    <resultcollector>
    <boolProp name="ResultCollector.errorLogging">false</boolProp>
    <stringProp name="ResultCollector.filename">C:\results.jtl</stringProp>
    <stringProp name="ResultCollector.fileFormat">jtl</stringProp>
    </resultcollector>

示例代码片段

<resultcollector>
    <boolProp name="ResultCollector.errorLogging">false</boolProp>
    <stringProp name="ResultCollector.filename">C:\results.jtl</stringProp>
    <stringProp name="ResultCollector.fileFormat">jtl</stringProp>
</resultcollector>
调整和优化测试脚本
  • 参数化

    通过使用变量来替换测试脚本中的固定值,例如用户名、密码等。可以在测试计划中添加“用户定义的变量”元件来定义这些变量。

    <userDefinedVariables>
    <collectionProp name="UserDefinedVariables">
      <elementProp name="User" elementType="Argument">
        <stringProp name="Argument.value">admin</stringProp>
      </elementProp>
      <elementProp name="Password" elementType="Argument">
        <stringProp name="Argument.value">123456</stringProp>
      </elementProp>
    </collectionProp>
    </userDefinedVariables>
  • 调试脚本

    使用调试组件,如Debug SamplerDebug Post-Processor,来获取请求和响应的详细信息。

    <debugSampler>
    <boolProp name="DebugSampler.displayJMeterVariables">true</boolProp>
    <boolProp name="DebugSampler.displaySamplerProperties">true</boolProp>
    <boolProp name="DebugSampler.displayAssertionErrors">true</boolProp>
    </debugSampler>

示例代码片段

<userDefinedVariables>
    <collectionProp name="UserDefinedVariables">
        <elementProp name="User" elementType="Argument">
            <stringProp name="Argument.value">admin</stringProp>
        </elementProp>
        <elementProp name="Password" elementType="Argument">
            <stringProp name="Argument.value">123456</stringProp>
        </elementProp>
    </collectionProp>
</userDefinedVariables>
JMeter实战案例分析
实战案例一:模拟用户登录
  1. 创建测试计划

    新建一个测试计划,命名为“用户登录测试”。

  2. 添加线程组

    在测试计划中添加线程组,设置线程数为5,循环次数为1。

  3. 添加HTTP请求

    在线程组中添加HTTP请求,设置URL为http://www.example.com/login,设置请求方法为POST,并添加对应的参数,例如用户名和密码。

  4. 添加断言

    添加响应内容断言,确保响应内容中包含“登录成功”。

  5. 添加监听器

    添加查看结果树监听器以查看每个请求的详细响应。

示例代码片段

<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="登录请求" enabled="true">
    <elementProp guiclass="HttpHeaderPanel" testclass="HeaderManager" testname="HTTP请求头管理器" enabled="true">
        <collectionProp name="Header.name">
            <elementProp name="Content-Type" elementType="Header">
                <stringProp name="Header.value">application/x-www-form-urlencoded</stringProp>
            </elementProp>
        </collectionProp>
    </elementProp>
    <stringProp name="HTTPSampler.path">/login</stringProp>
    <stringProp name="HTTPSampler.domain">www.example.com</stringProp>
    <stringProp name="HTTPSampler.port">80</stringProp>
    <stringProp name="HTTPSampler.method">POST</stringProp>
    <stringProp name="TestAction.file"></stringProp>
    <stringProp name="HTTPSampler.embedded"></stringProp>
    <elementProp name="HTTPsampler.Arguments" elementType="HTTPArguments">
        <collectionProp name="Arguments.arguments">
            <elementProp name="username" elementType="HTTPArgument">
                <stringProp name="Argument.name">username</stringProp>
                <stringProp name="Argument.value">admin</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
            <elementProp name="password" elementType="HTTPArgument">
                <stringProp name="Argument.name">password</stringProp>
                <stringProp name="Argument.value">123456</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
        </collectionProp>
    </elementProp>
</HTTPSampler>
实战案例二:测试网站性能
  1. 创建测试计划

    新建一个测试计划,命名为“网站性能测试”。

  2. 添加线程组

    设置线程数为10,循环次数为100。

  3. 添加HTTP请求

    在线程组中添加HTTP请求,设置URL为http://www.example.com/index

  4. 添加定时器

    添加Constant Timer,设置延迟时间为100毫秒。

  5. 添加监听器

    添加聚合报告监听器,查看测试结果的统计信息。

示例代码片段

<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="首页请求" enabled="true">
    <stringProp name="HTTPSampler.path">/index</stringProp>
    <stringProp name="HTTPSampler.domain">www.example.com</stringProp>
    <stringProp name="HTTPSampler.port">80</stringProp>
    <stringProp name="HTTPSampler.method">GET</stringProp>
    <stringProp name="TestAction.file"></stringProp>
    <stringProp name="HTTPSampler.embedded"></stringProp>
</HTTPSampler>
<constantTimer>
    <stringProp name="ConstantTimer.delay">100</stringProp>
</constantTimer>
<responseAssertion>
    <boolProp name="Assertion.tolerant">true</boolProp>
    <boolProp name="Assertion.ignoreStatus">false</boolProp>
    <stringProp name="Assertion.testField">Text Response</stringProp>
    <collectionProp name="Assertion.testString">
        <stringProp name="1">Welcome</stringProp>
    </collectionProp>
</responseAssertion>
<viewResultsTree>
    <boolProp name="ViewResultsTree.saveDataOnError">false</boolProp>
    <boolProp name="ViewResultsTree.saveLogRowsOnError">false</boolProp>
    <stringProp name="ViewResultsTree.requestHeaders">true</stringProp>
    <stringProp name="ViewResultsTree.responseHeaders">true</stringProp>
    <stringProp name="ViewResultsTree.responseBody">true</stringProp>
</viewResultsTree>
<aggregateReport>
    <boolProp name="SummaryReport.showPercentiles">true</boolProp>
    <boolProp name="SummaryReport.showLatency">true</boolProp>
    <boolProp name="SummaryReport.showPercentageErrors">true</boolProp>
    <boolProp name="SummaryReport.showThroughput">true</boolProp>
</aggregateReport>
实战案例三:压测API接口
  1. 创建测试计划

    新建一个测试计划,命名为“API接口压测”。

  2. 添加线程组

    设置线程数为50,循环次数为100。

  3. 添加HTTP请求

    在线程组中添加HTTP请求,设置URL为http://www.example.com/api/v1/users,设置请求方法为GET。

  4. 添加监听器

    添加聚合报告监听器,查看测试结果的统计信息。

示例代码片段

<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="API请求" enabled="true">
    <stringProp name="HTTPSampler.path">/api/v1/users</stringProp>
    <stringProp name="HTTPSampler.domain">www.example.com</stringProp>
    <stringProp name="HTTPSampler.port">80</stringProp>
    <stringProp name="HTTPSampler.method">GET</stringProp>
    <stringProp name="TestAction.file"></stringProp>
    <stringProp name="HTTPSampler.embedded"></stringProp>
</HTTPSampler>
<constantTimer>
    <stringProp name="ConstantTimer.delay">100</stringProp>
</constantTimer>
<responseAssertion>
    <boolProp name="Assertion.tolerant">true</boolProp>
    <boolProp name="Assertion.ignoreStatus">false</boolProp>
    <stringProp name="Assertion.testField">Text Response</stringProp>
    <collectionProp name="Assertion.testString">
        <stringProp name="1">[{"id":1,"name":"John Doe"}]</stringProp>
    </collectionProp>
</responseAssertion>
<viewResultsTree>
    <boolProp name="ViewResultsTree.saveDataOnError">false</boolProp>
    <boolProp name="ViewResultsTree.saveLogRowsOnError">false</boolProp>
    <stringProp name="ViewResultsTree.requestHeaders">true</stringProp>
    <stringProp name="ViewResultsTree.responseHeaders">true</stringProp>
    <stringProp name="ViewResultsTree.responseBody">true</stringProp>
</viewResultsTree>
<aggregateReport>
    <boolProp name="SummaryReport.showPercentiles">true</boolProp>
    <boolProp name="SummaryReport.showLatency">true</boolProp>
    <boolProp name="SummaryReport.showPercentageErrors">true</boolProp>
    <boolProp name="SummaryReport.showThroughput">true</boolProp>
</aggregateReport>
总结与后续学习方向
JMeter学习资源推荐
  • 慕课网

    慕课网提供了大量的JMeter在线课程,包括基础入门和高级进阶课程,适合不同级别的学习者。访问地址:

    https://www.imooc.com/course/cate/25
  • JMeter官方文档

    JMeter的官方文档详尽地介绍了工具的各个方面,是学习JMeter的重要资源。可以在JMeter官网获取:

    https://jmeter.apache.org/usermanual/index.html
  • JMeter社区论坛

    论坛是学习JMeter和解决问题的好地方,社区成员可以分享经验、交流心得。访问地址:

    https://jmeter.51cyz.com/
JMeter社区与论坛介绍
  • JMeter社区

    JMeter社区是一个活跃的在线论坛,用户可以提问、分享经验、讨论问题。社区提供了详细的FAQ、教程和案例分享。

    访问地址:

    https://community.jmeter.apache.org/
  • JMeter用户邮件列表

    JMeter用户邮件列表是一个邮件订阅列表,注册后可以接收邮件通知,了解最新的信息和问题解答。

    访问地址:

    https://jmeter.apache.org/mail-lists.html
JMeter进阶学习建议
  • 深入理解JMeter组件

    在掌握了基础功能后,可以深入学习JMeter的各种组件,例如元件、监听器、断言等,并了解它们的具体用途和配置选项。

  • 编写复杂的测试脚本

    学习如何编写复杂的测试脚本,可以模拟更复杂的用户行为和业务场景,例如登录、注册、购物车操作等。

  • 性能和负载测试

    深入理解性能和负载测试的概念,如何设置合适的线程数、请求间隔等参数,以模拟真实的用户访问情况。

  • 自动化测试脚本

    学习如何使用脚本语言(如BeanShell、JSR223等)来编写自动化测试脚本,让测试更加灵活和自动化。

通过上述步骤和建议,可以逐步掌握JMeter的使用技巧,提升测试工作的效率和质量。

希望这篇教程能够帮助你更好地理解和使用JMeter,祝你在性能测试的道路上越走越远!

点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消