JMeter性能测试

JMeter 简介

JMeter 是一个主要用于服务端系统性能测试的软件工具,可用于测试 web 网站、API 服务器等性能。它更适合没有编程能力的人或相对简单的使用场景,但若要深入做好性能测试,需学习编程以应对复杂场景。

安装

  • 安装 JDK :JMeter 是 Java 程序,需先安装 JDK 来运行。虽声称支持 JDK1.8 及以上版本,但 JDK17 可能出现问题,建议安装 JDK8 或 JDK11。

  • 安装 JMeter :从官网下载 Binaries 下的 JMeter 程序压缩包文件,解压到合适目录,进入 bin 目录,Windows 系统双击 jmeter.bat 文件打开管理界面,Mac 系统在命令行执行 sh jmeter.sh。

安装练习被测系统

为方便练习,提供了黑羽学院 2.0 作为练习用被测系统,有相应安装使用说明。

性能测试方法步骤

  1. 测试环境搭建 :包括安装配置好 JMeter、被测系统等,确保测试环境稳定且与生产环境相近,以便测试结果更具参考价值。

  2. 测试计划制定 :明确测试目标、范围、性能指标等,根据业务需求和系统特点设计合理的测试场景,确定需要测试的功能模块、预期负载情况等。

  3. 测试脚本开发

    • 使用 JMeter 界面录制脚本 :通过 JMeter 的代理抓包机制录制用户操作,生成测试脚本。先设置好 HTTP 请求默认值中的服务器 IP 等基础配置,添加 HTTP 代理服务器和录制控制器,配置过滤模式以排除不需要抓取的请求,设置浏览器代理后进行相应操作录制,结束后取消浏览器代理设置。录制完成后可对脚本进行检查和优化,如添加定时器模拟请求间隔、添加断言验证响应结果等。

    • 手动编写脚本 :根据测试需求,利用 JMeter 的各种元件(如线程组、取样器、定时器、后置处理器等)手动构建测试脚本。例如,使用线程组定义用户数量、上线时间和循环次数,使用 HTTP 请求取样器定义具体的请求,使用定时器设置请求间隔,通过后置处理器实现数据关联和提取等。

  4. 测试数据准备 :根据测试需求准备相应的测试数据,如用户账号密码、接口请求参数、业务数据等。可将测试数据存储在 CSV 文件中,通过 JMeter 的 CSV 数据文件设置元件读取数据,提高测试的灵活性和可扩展性。

  5. 性能测试执行

    • 进行小规模测试 :先使用少量的用户并发数、简单的测试场景进行初步测试,检查测试脚本是否正常运行,被测系统是否稳定,发现问题及时调整和优化。

    • 逐步增加负载 :在小规模测试正常的基础上,逐步增加用户并发数、提高负载强度,观察被测系统的性能表现和响应情况,记录系统在不同负载下的各项性能指标数据,如响应时间、吞吐量、错误率等。

    • 模拟真实场景 :尽量模拟真实的业务场景和用户行为,包括不同的用户操作路径、请求频率、数据输入等,使测试结果更贴近实际生产环境。

  6. 测试结果分析

    • 查看监听器数据 :通过 JMeter 的监听器查看测试结果,如查看结果树、聚合报告、响应时间分布等图表,分析系统的平均响应时间、吞吐量、成功率等指标,判断系统性能是否满足要求。

    • 分析系统瓶颈 :结合测试结果和被测系统的资源使用情况(如 CPU、内存、网络带宽等),找出系统性能瓶颈所在,如是否因数据库查询效率低下、代码逻辑缺陷、服务器资源不足等因素导致性能问题。

    • 撰写测试报告 :将测试过程、测试结果、性能瓶颈分析等内容整理成测试报告,为系统优化和改进提供依据。

  7. 性能调优和回归测试

    • 针对性能瓶颈进行调优 :根据测试结果和性能瓶颈分析,对被测系统进行相应的性能调优,如优化代码、调整数据库配置、增加服务器资源等。

    • 进行回归测试 :在系统调优后,重新执行性能测试,验证调优效果是否达到预期,确保系统性能得到提升且没有引入新的问题。

JMeter 界面简介及相关元件介绍

  • 测试计划组成元素 :性能测试场景在 JMeter 中称为 test plan(测试计划),对应一个测试用例,可保存在单独文件中。测试计划里包括多个元件,如线程组、取样器、监听器等。

  • 线程组 :用于定义同一种用户的行为和数量,一个用户的行为用一个线程执行。线程组中有 Ramp-Up 时间(所有用户上线总时间)和循环次数(每个用户做线程组动作行为的轮数)等设置,通过合理设置这些参数可以模拟用户逐渐增加访问的场景。

  • 取样器(Sampler) :用于定义具体请求,最常用的是 HTTP 请求取样器,通过它来设置用户访问的网页及发出的 HTTP 请求,包括请求方法、请求路径、请求参数等详细信息。

  • 监听器(Listener) :用于查看运行结果,如 ViewResultTree 可查看 HTTP 请求详细信息,包括线程名、请求开始时间、连接时间、延迟、负载时间、消息大小等;聚合报告能提供各项性能指标的汇总数据,如平均响应时间、吞吐量、错误率等,方便对测试结果进行整体评估。

HTTP 请求默认值

测试过程中若被测系统更换,手动修改各请求参数麻烦,可使用 HTTP 请求默认值来统一设置服务器 IP 等基础配置,提高测试效率,减少因配置错误导致的问题。

定时器(Timer)

用于模拟请求间隔时间,执行优先级高于取样器,可放在下一个消息前面暂停,也可使用取样器中的测试活动 flow control action 取样器来实现间隔,使测试场景更贴近真实用户操作情况,避免请求过于集中导致测试结果失真。

Cookie 管理器

当被测系统使用 Cookie Session 机制验证用户时,需在测试计划节点下添加 HTTP Cookie 管理器,使 JMeter 自动保存和携带 Cookie,以实现用户登录后在不同请求间保持会话状态,确保测试的正常进行。

后置处理器

用于对取样器结果进行后续处理,可将响应结果中数据提取到变量供后续使用。如 JSON 提取器可把 HTTP 响应消息数据提取到变量,示例中介绍了使用 JSR223 后置处理器检查 JSON 响应消息体中的字段值,通过这种方式可以实现数据关联和动态参数传递,满足复杂业务场景下的测试需求。

变量

在 JMeter 中,变量格式为 ${变量名},可用户自定义产生,也可由前置处理器、后置处理器等元件产生,还有 JMeter 内置变量如表示当前线程号的 __threadNum,通过使用变量可以使测试脚本更加灵活,方便进行参数化测试和数据驱动测试。

CSV 数据文件设置

当性能测试需从 CSV 文件读入大量数据时,可在某个线程组下添加 CSV data set config 元件,为每列设置变量名,JMeter 会将每行数据依次分配给线程,线程内元件可使用这些变量获取对应数据,从而实现不同线程使用不同的测试数据,提高测试的覆盖度和真实性。

断言

用于判定被测系统响应消息是否正确,可判断响应是否包含特定文本、数据等,还能使用脚本语言做灵活判定,示例中给出了使用 JSR223 断言脚本检查 JSON 响应消息体中字段值的代码,通过断言可以验证系统在性能测试过程中的功能正确性,确保不仅性能达标,功能也正常运行。

循环控制器

若只想循环线程组中部分操作,可使用循环控制器。其内部元件有时需用到当前循环序号,JMeter 将当前循环序号放到变量 jm<循环控制器名称>__idx 中,利用这一特性可以实现一些需要根据循环次数进行变化的测试逻辑。

预处理器

在取样器请求发出前执行操作,如设置参数、修改取样器设置、脚本预处理等。有效范围是同级所有取样器,若只针对某个取样器则应添加在其下面,示例中介绍了使用 JSR223 前置处理器对循环序号变量值进行预先处理,通过预处理器可以在测试前对相关数据和参数进行初始化和调整,为后续测试做好准备。

线程组:

取样器:

HTTP请求默认值:

录制流量:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值