DRDS性能评估之Jmeter使用

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: DRDS性能评估之Jmeter使用:如何使用Jmeter开发DRDS压测脚本、运行场景、压测模型配置、结果查看

一. Jmeter概述

1.Jmeter介绍

       Apache JMeter是100%纯java桌面应用程序,被设计用来测试客户端/服务器结构的软件。它可以用来测试包括基于静态和动态资源程序的性能,例如静态文件,Java Servlets,Java 对象,数据库,FTP服务器等等。JMeter可以用来在一个服务器、网络或者对象上模拟重负载来测试它的强度或者分析在不同的负载类型下的全面性能。

       另外,JMeter能够通过用断言创建测试脚本来验证我们的应用程序是否返回了我们期望的结果,从而帮助我们回归测试我们的程序。为了最大的灵活性,JMeter允许我们使用正则表达式创建断言。

2.Jmeter常用术语

测试计划(Test Plan)

测试计划时Jmeter测试脚本的根节点,用来描述一个性能测试,包含与本次性能测试所有相关的功能。也就是说本次性能测试的所有内容是基于一个计划的。


线程组(Thread Group)

线程组,,可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。线程组中包含的线程数量在测试执行过程中是不会发生改变的。


取样器(Sampler)

性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元,JMeter 原生支持多种不同的sampler ,如 HTTP Request Sampler 、 FTP Request Sample 、TCP Request Sample 、JDBC Request Sampler 等,每一种不同类型的 sampler 可以根据设置的参数向服务器发出不同类型的请求。


逻辑控制器(Logic Controllers)

包括两类无件,一类是用于控制test plan 中 sampler 节点发送请求的逻辑顺序的控制器,常用的有 如果(If)控制器 、switch Controller 、Runtime Controller、循 环控制器等。另一类是用来组织可控制 sampler 来节点的,如 事务控制器、吞吐量控制器。


监听器(Listenters)

用来对测试结果数据进行处理和可视化展示的一系列元件。 图行结果、查看结果树、聚合报告等都是我们经常用到的元件。


配置元件(Configuration Elements)

用于提供对静态数据配置的支持。CSV Data Set config 可以将本地数据文件形成数据池(Data Pool),而对应于HTTP Request Sampler和 TCP Request Sampler等类型的配制无件则可以修改Sampler的默认数据。

例如,HTTP Cookie Manager 可以用于对 HTTP Request Sampler 的cookie 进行管理


断言(Assertions)

用于检查测试中得到的相应数据等能否符合预期,断言一般用来设置检查点,用以保证性能测试过程中的数据交互能否与预期一致。


定时器(Timers)

用于操作之间设置等待时间,等待时间是性能测试中常用的控制客户端QPS的手端。类似于LoadRunner里面的“思考时间”


前置处理器(Pre-Processors)

用于在实际的请求发出之前对即将发出的请求进行特殊处理。例如,HTTP URL重写修复符则可以实现URL重写,当RUL中有sessionID 一类的session信息时,可以通过该处理器填充发出请求的实际的sessionID 。


后置处理器(Post-Processors)

用于对Sampler 发出请求后得到的服务器响应进行处理。一般用来提取响应中的特定数据(类似LoadRunner测试工具中的关联概念)。


二.Jmeter安装


1.首选需要安装Java运行环境,请参考: http://jingyan.baidu.com/article/ab69b270c01a4d2ca7189f8c.html


2.目前Jmeter最新为3.2版本,下载页面地址为:

http://jmeter.apache.org/download_jmeter.cgi

16ef6831adc433d59699af8c9716d7d2a1a51597


3.下载后直接解压,解压后目录如下:

f701ca258fbff653458b7abd870533890ae5fa7e

目录说明:

bin 包含启动、配置等相关命令

docs 官方本地文档目录

extras 辅助库

lib 核心库,包含JMeter用到的各种基础库和插件

licenses 包含non-ASF软件的许可证

printable_docs 可打印版本文档目录

LICENSE JMeter许可说明

NOTICE JMeter简单信息说明

README.md JMeter官方基本介绍

主要介绍bin目录下我们最关注几个文件:

jmeter.properties JMeter核心配置文件,各种配置基本在这完成

log4j.conf JMeter日志配置管理

jmeter.log JMeter运行日志记录,什么输出信息、警告、报错都在这里进行了记录

jmeter.bat windows下jmeter启动文件

shutdown.cmd windows下jmeter关闭文件

stoptest.cmd windows下jmeter测试停止文件

jmeter-server.bat windows下jmeter服务器模式启动文件


注:每一个.cmd文件都对应一个.sh文件,.sh是Linux下的对应功能的文件


4.另外DRDS测试必须下载Mysql的JDBC驱动程序包并放到Jmeter的Lib目录中,下载地址为:

https://dev.mysql.com/downloads/connector/j/

5a7d8474d2f8cf18441cb8068350f3e6863bd624
下载完成并解压,拷贝驱动程序Jar包到Jmeter Lib目录下:

975599cd4f6fcf1a137cb9c6009475c752c7f710

三.Jmeter配置与运行


1.要运行JMeter, 运行 jmeter.bat (for Windows) 或者 jmeter (for Linux) 文件。那些文件在bin目录下。稍微暂停后,JMeter GUI会显示出来。

在bin目录你发现有些附加脚本很有用。Windows脚本文件(CMD文件需要Win2K或者更新):

  • jmeter.bat - 运行JMeter(默认在GUI模式)
  • jmeter-n.cmd - 使用一个JMX文件运行非GUI测试
  • jmeter-n-r.cmd - 使用一个JMX文件远程运行一个非GUI测试
  • jmeter-t.cmd - 在GUI模式使用一个JMX文件
  • jmeter-server.bat - 以服务器模式启动JMeter

2.目前Jmeter程序默认进程内存大小设置512Mb,往往不能满足大并发压力发起的需求,需要提高单机压力机配置或部署Jmeter压测集群。

ca70a49fda4d450e5743434059b7c2929b51da49


3.直接修改jmeter.properties配置文件中HEAP变量,结合压力机本身配置规格来进行设置,比如2C4G的云服务我设置的JVM进程大小为3072M.

f2b2f858414b7d3b515c9fd80d43ec4658f787e7


4.另外,在大规模模拟压测请求发起时,单机无论从CPU、MEM、网络等资源是无法满足需求的,这个时候我们就需要部署压测集群。压测集群由一台控制机器和多台压力发起机器组成:配置压力机内存及启动端口,端口配置在jmeter.properties 配置文件中,修改server_port端口,可以使用默认1099

72c26ec95e345dfd8f8770480e7e3c1bd358a7cf


5.运行jmeter-server.bat,以服务器模式启动JMeter,启动完成后通过netstat –an|findstr 1099查看端口是否启动

acb25f084e900cb89ed85c13b55ded4cacd6cb96


7.另外在压力机上可以配置为开机启动运行jmeter-server.bat脚本,然后通过生成自定义镜像的方式,快速复制和部署压力机。

最后需要配置控制机,打开jmeter.properties文件修改remote_hosts变量,添加压力机IP和端口

853917aae342e79626f4e7e6f7b8689bf2fae571

8.在控制机上运行jmeter.bat以GUI的方式运行Jmeter,点击运行菜单-启动远程机,可以看到配置的远程压力机;


四.创建DRDS压测脚本和场景


1.创建测试计划

a1b6ca06d71aeeea3549d8001cf6955ec3c8187f

       一个测试计划描述了一系列Jmeter运行时要执行的步骤。一个完整的测试计划包含一个或者多个线程组,逻辑控制器,取样发生控制,监听器,定时器,断言和配置元件。


2.创建线程组

       处理每个JMeter测试计划的第一步就是添加线程组元件。这个线程组会告诉JMeter想要模拟的用户数量,用户应该发送请求的频率和应该发送的数量。

开始来添加一个线程组:首先选择这个测试计划,点击鼠标右键得到添加菜单,然后选择添加-->线程组。这时应该看到这个线程组已经在测试计划下了,如果没有看到,就点击测试计划元件展开这个测试计划树。

e530cdc4f1b9b253c286da0b855ebce034cec809

线程数:等同于并发用户数

循环次数:一般在脚本调试的时候设置为1或多次,在正式压测的时候选择永远,表示压测如果没有手工停止或执行时间未定线程会一直迭代循环执行。

调度器:一般在正式测试的时候会选有,比如测试计划需要压测十分钟,需在持续时间输入600s,如果需要计划在固定的时间设置启动和停止的时间


3.添加JDBC连接池配置元件

首先选择JDBC用户元件,点击鼠标右键,得到添加菜单,然后选择添加-->配置元件-->JDBC连接配置。

1143954976c3ee5b41134ad7e734d13d8b288f49

进入JDBC连接配置页面:

478ee2e22e704649da03f172b1852d3574025de1

  • 绑定到池变量: 这需要能够唯一标识这个配置。这是用来被JDBC取样器识别这个配置来使用.
  • 数据库URL: jdbc: mysql:// IP或域名地址 : 端口/库名
  • JDBC驱动类: com.mysql.jdbc.Driver
  • 用户名: 数据库用户
  • 密码: 数据库密码

4.添加JDBC采样器

在线程组元素上鼠标右键添加JDBC请求采样器:在JDBC请求采样器中配置相关信息:连接池信息、SQL执行类型、SQL语句、SQL参数等。

44fff9a24d9bd1a0cdc2809d652299c48c7f6c8e

       但有时候测试需要使用不同的变量表模拟不同的插入的记录/或者查询语句有不同的查询条件,这个时候就需要使用到参数化来做,Jmeter提供函数助手提供简单的随机字符串或随机数,或者准备参数化文件通过__CSVRead函数读取文件中的参数值


随机数生成函数:

398e60836b95c4734af95671d40738e5d36f611c

随机字符串生成函数

79d3e46587629399fe4eda01dfcdbf6d06ae09ad

5.压测调试-添加结果树、调试设置

       调试运行的时候,需要对JDBC请求发送内容、响应内容和结果进行查看,请求是否成功;这个时候需要添加察看结果树:右击JDBC采样器-添加-监听器-察看结果树

4aafa657eef2baa9350fce74ae1c30ad0146d98c


调试过程中将线程数和循环次数设置为比较小的值:

1bcf779f01441161d085fc9434fcd5ba08d431b2


 点击本机运行调整:

44c1b57022fa509220bf0927c8184b256fb4fee2


调试完成后察看结果树内容:

9d827fe52b90d71cec0eed9bc619a5fe4fe84534

调试运行结果后,我们可以看到运行结果,主要包含3块内容:取样器结果、请求详细内容、响应详细内容。


6.压测运行-添加集合报告、运行设置

在运行测试之前需添加聚合报告监听器到测试计划元素或线程组元素之下,聚合报告主要提供压测的汇总聚合方面的数据。

点击线程组鼠标右键—添加—监听器—聚合报告:

1163a44b023669a23f53efc57adbd1a44bca6523

点击线程组元素--设置压测运行设置,按测试需求主要设置并发用户数和压测场景运行时间:

d7f9bec960beac9eff8f4c3725a54d5d2abe2f54

禁用察看结果树元素,此元素建议在正式压测前禁用,在发起大力压测时,此元素会记录每一个请求的发送和接受信息导致控制台机器资源消耗比较大。

4aafa657eef2baa9350fce74ae1c30ad0146d98c

压测设置准备完成后,启动场景:建议只启动远程压测机,不要启动本地压测进程,只在本地运行控制端就可以;

c7041dda918bda06eb0d93df09dbb61c526b226b

在场景运行期间可以点击聚合报告产看性能压测指标数据:请求数、响应时间(平均、最大、最小、90%),请求失败率、每秒请求数等

d00df91e762ba972e49cba84b97e0afaa0a287f0

如果运行期间需要手工停止场景可以点击停止运行:

2450d01b2343f46bd0543d3de1040d7544e78693


7.压测场景按业务模型比例发起压力

        压测的时候往往需要去模拟生产业务环境真实的压力情况,而正是的生产各个业务的请求频率是不一样的,往往通过统计分析,我们会得到一个各业务比例的模型。

       在Jmeter中我们可以通过吞吐量控制器来模拟,点击线程元素—右击添加-控制器-吞吐量控制器,然后将需要控制的JDBC请求采样器放置到吞吐量控制器元素之下,比如截图中设置运行总次数的百分百为20,比如线程迭代运行脚本100次,这个吞吐量控制器下面的采样器就运行20次。

b32cdf23ba0ae71af9cac61f1619ff54990eedee

比如插入和查询、更新SQL语句需要按2:7:1的比例运行场景,就需要创建多个吞吐量控制器:

58a706747309dcaf7ba963ed7384ef9559853324

运行测试,通过聚合报告我们可以看到运行的结果,通过请求总数和每秒请求数都可以看出比例是和之前设置的比例一直的。

90800a8b2f286d24b513baaf227175e3f88e05a3

相关实践学习
快速体验PolarDB开源数据库
本实验环境已内置PostgreSQL数据库以及PolarDB开源数据库:PolarDB PostgreSQL版和PolarDB分布式版,支持一键拉起使用,方便各位开发者学习使用。
目录
相关文章
|
3月前
|
测试技术 数据库 UED
Python 性能测试进阶之路:JMeter 与 Locust 的强强联合,解锁性能极限
【9月更文挑战第9天】在数字化时代,确保软件系统在高并发场景下的稳定性至关重要。Python 为此提供了丰富的性能测试工具,如 JMeter 和 Locust。JMeter 可模拟复杂请求场景,而 Locust 则能更灵活地模拟真实用户行为。结合两者优势,可全面评估系统性能并优化瓶颈。例如,在电商网站促销期间,通过 JMeter 模拟大量登录请求并用 Locust 模拟用户浏览和购物行为,可有效识别并解决性能问题,从而提升系统稳定性和用户体验。这种组合为性能测试开辟了新道路,助力应对复杂挑战。
114 2
|
4月前
|
测试技术 持续交付 Apache
性能怪兽来袭!Python+JMeter+Locust,让你的应用性能飙升🦖
【8月更文挑战第5天】随着互联网应用规模增长,性能测试至关重要。本文介绍如何利用Python结合Apache JMeter和Locust构建高效可定制的性能测试框架。JMeter广泛用于负载测试,通过模拟大量虚拟用户并发访问来评估性能。Locust基于Python,通过编写简单脚本模拟HTTP请求,特别适合Web应用测试,比JMeter更灵活易扩展。Python作为胶水语言简化测试脚本编写并流畅自动化流程。文章提供JMeter命令行测试和Locust脚本示例,并展示如何用Python自动化执行和整合测试结果,最终帮助应用在高负载下稳定运行。
101 1
|
7月前
|
API Apache
性能工具之JMeter5.0核心类JMeterEngine源码分析
【5月更文挑战第17天】性能工具之JMeter5.0核心类JMeterEngine源码分析
155 4
性能工具之JMeter5.0核心类JMeterEngine源码分析
|
7月前
|
Dubbo Java 应用服务中间件
性能工具之JMeter Dubbo 脚本开发
【5月更文挑战第13天】性能工具之JMeter Dubbo 脚本开发
85 3
性能工具之JMeter Dubbo 脚本开发
|
2月前
|
测试技术 持续交付 Apache
性能怪兽来袭!Python+JMeter+Locust,让你的应用性能飙升🦖
【10月更文挑战第10天】随着互联网应用规模的不断扩大,性能测试变得至关重要。本文将探讨如何利用Python结合Apache JMeter和Locust,构建高效且可定制的性能测试框架。通过介绍JMeter和Locust的使用方法及Python的集成技巧,帮助应用在高负载下保持稳定运行。
69 2
|
3月前
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
101 10
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
2月前
|
测试技术 持续交付 Apache
性能怪兽来袭!Python+JMeter+Locust,让你的应用性能飙升🦖
【10月更文挑战第2天】随着互联网应用规模的不断膨胀,性能测试变得至关重要。本文将介绍如何利用Python结合Apache JMeter和Locust构建高效且可定制的性能测试框架。Apache JMeter是一款广泛使用的开源负载测试工具,适合测试静态和动态资源;Locust则基于Python,通过编写简单的脚本模拟HTTP请求,更适合复杂的测试场景。
67 3
|
7月前
|
消息中间件 Java 测试技术
性能工具之Jmeter扩展函数及压测ActiveMQ实践
【5月更文挑战第18天】性能工具之Jmeter扩展函数及压测ActiveMQ实践
112 5
|
4月前
|
存储 Linux 数据库
性能工具之JMeter + Grafana + InfluxDB 性能平台搭建
【8月更文挑战第7天】性能工具之JMeter + Grafana + InfluxDB 性能平台搭建
74 1
性能工具之JMeter + Grafana + InfluxDB 性能平台搭建
|
4月前
|
监控 Java 测试技术
实战派必看!Python性能测试中,JMeter与Locust如何助力性能调优
【8月更文挑战第6天】性能优化是软件开发的关键。本文介绍JMeter与Locust两款流行性能测试工具,演示如何用于Python应用的性能调优。JMeter可模拟大量用户并发访问,支持多种协议;Locust用Python编写,易于定制用户行为并模拟高并发。根据场景选择合适工具,确保应用在高负载下的稳定运行。
138 4