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

news/2024/5/9 17:26:55/文章来源:https://blog.csdn.net/weixin_34234829/article/details/85151384

前言
表面看来,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,页面如下图所示:
wKiom1kxiAiwLvKbAABT6Z6HfD0847.png-wh_50 
该页面中有一个Form,查看页面源代码可知该Form提交给当前Servlet,且有两个字段,分别为:firstname和lastname,如下图所示:
wKioL1kxiBrTPu8fAAC3ElPt2K4231.png-wh_50 
下面讲述创建相关的JMeter元素。
1.运行JMeter
首先运行在解压后的JMeter目录下的bin目录找到jmeter.bat来运行JMeter(重要的事情再说一遍:本篇中JMeter在Windows下运行,MySQL数据库及Tomcat服务器均在CentOS7下运行),JMeter支持多种语言,包括中文(其实对中文的支持不彻底),而在中文环境下JMeter的默认语言是中文,因为考虑到必要时候还需要看JMeter目录下的printable_docs目录中的文档,而这里的文档全是英文的,所以我将它设置为英文,如下图所示:
wKioL1kxiC7w62nBAACs3wzzi6o859.png-wh_50 
这是设置为英文之后的界面:
wKiom1kxiD6BblfRAAC2qA4Yzog047.png-wh_50 
2.向“测试计划”添加必要的元素。    
添加测试计划的必要元素的顺序为:ThreadGroup->HTTPRequest->Listener。实际上还应包含TestPlan(测试计划),因创建时默认会创建一个TestPlan,故添加TestPlan的步骤可省略。
2.1添加ThreadGroup
如下图所示:

wKiom1kxiFzhkQqZAACsGAabW84733.png-wh_50


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的界面如下图所示:
 

wKioL1kxiFzwRH4jAAE01ZDsN1g528.png-wh_50

2.3添加HTTP Request
在ThreadGroup元素上鼠标右键,通过”Add”-“Sampler”-“HTTP Request”来添加HTTP Request。
 

wKioL1kxiF3yMpqFAAE1pmZrO_o234.png-wh_50

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类似,但侧重点不同。
 

wKiom1kxiKqguQdVAAFOWJbcmUQ361.png-wh_50





2.5添加CSV Data Set Config
前面的form表单中可以看出需要firstname和lastname两个值,我们可以直接分别指定固定的值,也可以设定从csv文件中数据中的一系列符合要求的值。
在ThreadGroup元素上鼠标右键,通过”Add”-“Config Element”-“CSV Data Set Config”来添加CSV Data Set Config。
 

wKioL1kxiKui2bh5AAFg-fjQqqE838.png-wh_50

2.6参数配置
按照上述步骤创建的TestPlan最终效果如下图所示:
 

wKiom1kxiKvRekSTAACOBV2p2kw883.png-wh_50

在这里再次强调一下,我们测试的是安装在CentOS7中的Tomcat8自带的实例程序,CentOS7虚拟机采用桥接方式,IP地址为192.168.60.198,请求的URL地址为:http://192.168.60.198:8080/examples/servlets/servlet/RequestParamExample

HTTP Request Defaults的配置信息如下图:
 

wKioL1kxiKyjR6VJAACI6iWaxwM645.png-wh_50

CSV Data Set Config的配置信息如下图:
 

wKioL1kxiQexREU7AAB-uS5YhOw357.png-wh_50



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

wKioL1kxiQfi-Ed_AAA7LqE0X8U735.png-wh_50

HTTP Request的配置信息如下图:
 

wKiom1kxiSihtVZpAACP2fsi6bY112.png-wh_50
Thread Group的配置信息
 

wKioL1kxiSmwFNpTAABv8FDfTDE521.png-wh_50

注意:为了便于展示结果,这个将测试次数改为100了。
2.7测试结果
执行完测试后即可在Listener中查看结果。
Summary Report界面

wKiom1kxiSmCDhn6AABLHkNgRT0413.png-wh_50

View Results in Table界面
 

wKioL1kxiWCBTTWXAAHxzVw-lBE136.png-wh_50
View Results Tree默认界面:
 

wKiom1kxiWGA6Rf6AAE2QVjVTD0583.png-wh_50

默认是以Text形式显示响应数据,如果响应数据是XML/JSON/HTML的话,可以更改为相对应的显示方式,这样更直观。在本例中以浏览器方式显示响应数据的界面如下:
 

wKiom1kxiWHhMG8PAAE6qtbzBf4458.png-wh_50


基于模板创建压力测试计划
前面讲述了一个简单但完整的HTTP Web压力测试例子,基本上大多数同一类型的压力测试总有一些共同的元素,为此可以使用模板来创建压力测试计划。
1.选择从模板创建压力测试计划,如下图:
 

wKiom1kxiZXy8vghAACh693KpWE111.png-wh_50


2.在弹出的对话框中选择”Building a Web Test Plan”,如下图所示:
 

wKioL1kxiZWTpd7kAACifcsyN9w300.png-wh_50

3.点击”Create”即可基于模板的压力测试项目的创建,如下图所示:
 

wKiom1kxiZbimXXNAAEovVnb5i4790.png-wh_50

然后根据我们自己的需要增加或删除一些元素,然后进行相应设置即可进行压力测试了。
使用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,如下图所示:
 

wKiom1kxieHQNLb9AAGuNPsWIik615.png-wh_50


4.修改配置信息
1.首先添加CSV Data Set Config,并且准备MySQL_JDBC_ArticleID.csv文件,MySQL_JDBC_ArticleID.csv内容如下:
 

wKioL1kxieGisbqWAAAkxX6Uj-g583.png-wh_50

在这个文件中共有6964条数据,它来自于ty_content表中ArticleId的统计(不含重复数据)。
CSV Data Set Config的配置信息如下:
 

wKiom1kxieLz5bKIAABbGo8WYxs424.png-wh_50

JDBC Connection Configuration配置信息如下:

wKioL1kxieKgqMDBAACRjV-XfL4764.png-wh_50

 
Thread Group配置信息如下:
 

wKiom1kxih2B8uAjAABErpm7flI964.png-wh_50


JDBC Request配置信息如下:
 

wKiom1kxih2jXTKlAABsSsnbHHk083.png-wh_50

最终测试效果:
 

wKioL1kxih7w2fDaAABFuAMgWtA444.png-wh_50


总结:
本篇讲述了如何使用JMeter来进行Web和数据库压力测试,为快速创建压力测试计划,可给予模板进行创建。可以看出一个JMeter压力测试计划必须包含如下元素:ThreadGroup、与压力测试计划对应的Request(如HTTP Request或JDBC Request)、Listener(可以根据需要添加多个Listener),并且为了减小缓存的影响,我们介绍了如何利用csv文件将测试中的参数信息保存起来。
本文未尽之处就是如何对需要身份验证的Web网站进行压力测试,对于带有验证码的需要在压力测试期间暂时禁用验证码功能。另外对于多种验证方式,所使用的方法也有区别,在这期间我试过针对性地对一些需要身份验证的网站建立压力测试计划,但没发现太多共性的东西,故在本篇中没有讲述这方面的内容,等后期有时间再总结整理这方面的内容。


声明:本文首发于本人个人微信订阅号:zhoujinqiaoIT,其后会同时在本人的CSDN、51CTO及oschina三处博客发布,本人会负责在此四处答疑。

wKiom1j-owzQqrSXAABqxYT8jsM825.jpg

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

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

相关文章

礼品代发网站源码_小礼品代发能确保是真实物流吗?

我们在进行小礼品代发的时候,也是会有一些信息应该要让自己能够先去了解清楚,尤其是对那些没有什么经验的人来说,更加应该要注意,要让自己能够去好好的了解到这个方面的问题,这可以说是比较重要的,在了解到…

python 做网站_怎么用python做网站

怎么用python做网站? python做网站方法步骤: 1、导入django包 可直接在pycharm下载,或者pip/easy_install Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。它最初是被…

php有ssm框架吗,SSM框架-企业门户网站-1-工程构建

刚入职一个星期,现在才有时间开始这个框架的博客,我自己接的项目,第一次拿商业项目开源,大神们可能看着会觉得这不怎么样吧,其实我上线的项目是PHP写的,我只是在这个项目的基础上,改为了SSM框架…

vue 解决路由切换 网页音乐播放器继续播放音乐问题(模仿pjax 原理,解决个人网站局部刷新问题)

1.思路 vue 缓存 加 局部刷新 ,起到路由切换时,内容发生改变但是不刷新界面,从而实现网页音乐播放器一直播放同一首歌,而不是随着页面刷新停止播放, 2 解决步骤 vue 实现缓存(keep-alive)首先…

xampp+YII搭建网站

一、安装xampp xampp专为php开发设计,需要的apache,mysql,php已经自带了。特别提醒,请下载PHP版本高于5.4支持Yii2.0的xampp 二、配置环境变量 在系统的环境变量path中新建变量D:\xampp\php\ext和D:\xampp\php 三、安装composer C…

大型网站技术架构(1)

网站都是从小网站一步一步发展为大型网站的,而这之中的挑战主要来自于庞大的用户、安全环境恶劣、高并发的访问和海量的数据,任何简单的业务处理,一旦需要处理数以 P 计的数据和面对数以亿计的用户时,问题就会变的很棘手。 初始阶…

买空间做网站_企业如何搭建自己的官方网站

如今网站建设对于一个企业来说,所起到的作用是至关重要的,在互联网时代,更需要顺应社会的潮流,才能够真正的有利于企业的长远发展。网站建设除了网页设计之外,其他都是比较客观的条件,选择了就不容易修改&a…

IIS发布网站,访问时出现无法识别的属性“targetFramework”错误

今天在IIS发布网站后,访问时出现无识别的属性“targetFramework”错误 错误描述: 错误原因: 是由IIS配置该站点的.NET Framework 版本与程序中的.NET Framework配置的版本不一致引起的 解决方法: 出现这个错误的原因是NET Framewo…

java开发企业网站开发文档6,java开发文档

java开发文档比如商业有什么样的本质,同样的产品在商业里的可行性,你去跨行业去问商业人士。huarimani说:“开源企业的根本原则是结构化的商业模式,模式化的商业模式就是结构化的商业模式。自动化化的商业模式就是为了将产品在众多…

【Python爬虫学习实践】基于Xpath和lxml库解析网站

在之前的学习笔记中,介绍了Xpath语法规则和lxml库的基本使用,同时也列举出了一部分示例代码。为了更加深入地学习和运用好这两大工具,下面以爬取Tencent招聘网站职位信息为实例介绍在实践中基于Xpath和lxml库编写爬虫的基本流程和方法。 Tenc…

基于django的视频点播网站开发-step15-项目部署

项目部署是一个比较大的工程,但这是笔者最喜欢的一个环节,因为在部署过程中,会遇到很多疑难问题,这些问题能促使我学到很多很多的技术。 项目部署,顾名思义,就是将自己的程序存放到远程服务器上面&#xff…

使用Quasar设计Material和IOS风格的响应式网站

GITHUB:使用Quasar设计旅游网站文章链接:使用Quasar设计Material和IOS风格的响应式网站 Quasar Quasar是一款基于Vue.js开发的UI框架,可以让你轻松构建网站简洁明快的界面,更重要的是它还能让你轻松做好RWD(响应式网站…

关于网站架构设计的知识

网站架构,一般认为是根据客户需求分析的结果,准确定位网站目标群体,设定网站整体架构,规划、设计网站栏目及其内容,制作网站开发流程及顺序,以最大限度地进行高效资源分配与管理的设计。其内容有程序架构&a…

java验证码的实现原理_web技术开发:网站的验证码的验证原理是什么?怎么实现的?...

src链接到生成验证码图片的servlet应用于数据回显CheckImgServletpackage com.huanfeng.cn;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.BufferedReader;import jav…

建立php的网站配置文件,网站的搭建流程,lnmp环境网站目录以及配置文件,安全等介绍!...

上节我们教了大家linux系统php环境的安装,这里我简单的教大家怎么配置安全,网站的根目录在哪,怎么样才能让一个网站运行起来。一个环境已经安装好了,点击ftp按钮进入ftp管理ftp管理界面可以直观的看到文件和目录等。首先是数据库的…

去哪儿网代理网站机票价格采集方案

2019独角兽企业重金招聘Python工程师标准>>> 原文作者:西安鲲之鹏 原文链接:http://http://www.site-digger.com/html/articles/20120509/33.html 去哪儿网的代理网站有自己独立的机票搜索接口,例如http://xyx.trade.qunar.com/si…

建设优质手机网站必读

在2013年底百度曾经发布了一份《2014中国网站运营发展趋势报告》,里面详细分析了目前中文网站的发展趋势,其中值得我们注意的是,报告中首次将PC端网站与移动端网站分开说明,另外一个可喜的发现是,目前在所有的网站中&a…

7个最好的文件存储网站

最近,文件越来越多,因为在不同的地方轮换上网,地方的不确定性迫使我去寻找一些高性能且免费的文件存储站点。或者,你目前有一些集体照片,需要传送给同学以及朋友,但是邮箱的附件的限制性让人霎时头痛。现在…

这10件事情,你做网站之前都有考虑吗?

2019独角兽企业重金招聘Python工程师标准>>> 1.命名尽量统一。 命名有很多地方,比如页面该如何统一命名,要是用wordpress建站,命名就该遵循wordpress的文件命名规范,比如文章页single.php,分类页category.php,搜索页se…

GCOGE技术内幕-Gcoge酷鸽传媒官方网站 Gcoge.com-酷哥一下,问题搞定!

Gcoge酷鸽传媒官方网站 Gcoge.com-酷哥一下,问题搞定!- 酷哥引擎新媒体 酷哥搜索珀利引擎-全球唯一全新概念珀利引擎新媒体--聚合优化创新 新思维 心服务~一个域名,通行天下!全球最大聚合门户!全球卓著搜索专家! 国内外著名搜索引擎聚合门户~我们的宗旨是为人民服务…