继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

JMeter初识:新手必备入门指南

ibeautiful
关注TA
已关注
手记 485
粉丝 107
获赞 529
概述

JMeter是一个完全开源的、纯Java编写的性能测试工具,主要用于测试静态和动态资源的性能。它能够模拟多种用户行为,测试系统在高并发情况下的性能表现。本文将详细介绍JMeter初识,包括安装配置、基本功能使用和测试结果分析等。

JMeter简介

JMeter是什么

JMeter 是一个完全开源的、纯 Java 编写的性能测试工具,主要用于测试静态和动态资源的性能。它能够对多种组件进行测试,包括静态资源(如静态文件、图片等)、动态服务器(如基于 Servlet 的应用)、数据库、FTP 服务器、Java 对象、Web 服务等。

JMeter的作用和应用场景

JMeter 主要用于模拟多种用户行为,测试系统在高并发情况下的性能表现。例如,可以用来测试 Web 应用程序、数据库、和其他基于网络的应用。它可以用来验证服务器的响应时间和稳定性,也可以用来做负载测试,即模拟大量用户同时访问系统的情况来测试系统的极限性能。

JMeter的优势和特点

  • 开源且免费:JMeter 是完全免费的,用户可以根据自己的需求自由定制和扩展功能。
  • 跨平台:JMeter 是用 Java 编写的,因此可以在几乎所有操作系统上运行。
  • 高度可扩展:用户可以自定义插件,扩展 JMeter 的功能。
  • 支持多种协议:支持 HTTP、HTTPS、FTP、SOAP、JDBC 等多种协议。
  • 丰富的插件支持:用户可以利用各种插件来实现更多的功能。
  • 易用性:界面友好,易于使用,几乎不需要编程知识就可以创建测试计划。
JMeter的安装与配置

安装前的准备

在安装 JMeter 之前,需要确保系统已经安装了 JDK。JMeter 仅支持 Java 8 及以上版本,因此在安装 JMeter 之前,请确保您的系统已经安装并配置了 Java 开发工具包(JDK)。

JMeter的下载与安装

  1. 访问 JMeter 官方下载页面:https://jmeter.apache.org/download_jmeter.cgi
  2. 选择对应的版本进行下载。通常推荐使用最新稳定版。
  3. 解压下载的文件包,例如将其解压至 C:\apache-jmeter-5.4
  4. 进入解压后的目录,找到 bin 子目录。
  5. 在该目录下,找到启动 JMeter 的脚本文件。对于 Windows 系统,使用 jmeter.bat;对于 Linux 或 macOS 系统,使用 jmeter

JMeter的启动与基本界面介绍

  1. 启动 JMeter
    • Windows:双击 jmeter.bat 文件启动 JMeter。
    • Linux/macOS:在终端中运行 ./jmeter 启动 JMeter。
  2. 基本界面介绍
    • 测试计划 (Test Plan):测试计划是 JMeter 测试的起点。它包含其他测试组件,如线程组、采样器、监听器等。
    • 线程组 (Threads (Users)):模拟多个用户并发访问。设置线程数、Ramp-Up 时间等参数。
    • 采样器 (Sampler):实际发送请求的组件。常见的有 HTTP 请求、数据库请求等。
    • 监听器 (Listener):用于查看和记录测试结果。常见的有视图结果树、聚合报告等。
    • 断言 (Assertions):验证响应数据是否符合预期。
    • 定时器 (Timers):设置请求之间的间隔时间。
    • 配置元件 (Config Element):用于配置采样器的参数,如 HTTP 请求默认值等。
    • 前置处理器 (Pre-Processor):在发送请求之前执行的处理逻辑。
    • 后置处理器 (Post-Processor):在发送请求之后执行的处理逻辑。
JMeter基本功能的使用

创建测试计划

测试计划是 JMeter 测试的基本单元。在 JMeter 中创建测试计划,可以按照以下步骤进行:

  1. 打开 JMeter。
  2. 在右侧的测试计划面板中,选择 添加 -> 测试计划 -> 测试计划
  3. 双击新创建的测试计划,可以为其命名,例如命名为 Web 应用性能测试

测试计划的 XML 配置示例:

<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Web 应用性能测试" enabled="true">
    <stringProp name="TestPlan.name">Web 应用性能测试</stringProp>
    <stringProp name="TestPlan.comments"></stringProp>
    <boolProp name="TestPlan.functional_mode">false</boolProp>
    <boolProp name="TestPlan.serialize_thread_group">false</boolProp>
    <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" enabled="true">
        <collectionProp name="Arguments.arguments"></collectionProp>
    </elementProp>
</TestPlan>
``

### 添加线程组和采样器
线程组用于模拟多个用户并发访问,而采样器则用于发送具体的 HTTP 请求。

1. **添加线程组**:
   - 在测试计划上右键,选择 `添加 -> 线程组 (Threads (Users)) -> 线程组`。
   - 在线程组中可以设置线程数(模拟的用户数量)、Ramp-Up 时间(用户启动的间隔时间)以及循环次数(每个用户执行请求的次数)。

线程组的 XML 配置示例:
```xml
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="线程组" enabled="true">
    <stringProp name="ThreadGroup.name">线程组</stringProp>
    <stringProp name="ThreadGroup.comments"></stringProp>
   .
    <intProp name="ThreadGroup.num_threads">1</intProp>
    <intProp name="ThreadGroup.ramp_time">0</intProp>
    <boolProp name="ThreadGroup.scheduler">false</boolProp>
    <intProp name="ThreadGroup.duration">0</intProp>
    <intProp name="ThreadGroup.delayedStart">0</intProp>
    <elementProp name="ThreadGroup.thread_group_properties" elementType="Arguments" guiclass="ThreadGroupPropertiesGui" testclass="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" enabled="true">
        <collectionProp name="Arguments.arguments"></collectionProp>
    </elementProp>
</ThreadGroup>
``

2. **添加 HTTP 请求采样器**:
   - 在线程组上右键,选择 `添加 -> 取样器 -> HTTP 请求`。
   - 填写相关参数,包括协议(HTTP/HTTPS)、服务器名、端口(默认为 80/443)、路径、用户名和密码等。

HTTP 请求采样器的 XML 配置示例:
```xml
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="HTTP Request" enabled="true">
    <elementProp name="HTTPsampler.info" elementType="HTTPSamplerInfo" guiclass="HttpTestSampleGui" testclass="HTTPSamplerInfo" enabled="true">
        <boolProp name="HTTPSampler.domain">example.com</boolProp>
        <boolProp name="HTTPSampler.port">80</boolProp>
        <boolProp name="HTTPSampler.Path">/api</boolProp>
        <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">true</boolProp>
        <boolProp name="HTTPSampler.useThreadDefaultPool">true</boolProp>
        <elementProp name="HTTPsampler.headers" elementType="HeaderManager" guiclass="HeaderPanel" testclass="HeaderManager" guiclass="HeaderPanel" testclass="HeaderManager" enabled="true">
            <boolProp name="HeaderManager.always_encode">true</boolProp>
        </elementProp>
    </elementProp>
</HTTPSampler>

添加监听器查看结果

监听器用于查看和记录测试结果。常用的监听器有视图结果树和聚合报告。

  1. 添加视图结果树监听器
    • 在线程组上右键,选择 添加 -> 监听器 -> 视图结果树
    • 视图结果树可以显示每个请求的具体响应信息,包括响应时间、响应数据等。

视图结果树监听器的 XML 配置示例:

<ViewResultsFullVisualizer guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="视图结果树" enabled="true">
    <boolProp name="ViewResultTree.saveConfig">true</boolProp>
    <boolProp name="ResultCollector.error_logging">false</boolProp>
    <collectionProp name="SaveVariables"></collectionProp>
    <boolProp name="ResultCollector.successful">true</boolProp>
    <stringProp name="ResultCollector.filename"></stringProp>
</ViewResultsFullVisualizer>
  1. 添加聚合报告监听器
    • 在线程组上右键,选择 添加 -> 监听器 -> 聚合报告
    • 聚合报告可以显示总体的性能统计信息,如请求的平均响应时间、最小响应时间、最大响应时间等。

聚合报告监听器的 XML 配置示例:

<AggregateReport guiclass="AggregateReport" testclass="ResultCollector" testname="聚合报告" enabled="true">
    <boolProp name="aggregateByThreads">false</boolProp>
    <boolProp name="aggregateByTime">true</boolProp>
    <stringProp name="aggregateByLabel"></stringProp>
    <boolProp name="aggregateByInvocations">false</boolProp>
    <boolProp name="includeTimedOutRequests">false</boolProp>
    <stringProp name="filename"></stringProp>
</AggregateReport>
JMeter脚本的编写

基础脚本编写步骤

  1. 创建测试计划:如前所述,创建测试计划并命名。
  2. 添加线程组:设置线程数、Ramp-Up 时间及循环次数。
  3. 添加采样器:根据需求添加不同类型的采样器。
  4. 配置监听器:配置监听器查看测试结果。
  5. 保存脚本:点击 文件 -> 保存文件 -> 另存为 保存脚本文件。

常用采样器的使用

  • HTTP 请求采样器:用于发送 HTTP 请求。

    • 示例代码片段:
      <HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="HTTP Request" enabled="true">
      <elementProp name="HTTPsampler.info" elementType="HTTPSamplerInfo" guiclass="HttpTestSampleGui" testclass="HTTPSamplerInfo" enabled="true">
          <boolProp name="HTTPSampler.domain">example.com</boolProp>
          <boolProp name="HTTPSampler.port">80</boolProp>
          <boolProp name="HTTPSampler.Path">/api</boolProp>
          <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">true</boolProp>
          <boolProp name="HTTPSampler.useThreadDefaultPool">true</boolProp>
          <elementProp name="HTTPsampler.headers" elementType="HeaderManager" guiclass="HeaderPanel" testclass="HeaderManager" guiclass="HeaderPanel" testclass="HeaderManager" enabled="true">
              <boolProp name="HeaderManager.always_encode">true</boolProp>
          </elementProp>
      </elementProp>
      </HTTPSampler>
  • 数据库请求采样器:用于发送 SQL 查询。
    • 示例代码片段:
      <JDBCSampler guiclass="JDBCPanel" testclass="JDBCSampler" testname="Database Request" enabled="true">
      <elementProp name="dataSource" elementType="DataSource" guiclass="com.alibaba.p3c.jmeter.ui.DataSourcePanel" testclass="DataSource" guiclass="com.alibaba.p3c.jmeter.ui.DataSourcePanel" testclass="DataSource" enabled="true">
          <boolProp name="dataSource.driverClass">com.mysql.jdbc.Driver</boolProp>
          <stringProp name="dataSource.url">jdbc:mysql://localhost:3306/mydatabase</stringProp>
          <stringProp name="dataSource.username">root</stringProp>
          <stringProp name="dataSource.password">password</stringProp>
      </elementProp>
      <stringProp name="JDBC.request">SELECT * FROM users WHERE id = 123</stringProp>
      </JDBCSampler>

参数化和文件导入

  • 参数化:可以通过变量来参数化请求中的动态值,如 URL 参数、请求头等。

    • 示例代码片段:
      <HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="HTTP Request" enabled="true">
      <elementProp name="HTTPsampler.info" elementType="HTTPSamplerInfo" guiclass="HttpTestSampleGui" testclass="HTTPSamplerInfo" enabled="true">
          <boolProp name="HTTPSampler.domain">example.com</boolProp>
          <boolProp name="HTTPSampler.port">80</boolProp>
          <boolProp name="HTTPSampler.Path">/api</boolProp>
          <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">true</boolProp>
          <boolProp name="HTTPSampler.useThreadDefaultPool">true</boolProp>
          <elementProp name="HTTPsampler.headers" elementType="HeaderManager" guiclass="HeaderPanel" testclass="HeaderManager" guiclass="HeaderPanel" testclass="HeaderManager" enabled="true">
              <boolProp name="HeaderManager.always_encode">true</boolProp>
          </elementProp>
      </elementProp>
      <elementProp name="HTTPsampler.params" elementType="HTTPArguments" guiclass="ArgumentsPanel" testclass="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" enabled="true">
          <collectionProp name="Arguments.arguments">
              <elementProp name="param1" elementType="Argument">
                  <stringProp name="Argument.name">id</stringProp>
                  <stringProp name="Argument.value">${id}</stringProp>
                  <stringProp name="Argument.metadata">=</stringProp>
              </elementProp>
          </collectionProp>
      </elementProp>
      </HTTPSampler>
  • 文件导入
    • CSV 数据文件设置:可以将文件中的数据导入到测试脚本中。
    • 图形结果:可以将性能测试结果导出为图表,以便进一步分析。
    • 示例代码片段:
      <CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="CSV Data Set Config" enabled="true">
      <stringProp name="filename">data.csv</stringProp>
      <stringProp name="variableNames">id</stringProp>
      </CSVDataSet>
JMeter测试结果分析

结果树监听器的使用

视图结果树监听器可以显示每个请求的具体响应信息,包括请求参数、响应头、响应体、响应时间等。

  • 使用示例
    • 在线程组中添加视图结果树监听器。
    • 运行测试后,在视图结果树中查看每个请求的具体响应信息。
  • 视图结果树监听器的 XML 配置示例:
    <ViewResultsFullVisualizer guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="视图结果树" enabled="true">
    <boolProp name="ViewResultTree.saveConfig">true</boolProp>
    <boolProp name="ResultCollector.error_logging">false</boolProp>
    <collectionProp name="SaveVariables"></collectionProp>
    <boolProp name="ResultCollector.successful">true</boolProp>
    <stringProp name="ResultCollector.filename">testresults.jtl</stringProp>
    </ViewResultsFullVisualizer>

查看结果摘要的分析

聚合报告监听器可以汇总所有请求的性能统计信息,如平均响应时间、最小响应时间、最大响应时间、吞吐量等。

  • 使用示例
    • 在线程组中添加聚合报告监听器。
    • 运行测试后,在聚合报告中查看性能统计信息。
  • 聚合报告监听器的 XML 配置示例:
    <AggregateReport guiclass="AggregateReport" testclass="ResultCollector" testname="聚合报告" enabled="true">
    <boolProp name="aggregateByThreads">false</boolProp>
    <boolProp name="aggregateByTime">true</boolProp>
    <stringProp name="aggregateByLabel"></stringProp>
    <boolProp name="aggregateByInvocations">false</boolProp>
    <boolProp name="includeTimedOutRequests">false</boolProp>
    <stringProp name="filename">aggregated_results.csv</stringProp>
    </AggregateReport>

如何导出和分享测试结果

  • 导出结果
    • 在测试计划中,添加监听器(如聚合报告)。
    • 运行测试后,通过 文件 -> 导出 -> 聚合报告 导出结果。
  • 分享测试报告
    • 将导出的文件通过电子邮件、在线文档等方式分享给团队成员或客户。
    • 示例代码片段:
      <ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="true">
      <boolProp name="ViewResultTree.saveConfig">true</boolProp>
      <boolProp name="ResultCollector.error_logging">false</boolProp>
      <collectionProp name="SaveVariables"></collectionProp>
      <boolProp name="ResultCollector.successful">true</boolProp>
      <stringProp name="ResultCollector.filename">testresults.jtl</stringProp>
      </ResultCollector>
常见问题与解决方法

常见错误及解决方案

  • 错误代码 404:表示请求的资源未找到。检查 URL 是否正确。
  • 错误代码 500:表示服务器内部错误。检查服务器日志。
  • 错误代码 503:表示服务不可用。检查服务器是否正在维护。

性能瓶颈定位和优化建议

  • 增加服务器资源:如增加 CPU、内存、带宽等。
  • 优化代码:减少不必要的计算和数据库查询。
  • 负载均衡:使用负载均衡器分散请求负载。
  • 缓存:使用缓存减少数据库查询。

JMeter社区资源及帮助

JMeter 社区资源非常丰富,可以在这里找到大量的示例和文档。在遇到问题时,可以寻求社区的帮助,或者在 GitHub 上查看其他用户的解决方案。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP