DRDS性能评估之Jmeter使用-阿里云开发者社区

开发者社区> 阿里云支持与服务> 正文
登录阅读全文

DRDS性能评估之Jmeter使用

简介: 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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

分享阿里云支持与服务团队最佳实践、经典案例与故障排查。

官方博客
文档