测试是应用开发过程中非常重要的一个环节,主要分为业务测试和压力测试,前者保证业务功能正常使用,后者保证应用的使用体验。压力测试可以让我们了解应用潜在的性能瓶颈。
今天介绍一款开源的接口测试工具——JMeter
JMeter 下载&配置
下载地址:jmeter.apache.org/download_jm…
JMeter 是免安装的,下载完成之后即可使用,在启动之前先将界面改为简体中文。找到JMeter 的配置文件jmeter.properties,在39行增加language=zh_CN配置,然后启动JMeter
接口测试
我写了一个简单的restful接口来模拟多线程请求并将每个线程打印出来。代码如下。
点击文件->新建,新建新建一个测试计划。
在测试计划的基础上新建线程组,右键->添加->线程->线程组,然后设置线程数量和循环次数。
由于是HTTP接口,所以接下来添加HTTP请求,右键线程组->添加->取样器->HTTP请求,然后接口信息填入,包括IP、端口号、接口地址等。
结果解析
JMeter 提供了多种测试结果,最常用的有结果树、聚合报告、图形结果和断言结果。
我们可以依次添加这些监听器,如下图。
1、结果树
- 功能:显示每个请求的详细响应信息,包括请求和响应数据。
- 用途:调试测试脚本和查看请求的具体响应。
2、聚合报告
- 功能:提供一个表格,显示关于每个取样器(sampler)的聚合数据,如平均响应时间、最小/最大响应时间、吞吐量、错误率等。
- 用途:查看和分析性能测试的总体结果。
指标解释如下:
- 样本:样本数指的是在测试期间执行的请求总数
- 平均值:平均值是所有请求响应时间的平均数
- 中位数:中位数是将所有请求的响应时间从小到大排列后位于中间位置的响应时间
- 90%百分位:90%百分位表示至少有90%的请求的响应时间低于或等于这个值
一句话总结就是:样本数告诉你测试了多少次;平均值提供了一个总体性能的概览;中位数更能代表大多数用户的体验;90%百分位帮助你了解性能的最差情况。
3、图形结果
- 功能:以图形形式显示响应时间和监控数据。
- 用途:直观地查看响应时间的变化趋势。
图像结果各个曲线含义如下:
- 绿色曲线:这通常表示请求的吞吐量,即单位时间内服务器处理的请求数量。从图中看,这条线随着时间的推移是递增的,表明测试期间吞吐量在增加。
- 蓝色曲线:这表示响应时间的中位数。在这张图中,蓝色曲线在测试开始时略高,然后稳定下来,并在测试过程中相对平稳。这意味着大多数请求的响应时间保持相对一致,并没有显著波动。
- 红色曲线:这代表了90%百分位的响应时间。在这里,红色曲线随时间的推移而上升,这表明最慢的10%请求的响应时间在增加。这可能表明在较高的负载下,用户可能会遇到较长的响应时间。
- 黑色点:这些点表示单个样本的响应时间。图中有大量的黑点集中在较低的响应时间区域,但也有一些点散布在更高的响应时间区域,这表明有些请求响应时间较长。
- 横轴(时间):显示测试持续的时间。
- 纵轴(左侧):表示响应时间(毫秒)。
- 纵轴(右侧):表示每秒的请求处理数量(吞吐量)。
4、断言结果
- 功能:显示断言的结果,包括成功或失败的信息。
- 用途:验证响应是否符合预期。
在 JMeter 中,断言用于检查HTTP请求的响应(或其他类型的请求/响应),确保它符合预期的特定条件。常见的断言类型包括:
- 响应断言:检查响应中是否包含或不包含特定的文本,或响应代码是否符合预期。
- 持续时间断言:验证请求的响应时间是否在指定的时间范围内。
- 大小断言:检查响应的大小是否符合预定的大小范围。
- XPath/XQuery 断言:针对 XML 和 HTML 响应,使用 XPath/XQuery 表达式进行断言。
- JSON 断言:针对 JSON 格式的响应,使用 JSONPath 表达式进行断言。
总结
以上就是JMeter 的测试流程以及从测试结果中能够获取的信息。
更多文章干货,推荐公众号【程序员老J】