Skip to content

JMeter 响应断言详解

JMeter 是一个功能强大的性能测试工具,它可以模拟大量用户并发访问网站或应用程序,以测试其性能和稳定性。在进行性能测试时,我们需要对响应结果进行断言,以确保应用程序或网站的功能和性能符合预期。

在 JMeter 中,响应断言是一种用于检查服务器响应是否符合预期的机制。JMeter 提供了多种类型的响应断言,包括文本、响应代码、响应头、响应时间等。下面将详细介绍 JMeter 中的响应断言。想要学习更多关于 JMeter 的知识,可访问 Jmeter 中文文档

响应断言类型

文本响应断言

文本响应断言是最常用的一种断言类型,它用于检查服务器响应中是否包含特定的文本。例如,我们可以使用文本响应断言来检查登录页面是否包含“用户名”和“密码”这两个关键字。如果服务器响应中不包含这些关键字,那么断言将失败。

在 JMeter 中,文本响应断言有多种选项,包括:

  • 包含/不包含:检查服务器响应中是否包含/不包含特定的文本。
  • 匹配/不匹配:使用正则表达式来检查服务器响应中是否包含/不包含特定的文本。
  • 大小写敏感/不敏感:指定断言是否区分大小写。

响应代码断言

响应代码断言用于检查服务器响应的 HTTP 状态码是否符合预期。例如,我们可以使用响应代码断言来检查登录页面是否返回 HTTP 200 状态码。如果服务器返回的状态码不是 200,那么断言将失败。

在 JMeter 中,响应代码断言有多种选项,包括:

  • 等于/不等于:检查服务器响应的 HTTP 状态码是否等于/不等于特定的值。
  • 区间:检查服务器响应的 HTTP 状态码是否在特定的区间内。

响应头断言

响应头断言用于检查服务器响应的 HTTP 头信息是否符合预期。例如,我们可以使用响应头断言来检查登录页面是否返回特定的 Content-Type 头信息。如果服务器返回的头信息不符合预期,那么断言将失败。

在 JMeter 中,响应头断言有多种选项,包括:

  • 包含/不包含:检查服务器响应的头信息中是否包含/不包含特定的值。
  • 匹配/不匹配:使用正则表达式来检查服务器响应的头信息中是否包含/不包含特定的值。
  • 大小写敏感/不敏感:指定断言是否区分大小写。

响应时间断言

响应时间断言用于检查服务器响应的时间是否符合预期。例如,我们可以使用响应时间断言来检查登录页面的响应时间是否小于 5 秒。如果服务器响应时间超过了预期,那么断言将失败。

在 JMeter 中,响应时间断言有多种选项,包括:

  • 大于/小于/等于:检查服务器响应的时间是否大于/小于/等于特定的值。
  • 百分比:指定服务器响应时间的百分比,例如 90%,并检查是否小于特定的值。

具体使用示例

添加 HTTP 接口

我们有如下的 HTTP 接口。

img添加 HTTP 接口

添加断言

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

img添加断言

之前的接口返回的数据结果如下:

json
{
    "total": 3,
    "data": [
        {
            "id": 1,
            "name": "Apple",
            "price": 100
        },
        {
            "id": 2,
            "name": "Orange",
            "price": 200
        },
        {
            "id": 3,
            "name": "Banana",
            "price": 300
        }
    ]
}

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

img响应文本

我们对 HTTP 的响应码 做断言:

imgHTTP 响应码

断言结果

运行用例。如果响应符合断言,则什么都不会发生。否则,在结果树中会看到报错信息。将 响应文本中包含Apple 的断言值改成 Apple3,运行,就会看到如下的报错:

img断言结果

总结

总之,响应断言是 JMeter 中非常重要的一个功能,它可以帮助我们检查服务器响应是否符合预期。在进行性能测试时,我们应该根据实际情况选择合适的断言类型,并设置合适的参数,以确保测试结果的准确性和可靠性。

JMeter 并发测试和持续性压测详解

并发测试和持续性压测都是评估系统性能的常用方法,它们可以帮助开发人员发现并解决系统中的性能问题。本文来详细介绍下。

概念

并发测试: 旨在评估系统在同时处理多个用户请求时的性能。在这种**测试**中,系统会暴露于一定数量的用户负载下,并且会记录系统的响应时间、吞吐量和资源利用率等指标。这些指标可以用来确定系统的性能瓶颈,以及在不同负载下系统的表现。

持续性压测: 旨在评估系统在长时间运行或高负载下的性能。在这种测试中,系统会暴露于一定数量的用户负载下,并且会持续一段时间运行,通常在几个小时或几天。这种测试可以用来确定系统在长时间运行下的表现,以及在高负载下系统是否具有可扩展性。

并发测试

在并发测试中,需要选择合适的参数,以模拟实际场景中的用户行为。这些参数包括:

  • 并发用户数:应根据系统的预期使用情况和硬件配置来确定。
  • 请求类型:应选择与实际场景中的用户行为相同或相似的请求类型。
  • 请求频率:应根据实际场景中的用户行为和系统的处理能力来确定。
  • 测试时间:应考虑系统的稳定性和可靠性,通常应持续一段时间。
  • 测试环境:应选择与实际生产环境相同或相似的测试环境。

并发是在线程组下的线程属性中设置的。

img并发测试

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

设置不同的负载配置,来查看系统在不同负载下的表现。

持续性压测

持续性压测和并发测试比,主要的不同就是持续时间长。在 JMeter 中持续性压测,只需:

  1. Ramp-Up 设置到比较大的值,比如说 1天(86400秒) 。
  2. 循环次数设置为永远。

img持续性压测

查看报告

JMeter 监听器用于收集测试结果并生成报告。在使用 JMeter 进行性能测试时,监听器非常重要,可以帮助您确定性能瓶颈和优化机会。以下是一些常用的 JMeter 监听器:

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

点击运行,可以看到报告。 汇总报告:

img查看报告

图形结果:

img图形结果

总结

在 JMeter 中设置并发是一个重要的过程,需要仔细考虑您要模拟的负载情况以及系统的容量。通过正确设置,可以更好地模拟实际情况并获得更准确的测试结果。

JMeter TPS 数据查看方法

TPS 是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。在 JMeter 中,我们可以使用以下方法查看 TPS:

使用 “Summary Report” 监听器

往线程组里添加一个 “Summary Report” 监听器,“Summary Report” 的 Throughput 可以认为是 TPS。

img使用 “Summary Report” 监听器

使用 “Transactions per Second” 监听器

在 JMeter Plugins Manager 安装 “Basic Graphs” 插件,然后在线程组里添加一个 “Transactions per Second ” 监听器。该监听器会显示 TPS 的实时折线图。

img使用 “Transactions per Second” 监听器

如何使用 JMeter 计算 TPS

TPS 是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。在 JMeter 中,我们可以使用以下步骤计算 TPS:

线程组设置循环次数

尝试增加线程组中的循环数,否则您可能会遇到某些线程已经完成其工作并且已经关闭,而其他线程尚未启动的情况。良好的做法是通过设置线程组参数,将“Loop Count”的数量设置为“Infinite”,并限制测试持续时间。

img线程组设置循环次数

设置 “Summary Report” 监听器

往线程组里添加一个 “Summary Report” 监听器,“Summary Report” 的 Throughput 可以认为是 TPS。

img设置 “Summary Report” 监听器

设置 “Transactions per Second” 监听器

在 JMeter Plugins Manager 安装 “Basic Graphs” 插件,然后在线程组里添加一个 “Transactions per Second ” 监听器。该监听器会显示 TPS 的实时折线图。

img设置 “Transactions per Second” 监听器

扩展知识:JMeter 中文文档

JMeter 并发设置和报告查看指南

JMeter 是一个功能强大的性能测试工具,可以模拟许多用户同时访问应用程序的情况。在使用 JMeter 进行性能测试时,设置并发是非常重要的。本文将介绍如何在 JMeter 中设置并发和查看报告。

设置并发

并发是在线程组下的线程属性中设置的。

img设置并发

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

查看报告

JMeter 监听器用于收集测试结果并生成报告。在使用 JMeter 进行性能测试时,监听器非常重要,可以帮助您确定性能瓶颈和优化机会。以下是一些常用的 JMeter 监听器:

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

点击运行,可以看到报告。 汇总报告:

img查看报告

图形结果:

img图形结果

总结

在 JMeter 中设置并发是一个重要的过程,需要仔细考虑您要模拟的负载情况以及系统的容量。通过正确设置并发用户数,可以更好地模拟实际情况并获得更准确的测试结果。

解决 JMeter 压测中 Socket closed 异常问题

问题描述

JMeter 压测时会报 java.net.SocketException: Socket closed

css
java.net.SocketException: Socket closed
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:668)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:542)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:414)
at org.apache.jmeter.protocol.http.sampler.LazySchemeSocketFactory.connectSocket(LazySchemeSocketFactory.java:97)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
at org.apache.jmeter.protocol.http.sampler.hc.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:318)
at org.apache.jmeter.protocol.http.sampler.MeasuringConnectionManager$MeasuredConnection.open(MeasuringConnectionManager.java:114)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445)
at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.executeRequest(HTTPHC4Impl.java:695)
at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:454)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:74)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1189)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1178)
at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:498)
at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:424)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:255)
at java.lang.Thread.run(Thread.java:766)

可能原因

引起 java.net.SocketException: Socket closed 错误的原因通常是未设置连接的超时时间。

解决方案

如果在 “HTTP Request Sampler” 的 Basic 里选中了 “Use KeepAlive”

解决 JMeter 压测中 Socket closed 异常问题解决方案

则需要在 Advanced 页签下设置如下参数:

  • 选择 Implementation 为 HttpClient4。
  • Connect 设置一个连接空闲超时时间,避免由于没收到被压测端返回的 Keep-Alive 的Header 而导致连接断开。

解决 JMeter 压测中 Socket closed 异常问题设置参数