开发人员学Linux(4):使用JMeter对网站和数据库进行压力测试

news/2024/5/10 3:09:27/文章来源:https://zhoufoxcn.blog.csdn.net/article/details/72825928
前言
表面看来,JMeter与本系列课程似乎关系不大,但实际上在后面的很多场景中起着重要作用:如何获知修改了某些代码或者设置之后系统性能是提升了还是下降了呢?商业的压力测试工具LoadRunner确实很高大上,但是据说费用也不便宜且体积也不小,而目前最高版本的开源免费压力测试工具JMeter3.2压缩包体积才不到53M,而且对于开发人员而非专业测试人员来说,JMeter提供的测试功能已经够强大了。要完整地介绍JMeter,即使把JMeter自带的文档翻译成中文就是一本厚厚的书了。但是在本篇只讲述如何利用JMeter来对Web网站和数据库进行压力测试,因为测试场景的复杂性,本篇实例讲述基于csv文件的参数化测试。
JMeter提供了对不同的协议、服务器及应用的测试支持,如下:
◦Web – 各种开发语言开发出的网站,比如ASP/ASP.NET/JSP/PHP/Python/Perl等
◦SOAP / REST Webservices
◦FTP
◦Database via JDBC(基于JDBC对数据库进行压力测试)
◦LDAP
◦Message-oriented middleware (MOM) via JMS
◦Mail - SMTP(S), POP3(S) and IMAP(S)
◦Native commands or shell scripts
◦TCP
◦Java Objects
还是那句话:本篇只讲述对Web网站和基于JDBC对数据库进行压力测试。

软件准备
JMeter3.2:为保持与本文有比较好的对照,建议从官网下载3.2版本,下载地址:http://jmeter.apache.org/[preferred]/jmeter/binaries/apache-jmeter-3.2.zip
此软件解压后即可使用。
Tomcat8.5:本实例中的关于Web网站的压力测试都是基于Tomcat8.5的,下载地址:http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.15/bin/apache-tomcat-8.5.15.tar.gz
如果嫌麻烦,可以直接在上一篇《开发人员学Linux(3):CentOS7中安装JDK8和Tomcat8》的环境中进行。
MySQL Community Server5.7:本篇中将以MySQL为例讲述如何对数据库进行压力测试,实际上本篇对MySQL版本没有要求,但后来今后,还是建议下载5.7版本,下载地址:https://dev.mysql.com/downloads/mysql/,同时请下载MySQL的JDBC驱动。
注意:本篇中JMeter在Windows下运行,MySQL数据库及Tomcat服务器均在CentOS7下运行。
使用JMeter对一般性网站进行压力测试
为便于演示,这里以上一篇《开发人员学Linux(3):CentOS7中安装JDK8和Tomcat8》中搭建起来的环境进行压力测试,本人的虚拟机支持桥接模式,IP地址为:192.168.60.198,在Tomcat中有一个简单的提交表单,网址是:http://192.168.60.198:8080/examples/servlets/servlet/RequestParamExample,页面如下图所示:
 
该页面中有一个Form,查看页面源代码可知该Form提交给当前Servlet,且有两个字段,分别为:firstname和lastname,如下图所示:
 
下面讲述创建相关的JMeter元素。
1.运行JMeter
首先运行在解压后的JMeter目录下的bin目录找到jmeter.bat来运行JMeter(重要的事情再说一遍:本篇中JMeter在Windows下运行,MySQL数据库及Tomcat服务器均在CentOS7下运行),JMeter支持多种语言,包括中文(其实对中文的支持不彻底),而在中文环境下JMeter的默认语言是中文,因为考虑到必要时候还需要看JMeter目录下的printable_docs目录中的文档,而这里的文档全是英文的,所以我将它设置为英文,如下图所示:
 
这是设置为英文之后的界面:
 
2.向“测试计划”添加必要的元素。    
添加测试计划的必要元素的顺序为:ThreadGroup->HTTPRequest->Listener。实际上还应包含TestPlan(测试计划),因创建时默认会创建一个TestPlan,故添加TestPlan的步骤可省略。
2.1添加ThreadGroup
如下图所示:
 
2.2添加HTTP Request Defaults
在ThreadGroup元素上鼠标右键,”Add”-“Config Element”-“HTTP Request Defaults”,HTTP Request Defaults适合于在一个ThreadGroup里面有大量的HTTP Request的情况,很多情况下HTTP Request的一些配置是相同的,那么只需要在HTTP Request Defaults中设置好即可,无需在每个HTTP Request中单独设置,添加HTTP Request Defaults的界面如下图所示:
 
2.3添加HTTP Request
在ThreadGroup元素上鼠标右键,通过”Add”-“Sampler”-“HTTP Request”来添加HTTP Request。
 
2.4添加Listener
在ThreadGroup元素上鼠标右键,通过”Add”-“Listener”来添加Listener,在这里根据需要添加Listener,本人一般会添加如下Listener:
Summary Report:可以对测试的结果有一个概要了解,结果中包含了测试次数、平均/最大/最小响应时间、并发吞吐量、接收/发送的字节数等信息;
View Result Tree:由于默认情况下判断某个测试是否成功是以是否收到了内容来判断的,比如请求某个需要授权的页面,如果未授权则会被导向到登录页面,在JMeter看来未发生40X、50X这类HTTP Code的错误则仍会被当做测试结果正确,加View Result Tree后就可以看到客户端和服务器端发送及响应的数据。
View Results in Table:和Summary Report类似,但侧重点不同。
 
2.5添加CSV Data Set Config
前面的form表单中可以看出需要firstname和lastname两个值,我们可以直接分别指定固定的值,也可以设定从csv文件中数据中的一系列符合要求的值。
在ThreadGroup元素上鼠标右键,通过”Add”-“Config Element”-“CSV Data Set Config”来添加CSV Data Set Config。
 
2.6参数配置
按照上述步骤创建的TestPlan最终效果如下图所示:
 
在这里再次强调一下,我们测试的是安装在CentOS7中的Tomcat8自带的实例程序,CentOS7虚拟机采用桥接方式,IP地址为192.168.60.198,请求的URL地址为:http://192.168.60.198:8080/examples/servlets/servlet/RequestParamExample

HTTP Request Defaults的配置信息如下图:
 
CSV Data Set Config的配置信息如下图:
 
注意:在这里提到了一个名为Tomcat_performance_test_parameter.csv的文件,这个文件和当前JMeter项目文件Tomcat-based-test-plan-JMeter3.2_Demo.jmx放在同一目录下。可以使用NotePad++之类的文本编辑软件创建这个文件,并将文件编码设置为utf-8,文件内容如下:
 
HTTP Request的配置信息如下图:
 

Thread Group的配置信息
 
注意:为了便于展示结果,这个将测试次数改为100了。
2.7测试结果
执行完测试后即可在Listener中查看结果。
Summary Report界面
 
View Results in Table界面
 
View Results Tree默认界面:
 
默认是以Text形式显示响应数据,如果响应数据是XML/JSON/HTML的话,可以更改为相对应的显示方式,这样更直观。在本例中以浏览器方式显示响应数据的界面如下:
 

基于模板创建压力测试计划
前面讲述了一个简单但完整的HTTP Web压力测试例子,基本上大多数同一类型的压力测试总有一些共同的元素,为此可以使用模板来创建压力测试计划。
1.选择从模板创建压力测试计划,如下图:
 
2.在弹出的对话框中选择”Building a Web Test Plan”,如下图所示:
 
3.点击”Create”即可基于模板的压力测试项目的创建,如下图所示:
 
然后根据我们自己的需要增加或删除一些元素,然后进行相应设置即可进行压力测试了。
使用JMeter对数据库进行压力测试
前面讲过JMeter支持多种压力测试,下面讲一下JMeter对数据库进行压力测试。
1.数据库准备
首先准备好需要进行压力测试的数据库,本次以本人以前学习爬虫时所使用的一个数据,基本信息如下:
数据库版本:mysql-5.1.58
数据库名:netskycn
查询用表名:ty_content(含748007条数据,2.2GB)。
ty_content的创建脚本如下:
CREATE TABLE `ty_content` (`Id` INT(11) NOT NULL AUTO_INCREMENT,`ArticleId` INT(11) NOT NULL,`Content` MEDIUMTEXT NOT NULL,`ContentHash` VARCHAR(32) NOT NULL,`CreateAt` DATETIME NOT NULL,`IsVisible` TINYINT(1) NULL DEFAULT '1',PRIMARY KEY (`Id`),UNIQUE INDEX `IDX_ContentHash` (`ContentHash`),INDEX `IDX_ArticleId` (`ArticleId`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM;


2.JDBC驱动准备
JDBC驱动可从各数据库厂商官网下载,这里本人已下载好的MySQL JDBC驱动mysql-connector-java-5.1.36.jar,将其复制到JMeter目录下的lib目录中。
3.创建TestPlan
可以基于模板创建JDBC Test Plan,如下图所示:
 
4.修改配置信息
1.首先添加CSV Data Set Config,并且准备MySQL_JDBC_ArticleID.csv文件,MySQL_JDBC_ArticleID.csv内容如下:
 
在这个文件中共有6964条数据,它来自于ty_content表中ArticleId的统计(不含重复数据)。
CSV Data Set Config的配置信息如下:
 
JDBC Connection Configuration配置信息如下:
 
Thread Group配置信息如下:
 
JDBC Request配置信息如下:
 
最终测试效果:
 

总结:
本篇讲述了如何使用JMeter来进行Web和数据库压力测试,为快速创建压力测试计划,可给予模板进行创建。可以看出一个JMeter压力测试计划必须包含如下元素:ThreadGroup、与压力测试计划对应的Request(如HTTP Request或JDBC Request)、Listener(可以根据需要添加多个Listener),并且为了减小缓存的影响,我们介绍了如何利用csv文件将测试中的参数信息保存起来。

本文未尽之处就是如何对需要身份验证的Web网站进行压力测试,对于带有验证码的需要在压力测试期间暂时禁用验证码功能。另外对于多种验证方式,所使用的方法也有区别,在这期间我试过针对性地对一些需要身份验证的网站建立压力测试计划,但没发现太多共性的东西,故在本篇中没有讲述这方面的内容,等后期有时间再总结整理这方面的内容。

更多资讯,请关注本人微信订阅号:



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_777287.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php消息推送接口,如何通过API接口给网站推送实时消息?

主要的工作者分为三个部分【web前端】【web后端】【websocket服务器】准备工作1、开启【websocket服务器】端口如下图片.png【websocket服务器】linux部署并启动服务1、下载workman包,推荐workman官方2、在linux命令行打开workman目录3、输入命令php start.php star…

asp.net网站不同子域名共享session信息

1session信息可序列化 [Serializable][Serializable]public class UserSession{ public string GroupCode{get;set;}public string RoleCode{get;set;}} 2 使cookie的path为根域名而不是子域名function setCookie(name, value) {//两个参数,一个是cookie的名子&…

使用程序自动登录网站

之前写过一篇使用代码自动登录网站,下载数据的博客程序自动登录和下载数据,后来在测试发现发现使用之前博客中的方法会导致网站系统异常,自然也就不能登录和下载数据了。但因为不是自己的网站不知道导致异常的原因,于是只能测试&a…

大型网站架构技术演进的思考(一):存储的瓶颈(1)

大型网站架构技术演进的思考(一):存储的瓶颈(1) 2016-03-23 架构说前不久公司请来了位互联网界的技术大牛跟我们做了一次大型网站架构的培训,两天12个小时信息量非常大,知识的广度和难度也非常大…

React发布网站后,Failed to load resource: the server responded with a status of 404 (Not Found)

IIS服务器如果发布了React开发的网站后,由于react会生成一个manifest.json在网站目录,用户浏览网站时候需要用到这个文件. 而IIS默认不支持json文件的访问,需要添加MIME类型信息 点右上角添加 输入如图,确定 不需要重启IIS,客户端直接刷新请求的页面即可

自建文章网站/博客,用什么HTML/富文本/web在线编辑器发文章比较好?

这是个人思路整理,你应有你自己的选择方式. 一直想做一个自己的网站,发布一些自己的文章.总在CSDN发文章,感觉CSDN的编辑器不错. 网上搜了一下,好多人说csdn很久之前用的是一个fceditor或者kindeditor之类的. 但我发现并不是.至少现在不是. 于是在git上简单搜了搜 waht you…

用好 CSS 的 filter滤镜,让你的网站超炫

让网站又漂亮又快是大家共同追求的目标。CSS 一个比较炫的属性 Filter 是非常帅的,可以不用flash就做出很漂亮的效果。filter 中有14个滤波器,我先使用 alpha 滤波器做个渐变的例子把。 例子:首先,把下面的代码粘贴到 test.html…

前端开发必备的几个网站

1,codelf。如果你不知道怎么命名一个东西,就去上面查查看。https://unbug.github.io/codelf/ 2.json在线格式化。不需解释的神器。https://www.json.cn/ 3.Can I use。查询浏览器兼容性的官方地址。https://www.caniuse.com/ 4.MDN。比w3c更靠谱更权威的…

Lnmp架构部署动态网站环境.2019-7-3-1.4

安装wiki开源产品 一、创建数据库 [rootLnmp bbs]# mysql -uroot -p123456 mysql> create database wiki;  #创建wiki数据库 mysql> grant all on wiki.* to wikilocalhost identified by wiki;  #创建wiki数据库用户 mysql> flush privileges;  #刷新权限 二、…

absolute 必须 relative_在美国生活如何更省钱?这些购物比价网站必须收藏

转载自:美国邦利无论我们由于什么来到美国,生活总是要围绕着衣食住行,留学也好,工作也罢,既然离不开买买买,在美国生活的小伙伴就少不得要精打细算。作为省钱小达人的我,自悟出了一套省钱三部曲…

利用cookie实现网站的自动登录_wordpress网站实现QQ登录方法

前面好一佳已经说了利用插件WP Open Social实现了QQ微信分享功能以后,好一佳发现这里还可以实现QQ登录功能,于是好一佳就开始研究利用QQ登录网站的方法了,几天下来,好一佳终于搞定这个功能,今天好一佳就在这里给大家说…

网站刷关键词_如何提升网站关键词及长尾词的排名 - 百度排名提升软件

原出处:超级排名系统原文链接:如何提升网站关键词及长尾词的排名? - 超级排名系统现在百度的更新几乎每天都在更新,目的是防止别人用软件刷排名和流量,但很多软件仍在不断的模拟用户点击站点。如果你知道百度的点击算法…

K近邻算法-约会网站配对实例

背景 海伦女士一直使用在线约会网站寻找适合自己的约会对象。尽管约会网站会推荐不同的任选 但她并不是喜欢每一个人。经过一番总结,她发现自己交往过的人可以进行如下分类:(1)不喜欢的人 (2)魅力一般的人…

大型网站和java中间件_大型网站系统与Java中间件实践

第一章:分布式系统介绍1.1初始分布式系统1.1.1分布式系统的定义两个重点:一是组件分布在网络计算机上,二是组件之间仅仅用过消息传递来通信并协调行动。分布式系统的定义:分布式系统一定是有多个节点组成的系统,一般来…

网站搜索功能怎么实现_「搜索引擎优化」理解百度搜索引擎原理可以让站长网站实现快速引流...

第一、百度搜索引擎优化原理第二、百度SEO工作原理百度搜索引擎首先是先抓取我们的网站的页面,接着是收录我们的网站页面,最后是从储存在数据库上的网站页面按页面的友好度进行排名。[搜索引擎优化]理解百度搜索引擎原理可以让站长网站实现快速引流第三、…

服务器缓存修改,网站修改之后不生效主要因为缓存,缓存有几种

网站修改之后经常会遇到一个现象,就是刚才该的东西没有显示,是什么原因呢?主要原因是缓存。缓存都有哪些呢?第一、DNS缓存。这个是域名的缓存,比如说,我们的域名对应的IP是1.1.1.1换成2.2.2.2的时候&#x…

服务器修改网站首页文字,结合网站实际情况修改seo标题能提高关键词排名

网站搜索引擎优化提高排名是修改网站首页标题提高网站排名。也许这种方法不是准确的,需要结合自身因素加以改进。建议:在前期,先做一些低竞争力的词和有业务需求的关键词。二、重新定位网站的主要关键字在网站做了太多的关键字之后&#xff0…

代码粘贴到word文档的美化网站

网站网址:http://word.wd1x.com/ 网站地址:http://www.planetb.ca/syntax-highlight-word 选择的是PHP格式,美化后直接复制粘贴到文档中即可 代码美化后的样式: 粘贴到文档中的样式

笨兔兔的故事linux入门很简单,对决 - 笨兔兔的故事——带你了解Ubuntu,了解Linux_Linux新闻_Linux公社-Linux系统门户网站...

(60) 对决毕大师和毕翻译安顿好之后,主人立刻把他们叫起来干活。俩人先后爬起来跑进内存,麻利的整理起主人的图片来——第一次启动嘛,得先对主人指定存放图片的那个目录扫描一下,做好整理和记录工作,这样才能心里有底&…

国外较好的IT网站

2019独角兽企业重金招聘Python工程师标准>>> 最近有些读者给我来信说很喜欢这个网站上的文章,并且也想通过翻译学习英文,他们询问我这些文章的英文原文是从哪里找到的? 外刊IT评论上的翻译的英文来源很杂,我总结了一下&#xff0…