Skip to content

什么是压力测试

软件**测试**中:压力测试(Stress Test),也称为强度测试、负载测试。压力测试是模拟实际应用的软硬件环境及用户使用过程的系统负荷,长时间或超大负荷地运行测试软件,来测试被测系统的性能、可靠性、稳定性等。

常用的压力测试软件有:LoadRunner、Apache JMeter、NeoLoad、WebLOAD、Loadster、Load impact、CloudTest、Loadstorm、阿里云 PTS 等等,本文介绍的是使用 Apache JMeter 来进行压力测试。

JMeter 是什么?

imgJmeter 页面

JMeter 是一个开源的 Java 应用程序,可以用于功能和性能测试。它最初是为 Web 应用程序设计的,但它也可以用于其他类型的测试,JMeter 是一种接口性能测试工具,主要用于**接口测试**和性能测试。

什么是 JMeter

如何下载和配置 JMeter 环境?

在搜索引擎上搜索官网,找到适合本地操作系统的版本进行下载。下载完成后将其解压缩到一个独立的文件夹中。然后,进入 JMeter 的根目录,再进入 bin 目录。在 bin 目录下,Windows 用户运行 jmeter.bat 文件即可启动 JMeter,Linux 用户则运行 jmeter.sh。请注意,在运行 JMeter 之前,必须安装 JDK 并配置环境变量。

了解更多:JMeter 如何配置环境变量

长链接与短连接

  • JMeter 用于进行单接口性能测试,对某一接口进行负载测试;使用 LR 进行场景流程类的性能测试。在 JMeter中,添加 HTTP 请求时,选中 “keepaive” 则为长连接,不选则为短连接。
  • 长连接与短连接的概念是针对 TCP 连接的。TCP 连接是一个双向通道,可以保持一段时间不关闭。
  • 长连接是指在完成链路连接建立后,在链路空闲时并不结束这条链路,而是一直维持这条链路的连接。因此,安全性较差。短连接是每次通信结束后,连接中断,下次通信时重新建立连接。
  • 长连接多应用于保持通信的场景,例如消息推送、链路复用等。短连接应用于 HTTP 技术,HTTP 在向服务器交互信息时在一段时间内也会保持长连接。
  • 长连接的实现原理是要客户端程序定时向服务端程序发送一个维持连接的包。如果长时间未发送维持连接包,服务端程序将断开连接。
  • HTTP 1.1 开始默认保持长连接,HTTP 1.0 是短连接。
  • 在数据库的连接中使用的是长连接。如果使用短连接频繁通信,会造成 socket 错误。频繁的 socket 创建也是资源的浪费。
  • Dubbo 中使用 RPC 通信协议,是长连接。每个消费者和生产者之间建立一个 TCP 连接,调用一次接口后该连接还存在。在 Spring Cloud 中使用 RESTful HTTP 访问,是短连接。

JMeter 有哪些组件?分别是什么作用?

JMeter 的组件有线程组、取样器、配置元件、前置处理器、后置处理器、定时器、断言、逻辑控制器、监听器。

  • 取样器:生成各种协议的请求,主要用于编辑用户请求时的传参数据。
  • 配置元件:辅助请求,简化请求数据编辑的内容。
  • 线程组:管理请求的运行时间和数量的限制。进行性能测试时必须设置。
  • 前置处理器:请求之前的数据管理。
  • 后置处理器:响应之后的数据管理。
  • 断言:针对请求后的响应内容做预期结果的判断。
  • 逻辑控制器:控制各种请求或元件的运行顺序和规则。
  • 监听器:对最后结果进行展示,可以图形展示,也可以数据形式进行展示。
  • 定时器:控制请求的运行时间。

JMeter 有哪些常用功能?

JMeter 的常用功能包括:CSV 文件设置、用户定义的变量、用户参数、响应断言、断言结果、HTTP 请求、循环控制器、同步定时器、查看结果树、聚合报告等。

接口测试的流程是什么?具体流程描述一下

接口测试的流程如下:首先获取接口文档,由开发人员提供。接口文档获得后,开始对其进行详细分析,包括请求内容的所有字段限制、请求方法、请求格式、请求的业务逻辑以及响应内容的所有字段限制、请求方法、请求格式、响应格式的展示、异常场景的处理、异常逻辑的返回内容等。分析完毕后,编辑和设计接口测试用例。用例设计过程需要考虑接口测试用例方法,具体设计方法包括参数测试、逻辑测试、异常测试和功能测试。设计用例完成后进行评审。随后执行接口测试用例,使用接口测试工具完成。执行完毕后,总结测试结果并输出相关文档,将文档发送给直接上司并附加所有参与人员。

如何使用 JMeter 执行接口测试?请详细描述操作流程。

JMeter 执行接口测试的流程如下:首先创建一个线程组,然后在线程组下创建请求。我们一般选择 HTTP 协议作为请求的协议。接着,我们将之前设计的用例内容添加到 HTTP 请求中。在 HTTP 请求下添加响应断言和断言结果。响应断言的内容应结合用例的预期结果进行添加。断言结果的作用是在请求执行完毕并获取到响应后展示断言的结果。最后,在 HTTP 请求下添加查看结果树。查看结果树的作用是展示响应的具体内容。这就是 JMeter 执行接口测试的简单操作流程。

JMeter 的主要特点:

协议支持

JMeter 支持多种协议,包括 HTTP、HTTPS、FTP、SOAP、JMS、POP3、SMTP、TCP 和 LDAP 协议。这使得 JMeter 可以用于测试各种类型的应用程序。

多线程支持

JMeter 支持多线程测试,可以模拟多个用户同时访问应用程序。这使得用户可以测试应用程序在不同负载下的性能表现。

报告生成

JMeter 提供了丰富的报告生成功能,可以方便地生成测试结果的图表和报告。这使得用户可以快速地分析测试结果,找出应用程序的性能瓶颈。

总之,JMeter 是一个功能强大的压力测试工具,可以帮助用户测试应用程序的性能和稳定性。同时,它还提供了丰富的社区支持和文档,方便用户进行学习和使用。

JMeter 压力测试入门示例

创建线程组

右击 “Test Plan”,选择 “Add” > “Threads(users)” > “Thread Group”

img创建线程组

添加取样器

右击 “Thread Group”,选择 “Add” > “Sampler” > “HTTP Request”

img添加取样器

添加监听器

右击 “Thread Group”,选择 “Add” > “Listener” > “View Results Tree”

img添加监听器

运行测试

img运行测试

生成测试报告

点击 “Tools” > “Generate HTML report” ,配置后参数后点击 “Generate report” 即可生成报告。

img生成测试报告

查看测试报告

img查看测试报告

JMeter 接口自动化测试入门

JMeter 是一个开源的负载测试工具,它可以模拟多种协议和应用程序的负载,包括 HTTP、FTP、SMTP、JMS、SOAP 和 JDBC 等。在进行接口自动化测试时,使用 JMeter 可以帮助我们快速地构建测试用例,模拟多种场景,发现接口的性能问题。下面是一些 JMeter 接口自动化测试的步骤和技巧。

第 1 步:创建测试计划

在**JMeter** 中,测试计划是测试的最高级别,它包含了各种元素和配置,如线程组、断言、监听器等。测试人员需要在JMeter中创建一个新的测试计划,并添加必要的元素和配置。

要创建新的测试计划,请选择: 文件 > 新建 > 填写计划名称。

JMeter 接口自动化测试创建测试计划

第 2 步:添加线程组

在测试计划中,测试人员需要添加一个或多个线程组。线程组是测试的基本单位,它定义了测试的并发用户数量、持续时间和其他属性。测试人员需要根据需求设置线程组的属性。

要创建线程组,请右击测试计划并选择: 添加 > 线程(用户) > 线程组。

Jmeter 添加线程组添加线程组

填写线程组信息。

jmeter 填写线程组信息填写线程组信息

  • 线程数:10 个线程就是模拟 10 个用户。
  • Ramp-Up 时间 (秒):线程准备时长。如果线程数为 10,准备时长为 10,那么需要 1秒钟启动 1 个线程。
  • 循环次数。如果线程数为 10,循环次数为 10,那么每个线程发送 10 次请求。总请求数为 10*10 = 100。如果勾选了“永远”,那么所有线程会一直发送请求,直到手动停止。

第 3 步:添加取样器

取样器 是 JMeter 测试的核心组件,它模拟了用户执行的操作。测试人员需要添加一个或多个取样器,并设置它们的属性。常见的取样器类型包括 HTTP 请求、TCP 请求、FTP 请求、JDBC 请求等。

这边以添加 HTTP 请求为例。添加 HTTP 请求,右击线程组并选择:添加 > 取样器 > HTTP 请求。

jmeter 添加取样器添加取样器

填写 HTTP 的调用信息。

jmeter填写 HTTP 的调用信息填写 HTTP 的调用信息

传过去的数据是 json 格式的,因此要添加头信息:Content-Type:application/json。右击 HTTP 请求并选择:添加 > 配置元件 > HTTP 信息头管理。

jmeterHTTP 信息头管理HTTP 信息头管理

添加头信息:Content-Type:application/json

jmeter添加头信息添加头信息

第 4 步:添加断言

断言是 JMeter 测试中的重要组件,它用于验证服务器的响应是否符合预期。测试人员需要添加一个或多个断言,并设置它们的属性。

常见的断言类型包括响应断言 和 JSON 断言:

  • 响应断言包括:文本、响应代码、响应头、响应时间等。
  • JSON 断言允许用户指定 JSON 路径表达式并验证 JSON 响应是否符合该表达式。

响应断言

添加响应断言: 右击接口 > 添加 > 断言 > 响应断言。

jmeter添加断言响应断言

对 响应文本中 包含字符串 “Apple” 做断言:

jmeter字符串 “Apple” 做断言字符串 “Apple” 做断言

对 HTTP 的响应码 做断言:

jmeterHTTP 的响应码做断言HTTP 的响应码做断言

JSON 断言

添加 JSON 断言: 右击接口 > 添加 > 断言 > JSON断言。

jmeter JSON 断言JSON 断言

对接口返回的 total 做断言:

jmeter total 做断言total 做断言

对接口返回的 data 的第 1 项 name 做断言:

jmeter name 做断言name 做断言

上面的 JSON Path 指的是 JSON 路径表达式。表达式由一系列的属性名和数组索引组成:以 “$.” 开头,用“.”和“[]”分隔。例如,以下 JSON 响应:

json
{
    "name": "John",
    "age": 30,
    "cars": [
        {
            "name": "Ford",
            "models": [
                "Fiesta",
                "Focus",
                "Mustang"
            ]
        },
        {
            "name": "BMW",
            "models": [
                "320",
                "X3",
                "X5"
            ]
        }
    ]
}

可以使用以下表达式获取相应的值:

  • $.name:获取 "John"。
  • $.cars[0].name:获取 "Ford"。
  • $.cars[1].models[2]:获取 "X5"。

断言结果

运行用例。如果 响应符合断言,则什么都不会发生。否则,在 结果树监听器 中会看到报错信息。

jmeter 断言结果断言结果

第 5 步:添加监听器

监听器是 JMeter 测试中的另一个重要组件,它用于收集测试结果并生成报告。测试人员需要添加一个或多个监听器,并设置它们的属性。以下是一些常用的 JMeter 监听器:

  • 聚合报告:提供有关事务响应时间、吞吐量和错误率的信息。
  • 查看结果树:显示每个请求的响应,包括请求头、请求正文和响应正文。
  • 监听器图形结果:将测试结果可视化,以便更轻松地分析性能问题。
  • 断言结果:验证响应是否满足特定条件。
  • 分布式负载测试图:显示不同服务器上的负载情况。

添加监听器:请右键单击线程组(或取样器) > 添加 > 监视器 > 具体的监视器。这里以最常用的 “查看结果树” 为例。

jmeter 添加监听器添加监听器

第 6 步:运行测试计划,查看报告

测试人员完成测试计划的配置后,可以运行测试计划并收集测试结果。测试人员可以通过监听器生成报告,并根据结果调整测试计划的配置。

等用例运行结束,可以在配置不同的监视器中看到对应的结果。

查看结果树:

jmeter 运行测试计划查看报告

汇总报告:

jmeter 汇总报告汇总报告

图形结果:

jmeter 图形结果图形结果

技巧

使用 CSV 数据文件

如果你需要模拟多种场景,可以使用 CSV 数据文件。你可以将不同的请求参数保存在 CSV 文件中,然后在 JMeter 中使用 CSV 数据文件配置请求参数。这样可以快速地生成多个测试用例,提高测试效率。

使用 JMeter 插件

JMeter 有很多插件可以扩展其功能。例如,你可以使用 JSON Path Extractor 插件,从接口返回的 JSON 数据中提取特定的字段。你还可以使用 Response Assertion 插件,验证接口返回的结果是否符合预期。

如果你需要使用插件,你需要按照以下步骤进行安装:

1、下载插件管理器

首先,你需要下载 JMeter 插件管理器。插件管理器是一个用于安装和升级 JMeter 插件的工具。你可以在官方网站上下载最新版本的插件管理器。

2、安装插件管理器

将下载好的插件管理器文件复制到 JMeter 的 lib/ext 目录下,并重启 JMeter。

3、安装插件

打开 JMeter 并选择 Options -> Plugins Manager。在 Plugins Manager 界面中,你可以搜索要安装的插件,并点击 Install 按钮进行安装。

4、重启 JMeter

完成插件的安装后,你需要重启 JMeter 才能使其生效。

使用分布式测试

如果你需要模拟大量并发用户访问接口,可以使用 JMeter 的分布式测试功能。你可以将测试计划分发到多个 JMeter 客户端,同时运行多个线程组,模拟大量并发用户访问接口。这样可以提高测试效率,发现接口的性能问题。

总之,使用 JMeter 进行接口自动化测试是一种快速、高效、可靠的测试方法。通过合理的配置和技巧,可以发现接口的性能问题,提高应用程序的质量和稳定性。

JMeter 测试脚本编写技巧

JMeter 是一款开源软件,用于进行负载测试、性能测试及功能测试。测试人员可以使用 JMeter 编写测试脚本,模拟多种不同的负载情况,从而评估系统的性能和稳定性。以下是编写 JMeter 测试脚本的步骤。

第 1 步:创建测试计划

在JMeter中,测试计划是测试的最高级别,它包含了各种元素和配置,如线程组、断言、监听器等。测试人员需要在JMeter中创建一个新的测试计划,并添加必要的元素和配置。

要创建新的测试计划,请选择: 文件 > 新建 > 填写计划名称。

img创建测试计划

第 2 步:添加线程组

在测试计划中,测试人员需要添加一个或多个线程组。线程组是测试的基本单位,它定义了测试的并发用户数量、持续时间和其他属性。测试人员需要根据需求设置线程组的属性。

要创建线程组,请右击测试计划并选择: 添加 > 线程(用户) > 线程组。

img添加线程组

填写线程组信息。

img填写线程组信息

  • 线程数:10 个线程就是模拟 10 个用户。
  • Ramp-Up 时间 (秒):线程准备时长。如果线程数为 10,准备时长为 10,那么需要 1秒钟启动 1 个线程。
  • 循环次数。如果线程数为 10,循环次数为 10,那么每个线程发送 10 次请求。总请求数为 10*10 = 100。如果勾选了“永远”,那么所有线程会一直发送请求,直到手动停止。

第 3 步:添加取样器

取样器 是 JMeter 测试的核心组件,它模拟了用户执行的操作。测试人员需要添加一个或多个取样器,并设置它们的属性。常见的取样器类型包括 HTTP 请求、TCP 请求、FTP 请求、JDBC 请求等。

这边以添加 HTTP 请求为例。添加 HTTP 请求,右击线程组并选择:添加 > 取样器 > HTTP 请求。

img添加取样器

填写 HTTP 的调用信息。

img填写 HTTP 的调用信息

传过去的数据是 json 格式的,因此要添加头信息:Content-Type:application/json。右击 HTTP 请求并选择:添加 > 配置元件 > HTTP 信息头管理。

imgHTTP 信息头管理

添加头信息:Content-Type:application/json

img添加头信息

第 4 步:添加断言

断言是 JMeter 测试中的重要组件,它用于验证服务器的响应是否符合预期。测试人员需要添加一个或多个断言,并设置它们的属性。

常见的断言类型包括响应断言 和 JSON 断言:

  • 响应断言包括:文本、响应代码、响应头、响应时间等。
  • JSON 断言允许用户指定 JSON 路径表达式并验证 JSON 响应是否符合该表达式。

响应断言

添加响应断言: 右击接口 > 添加 > 断言 > 响应断言。

img响应断言

对 响应文本中 包含字符串 “Apple” 做断言:

img响应文本

对 HTTP 的响应码 做断言:

imgHTTP 响应码 做断言

JSON 断言

添加 JSON 断言: 右击接口 > 添加 > 断言 > JSON断言。

imgJSON 断言

对接口返回的 total 做断言:

imgtotal 做断言

对接口返回的 data 的第 1 项 name 做断言:

imgname 做断言

上面的 JSON Path 指的是 JSON 路径表达式。表达式由一系列的属性名和数组索引组成:以 “$.” 开头,用“.”和“[]”分隔。例如,以下 JSON 响应:

json
{
    "name": "John",
    "age": 30,
    "cars": [
        {
            "name": "Ford",
            "models": [
                "Fiesta",
                "Focus",
                "Mustang"
            ]
        },
        {
            "name": "BMW",
            "models": [
                "320",
                "X3",
                "X5"
            ]
        }
    ]
}

可以使用以下表达式获取相应的值:

  • $.name:获取 "John"。
  • $.cars[0].name:获取 "Ford"。
  • $.cars[1].models[2]:获取 "X5"。

断言结果

运行用例。如果 响应符合断言,则什么都不会发生。否则,在 结果树监听器 中会看到报错信息。

img断言结果

第 5 步:添加监听器

监听器是 JMeter 测试中的另一个重要组件,它用于收集测试结果并生成报告。测试人员需要添加一个或多个监听器,并设置它们的属性。以下是一些常用的 JMeter 监听器:

  • 聚合报告:提供有关事务响应时间、吞吐量和错误率的信息。
  • 查看结果树:显示每个请求的响应,包括请求头、请求正文和响应正文。
  • 监听器图形结果:将测试结果可视化,以便更轻松地分析性能问题。
  • 断言结果:验证响应是否满足特定条件。
  • 分布式负载测试图:显示不同服务器上的负载情况。

添加监听器:请右键单击线程组(或取样器) > 添加 > 监视器 > 具体的监视器。这里以最常用的 “查看结果树” 为例。

img添加监听器

第 6 步:运行测试计划,查看报告

测试人员完成测试计划的配置后,可以运行测试计划并收集测试结果。测试人员可以通过监听器生成报告,并根据结果调整测试计划的配置。

等用例运行结束,可以在配置不同的监视器中看到对应的结果。

查看结果树:

img查看结果树

汇总报告:

img汇总报告

图形结果:

img图形结果

以上是JMeter测试脚本编写的基本步骤。测试人员需要根据具体需求和场景,灵活运用JMeter的各种功能和组件,编写高效、准确的测试脚本。