软件工程

JMeter压测资料:新手入门教程

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

本文详细介绍了JMeter压测资料,包括JMeter的基本概念、安装配置、组件介绍、实战演练以及测试结果分析,帮助读者全面了解和掌握JMeter的使用方法。

JMeter简介

JMeter是什么

Apache JMeter 是一个开源的 Java 应用程序,主要用于性能测试。它可用来测试静态和动态资源的性能,也可以测试桌面应用、数据库、Web 服务、FTP 服务器等。

JMeter的主要功能

JMeter 有以下主要功能:

  • HTTP/HTTPS 测试:可以用来测试 Web 应用程序的性能。
  • 服务器负载测试:通过模拟多个用户并发请求来评估服务器性能。
  • 数据库连接测试:测试数据库连接的性能。
  • 文件上传/下载测试:可以测试文件上传和下载的速度。
  • JDBC 测试:用于测试 JDBC 应用程序。

JMeter的应用场景

JMeter 可以用于多种场景的性能测试:

  • Web 应用性能测试:模拟用户访问 Web 应用程序,测试其响应时间和吞吐量。
  • 服务器性能测试:通过模拟高并发请求来评估服务器的最大承载能力。
  • 数据库性能测试:测试数据库连接的性能,评估数据库的响应时间。
  • 网络性能测试:测试网络传输速度和稳定性。
  • 桌面应用性能测试:测试桌面应用程序的性能。
JMeter安装与配置

下载JMeter

JMeter 可以在官网下载,选择最新稳定版的 JMeter 发行包。下载完成后,解压到一个合适的目录。

安装JMeter

JMeter 是一个基于 Java 的应用,所以需要 Java 环境。确保已经安装了 Java 并且环境变量设置正确。

  1. 安装 Java:推荐使用 JDK 8 或更高版本。
  2. 设置环境变量:确保 JAVA_HOMEPATH 环境变量正确设置。

    export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
    export PATH=$JAVA_HOME/bin:$PATH
  3. 运行 JMeter:进入 JMeter 的 bin 目录,运行 jmeter.sh(Linux)或 jmeter.bat(Windows)。

    cd /path/to/jmeter/bin
    ./jmeter.sh

JMeter基本配置

JMeter 的配置文件位于 bin 目录下的 jmeter.properties 文件中。

  1. 编辑 jmeter.properties:例如,可以修改 JMeter 的线程池大小。

    # 设置线程池大小
    threads.create.max=255

2.. 调整 JMeter 的日志级别:可以在 log4j2.xml 中更改日志级别。

```xml
<Configuration>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %5p %c{1}:%L - %m%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="debug">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>
```
JMeter基本组件介绍

采样器(Sampler)

采样器是 JMeter 中最基本的组件,用于模拟用户的请求行为。常见的采样器有 HTTP 请求、数据库请求等。

  1. HTTP 请求:用于模拟 HTTP 请求。

    • 添加 HTTP 请求:在 JMeter 中添加一个 HTTP 请求采样器,配置请求的 URL、方法(GET/POST)、参数等。
    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP Request" enabled="true">
        <stringProp name="HTTPSampler.domain">www.example.com</stringProp>
        <stringProp name="HTTPSampler.port">80</stringProp>
        <stringProp name="HTTPSampler.path">/path</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>
        <boolProp name="HTTPSampler.useMonitor">false</boolProp>
        <stringProp name="HTTPSampler.connect_timeout"></stringProp>
        <stringProp name="HTTPSampler.response_timeout"></stringProp>
    </HTTPSamplerProxy>
  2. 数据库请求:用于模拟数据库操作请求。

    • 添加 JDBC 请求:配置数据库连接、SQL 语句等。
    <JDBCSampler guiclass="JDBCDebugSamplerGui" testclass="JDBCSampler" testname="JDBC Request" enabled="true">
        <elementProp name="request" elementType="java.util.Properties" guiclass="PropertiesPanel" testclass="PropertiesPanel" testname="PropertiesPanel" enabled="true">
            <collectionProp name="parameters">
                <stringProp name="0">url=jdbc:mysql://localhost:3306/testdb</stringProp>
                <stringProp name="1">username=root</stringProp>
                <stringProp name="2">password=secret</stringProp>
                <stringProp name="3">driver=com.mysql.jdbc.Driver</stringProp>
            </collectionProp>
        </elementProp>
        <stringProp name="query">SELECT * FROM users</stringProp>
    </JDBCSampler>

监听器(Listener)

监听器用于收集和显示测试结果。常见的监听器有查看结果树、聚合报告等。

  1. 查看结果树:显示每个请求的详细信息,包括请求头、响应体、响应码等。

    • 添加查看结果树:将监听器添加到线程组中。
  2. 聚合报告:显示测试的汇总信息,包括每秒请求数(T/s)、每秒失败数(f/s)、平均响应时间等。

    • 添加聚合报告:将监听器添加到线程组中。

定时器(Timer)

定时器用于控制线程组中各个请求之间的延迟时间,模拟真实的用户行为。

  1. 固定定时器:设定一个固定的延迟时间。

    <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true">
        <intProp name="ConstantTimer.delay">1000</intProp>
    </ConstantTimer>
  2. 随机定时器:设定一个随机范围内的延迟时间。

    <UniformRandomTimer guiclass="UniformRandomTimerGui" testclass="UniformRandomTimer" testname="Uniform Random Timer" enabled="true">
        <intProp name="ConstantTimer.delay">1000</intProp>
        <intProp name="UniformRandomTimer.delay">1000</intProp>
    </UniformRandomTimer>

断言(Assertions)

断言用于验证请求的结果是否符合预期。常见的断言有响应断言、JSON 断言等。

  1. 响应断言:验证响应内容是否包含特定的文本或正则表达式。

    <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
        <collectionProp name="Assertion.response_field_names">
            <stringProp name="1">HTTPSampler.dt</stringProp>
        </collectionProp>
        <collectionProp name="Assertion.test_type">
            <stringProp name="2">1</stringProp>
        </collectionProp>
        <stringProp name="Assertion.test_strings">success</stringProp>
        <stringProp name="Assertion.response_encoding"></stringProp>
    </ResponseAssertion>
  2. JSON 断言:验证 JSON 响应是否符合预期。

    <JSONAssertion guiclass="JSONAssertionGui" testclass="JSONAssertion" testname="JSON Assertion" enabled="true">
        <stringProp name="JSONAssertion.testJsonPath">$.status == 'success'</stringProp>
        <stringProp name="JSONAssertion.jsonText">${__P(json)}</stringProp>
    </JSONAssertion>

配置元件(Config Element)

配置元件用于配置采样器的参数,包括用户定义的变量、HTTP 请求默认值等。

  1. 用户定义的变量:定义全局变量,可以在多个采样器中使用。

    <UserDefinedVariables guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
        <collectionProp name="Arguments.arguments">
            <elementProp name="user" elementType="pair" guiclass="ArgumentPanel" testclass="Argument" testname="Argument" enabled="true">
                <stringProp name="Argument.name">user</stringProp>
                <stringProp name="Argument.value">admin</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
            <elementProp name="password" elementType="pair" guiclass="ArgumentPanel" testclass="Argument" testname="Argument" enabled="true">
                <stringProp name="Argument.name">password</stringProp>
                <stringProp name="Argument.value">123456</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
        </collectionProp>
    </UserDefinedVariables>
  2. HTTP 请求默认值:定义 HTTP 请求的默认值,可以在多个 HTTP 请求采样器中使用。

    <HTTPDefaults guiclass="HTTPDefaultsGui" testclass="HTTPDefaults" testname="HTTP Request Defaults" enabled="true">
        <stringProp name="HTTPSampler.domain">www.example.com</stringProp>
        <stringProp name="HTTPSampler.port">80</stringProp>
        <stringProp name="HTTPSampler.path">/path</stringProp>
        <stringProp name="HTTPSampler.method">GET</stringProp>
    </HTTPDefaults>
JMeter实战演练

创建第一个测试计划

  • 步骤 1:打开 JMeter,创建一个新的测试计划。

    <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true">
        <elementProp name="TestPlan.function.gui.support" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
        </elementProp>
        <stringProp name="TestPlan.name">Test Plan</stringProp>
        <stringProp name="TestPlan.testfile">Test Plan.jmx</stringProp>
    </TestPlan>
  • 步骤 2:添加线程组(Thread Group)。

    <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
        <stringProp name="ThreadGroup.onetransactionper_iteration">true</stringProp>
        <stringProp name="ThreadGroup.duration"></stringProp>
        <stringProp name="ThreadGroup.delay">0</stringProp>
        <stringProp name="ThreadGroup.scheduler">false</stringProp>
        <stringProp name="ThreadGroup.num_threads">5</stringProp>
        <stringProp name="ThreadGroup.ramp_time">1</stringProp>
        <stringProp name="ThreadGroup.start_time"></stringProp>
        <stringProp name="ThreadGroup.end_time"></stringProp>
        <stringProp name="ThreadGroup.delay_thread_creation">false</stringProp>
        <boolProp name="ThreadGroup.scheduler">false</boolProp>
        <stringProp name="ThreadGroup.duration"></stringProp>
        <stringProp name="ThreadGroup.delay">0</stringProp>
        <stringProp name="ThreadGroup.thread_count">1</stringProp>
    </ThreadGroup>

添加HTTP请求

  • 步骤 3:在线程组中添加 HTTP 请求采样器。

    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP Request" enabled="true">
        <stringProp name="HTTPSampler.domain">localhost</stringProp>
        <stringProp name="HTTPSampler.port">8080</stringProp>
        <stringProp name="HTTPSampler.protocol">http</stringProp>
        <stringProp name="HTTPSampler.path">/api/users</stringProp>
        <stringProp name="HTTPSampler.method">GET</stringProp>
    </HTTPSamplerProxy>

添加监听器查看结果

  • 步骤 4:添加监听器来查看请求的结果。

    <ViewResultsTree guiclass="ViewResultsTreeGui" testclass="ViewResultsTree" testname="View Results Tree" enabled="true">
    </ViewResultsTree>

调整线程组参数进行压力测试

  • 步骤 5:调整线程组中的参数,如线程数、循环次数等。

    <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
        <stringProp name="ThreadGroup.onetransactionper_iteration">true</stringProp>
        <stringProp name="ThreadGroup.duration"></stringProp>
        <stringProp name="ThreadGroup.delay">0</stringProp>
        <stringProp name="ThreadGroup.scheduler">false</stringProp>
        <stringProp name="ThreadGroup.num_threads">50</stringProp>
        <stringProp name="ThreadGroup.ramp_time">1</stringProp>
        <stringProp name="ThreadGroup.start_time"></stringProp>
        <stringProp name="ThreadGroup.end_time"></stringProp>
        <stringProp name="ThreadGroup.delay_thread_creation">false</stringProp>
    </ThreadGroup>
JMeter测试结果分析

如何解读JMeter测试报告

  • 查看结果树(View Results Tree):显示每个请求的详细信息,包括请求头、响应体、响应码等。

    <ViewResultsTree guiclass="ViewResultsTreeGui" testclass="ViewResultsTree" testname="View Results Tree" enabled="true">
    </ViewResultsTree>
  • 聚合报告(Aggregate Report):显示测试的汇总信息,包括每秒请求数(T/s)、每秒失败数(f/s)、平均响应时间等。

    <AggregateReport guiclass="AggregateReportGui" testclass="AggregateReport" testname="Aggregate Report" enabled="true">
    </AggregateReport>

常见的性能指标解读

  • 平均响应时间:表示所有请求的平均响应时间。
  • 吞吐量(Transactions per Second):每秒请求的事务数。
  • 错误率:表示错误请求的比例。
  • 响应时间分布:显示响应时间的分布情况。

如何根据测试结果进行优化

  • 优化代码:通过代码优化减少服务器响应时间。
  • 优化数据库:优化数据库查询,减少查询时间。
  • 增加服务器资源:增加服务器资源,提高服务器处理能力。
  • 减少网络延迟:优化网络连接,减少网络延迟。
常见问题与解决方案

JMeter运行时常见问题

  • JMeter启动慢:确保 Java 环境正确设置,检查 JMeter 的配置文件是否有误。
  • JMeter线程组运行慢:检查服务器的负载情况,优化 JMeter 的配置。
  • JMeter请求超时:检查网络连接,优化请求参数。

常见性能瓶颈排查

  • 排查服务器资源瓶颈:使用系统监控工具查看 CPU、内存、磁盘 IO 等资源使用情况。
  • 排查数据库瓶颈:使用数据库监控工具查看查询性能,优化数据库索引。
  • 排查网络瓶颈:使用网络监控工具查看网络延迟和带宽使用情况。

JMeter配置优化建议

  • 合理设置线程数:根据服务器的资源情况,合理设置线程数。
  • 减少请求参数:减少不必要的请求参数,优化请求。
  • 使用缓存机制:利用缓存机制减少重复请求,提高性能。
  • 优化定时器配置:根据实际情况配置定时器,避免请求过于集中。
这篇关于JMeter压测资料:新手入门教程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!