Jmeter使用指南----压力测试工具
来源:
https://blog.csdn.net/u012111923/article/details/80705141
https://www.cnblogs.com/st-leslie/p/5185376.html
https://www.cnblogs.com/Z-Queen/p/10044798.html (如何支持 Cookie测试通过)
序言
由于公司在来年需要进行压力测试,所以也就借节假日的机会来学习一下压力测试的步骤,由于本人的学习时间比较短,希望各位大神朋友们能够多多的谅解并指正在下的错误,在此仅表敬意
适应人群
1、初入门的压力测试工程师
2、为入门但是打算在软件测试方面发展的同学
3、对软件测试有浓厚的兴趣的人
压力测试初窥探
压力测试顾名思义就是通过模拟指定的用户数量同时访问网站从而达到对网站进行施压,进而测试出网站在高并发问题上的性能优势劣势以及应对DDOS攻击的防护能力,这也是考验一个网站的健壮性的一个特点(本人认为的),目前主流的压力测试工具有Jmeter、LoadRunner,其中LoadRunner是有惠普公司开发的一款非开源的商业软件,在性能测试方面可以说是市面上最牛的测试工具,但是由于其使用需要收费,对于很多自营公司但是资金又不是十分的充裕来说,这样一笔费用确实比较难让人接受,所以在此我就推荐大家使用另外一款压力测试工具Jmeter,其在测试方面虽然相比于LoadRunner来说还是有很多的不足但是由于Jmeter是开源的,而且基本上可以完成公司正常的测试要求,所以Jmeter这一款软件才是我认为的最佳的压力测试工具
Jmeter软件的安装
Jmeter软件是纯JAVA开发的软件,所以需要配置JAVA的运行环境才能够运行,具体的配置JAVA环境请点击本链接
环境安装完成后再命令行中运行中直接运行命令java,出现下面的内容即为安装成功
安装成功后直接打开bin目录下面的jmeter.bat文件,初次打开可能会久一点,请耐性等候
Jmeter的几个常见的概念
1、测试计划,所有的测试工作都要基于测试计划来进行,一个测试项目中就只能存在一个的测试计划,测试计划在整个项目中充当的是一个全局设置的作用,这样也就不难解释为什么一个项目中就只能有一个测试计划
2、线程组,线程组顾名思义也就是相当于很多线程的一个集合,在项目中可以有多个的线程组,线程组在项目中主要是集合对一个对象进行测试的线程,比如说你想测试A网站和B网站,这个时候你就可以通过创建两个线程组来完成这个任务
3、HTTP请求,HTTP请求的原理是通过创建HTTP的多条请求,从而达到测试网站性能的作用,HTTP请求也是压力测试中最为常见的,其他的还有数据库测试、FTP测试等
好了,在这里就不多说了这些概念了,接下来就来进行一个简单的应用,其他的概念会在下面提到
Jmeter的简单应用
Jmeter最为大家所认识的是它在对网站性能上的测试,所以就从这个开始介绍
任务:模拟5个用户同时访问,并且访问的时间要在2秒内结束,目标网站是http://www.cnblogs.com/st-leslie/
分析:模拟5个用户其实说白了也就是模拟发送五条HTTP请求,这个相信大家都应该知道的吧,不解释了。
开始步骤:
1、打开Jmeter,并将测试计划命名为FirstDemo,如下图所示
2、测试计划创建完成下一步是创建线程组,线程组中主要有线程数、Ramp-Up Period、循环次数,调度器下面我们就来对这几个参数简单的介绍一下
线程数:线程数相当于要虚拟的用户
Ramp-Up Period:相当于是线程所用的首次循环的时间范围,后面会进行详细的解释
循环次数:用户循环的次数,循环次数为永远默认不勾选,这个的主要好处是用来绘制图标图标所用,后面进行详细解释
调度器:调度器主要是用来设定特定时间运行所用的
根据本次的测试任务要求,线程数我们设置为5,Ramp-Up Perod我们设置为2,循环次数设置为1,如下图所示
3、线程组创建完成下面就来介绍一下最核心的部分,创建HTTP请求,HTTP请求的创建流程是:线程组=>添加=>Sampler(取样器)=>HTTP的请求,下面是HTTP请求的主要参数,其他的参数比较简单就不做介绍,相信你读者都会懂的
服务器名称或IP:
(**这里必须输入域名或者IP**如10.10.120.97或者www.collfg.com,路径输入要访问的地址必须拆开录取否则不支持CookieManager模拟操作)
这里指的是你要访问的目标主机的域名
注意:在输入的时候切记不要将"http://"输入其中这样jmeter会出错,直接写WWW即可,本题也就是输入www.cnblogs.com/st-leslie/
端口号:默认的HTTP的端口号是80端口,这个默认的端口号可以不填
协议:指的是数据传输协议,一般我们填写的是HTTP协议
方法:提交信息的方法,一般我们常见的是GET,POST方法
路径:指的是发生错误所要重定向的URL地址或者本地localhost地址
同请求一起发送参数:这个参数相当于GET或者是POST方法提交的一些用户的自定义信息,这个参数除了可以接受直接设置,也可以使用CSV进行设置
同请求一起发送文件:这个的使用方法跟上面的相似就不介绍了
其他的一些参数比较少用到,一般不设置
将HTTP请求设置为如下图:
4、好了,基本上已经完成了测试的搭建,现在可以直接的运行,运行的快捷键是Ctrl+R,也可以使用下面的按钮
但是你会发现这样运行之后你什么现象都没有看到,这是正常的,因为这样虽然理论上已经搭建完成但是缺少了一个监视器,所以你是没有办法查看结果的,其中监视器的位置是在添加=>监视器下面。常见的监视器有:聚合报告、用表格查看结果、查看结果树、图形结果
聚合报告:我们能够从聚合报告中获取相关的测试结果,这个也是我们分析结果的主要依据,这个显示的是同一HTTP请求
用表格查看结果:通过表格的形式将结果呈现,从这里我们可以看到每次HTTP请求发送的情况,相比于聚合报告如果同一个请求发送给多次聚合报告是不会记录的,但是用表格查看结果是会将其进行记录
查看结果树:这个跟表格查看结果有点相似,但是比起根据有详细的发送请求的信息,以及返回的结果可以查看
图形结果:这个顾名思义地球人都懂
这里的监视器的用法都是一样的,我们就以聚合报告为例,为HTTP请求添加聚合报告,其他的监视器的使用方法基本相同
层级关系如下:
好了,这样便是真正的大功告成了,运行结果如下:
参数说明:
1、Label:HTTP请求的名称, 这里是采用默认的名称
2、#Samples:这个是指,采集器的数量,计算公式是:线程数*循环次数
3、这些样本中HTTP的平均时间
4、样本的中位数时间,本题中的时间是从大到小排列的第3位,其中Average和Median比较相近,这个也反映了这组请求的时间起伏不大
5、90%Line:指的不是Average*100%*90%,而是假如有10个数,那么我们去的就是百分之90的位置的数,也就是从小到大排列的第9位
5、Throughout:这个也就是我们常说的吞吐量,主要是用来衡量网站性能的关键指标,一个网站的吞吐量越高意味着性能越强
6、其他的参数是最小时间、最大时间、出错率、流量查看
实践经验篇
提升篇说白了就是一些本人在练习的时候遇到的一些特殊情况,在此分享给大家
正如上面所说的我们可以把聚合报告放在HTTP请求目录的下面,但是不知道有没有人跟我想的是一样的,就是聚合报告可不可以放在线程组层级的下面,下面我们就来验证这个说法,如下图所示:
从上图我们可以发现,这两个层级关系都是一样的(虽然里面的数据不同,但是这些可能会受到网络流量等其他的一些网络环境所影响),那聚合报告(监视器)到底与HTTP请求之间的关系是什么呢?这里我们可以先猜测然后进行验证,我们猜测监视器的作用范围是监视同级以下的Samples,现在我们就来验证,如下图所示
聚合报告的结果是聚合报告1
聚合报告
聚合报告3
由此可以看出,聚合报告1=聚合报告+聚合报告3
下面我们就来谈谈并发的问题,如上面所示,我们一般人会以为只要把时间设置为Ramp-Up Period=0的时候就一起发送的,其实并不然,下面我们就来举例看看Ramp-Up Period这个是怎么一回事,先清除所有的测试内容,然后在HTTP请求的下面添加用表格查看结果,如图所示:
我们可以从红色的框内发现,2s指的是所有线程一次循环的时间是在两秒钟以内,但是0s就不是这样的效果了,这个有谁知道请留言一下,大家学习学习
好了,怎么实现真正意义上的同时并发呢?这个其实我们可以引入Synchronizing Timer定时器,我们只要在Number of Simulated Users to Group by选项中设置并发数便可以了,但是这个并发数一定要小于线程数要不然就不会发生触发,下面我们就来看看这个的运行情况
看到了吗?HTTP请求中的Samples不是一条一条加上去的,而是一下子就5条Samples同时出现
如上面所说的,测试计划其实就是提供一个全局设置,但是在Jmeter中还有一个可以提供全局设置的地方就是在前置处理器下面的用户参数, 如下图所示,我们将80端口号用port变量来代替
然后将HTTP请求改为下图所示
引用的方法是${变量名},这个方法不仅使用与端口号的设置,其他的设置也是相同的道理
这个设置你也可以在测试计划中添加效果都是一样的
对了,可能有些读者以前是熟悉LoadRunner测试工具的,会认为LoadRunner测试工具有比较直观的图形化可以进行比较,其实这个在Jmeter中也是有的,你只要在监视器中添加图形结果即可以看到,但是这个图形结果一般我们会将循环次数设置为永远,循环次数太少就没有什么比较的意义
我们就以循环5次和永远来进行比较一下
循环5次:
循环永远
哈哈,是不是直观了好多呢(笑点低)
上文中我们有写到CSV的用法,其实CSV的用法有点类似用户参数的设置,具体请看这里
结尾
好了,这一章就说到这里了,虽然短短的3天去学习这个工具但是真心感觉这个工具很是强大,比人才疏学浅里面有什么说错的地方希望大家指正指正,而且对Constant Throughput Timer定时器的使用一直不太清楚,有懂的读者直接在下面留言,最好详细一点,谢谢大家,春节快乐
PartI______________________________________________________________________________
_______________________________________________________________________________________________
PartII______________________________________________________________________________
Jmeter使用指南----压力测试工具的更多相关文章
- Jmeter:图形界面压力测试工具
Jmeter是一款强大的图形界面压力测试工具,完全用Java写成,关于Jmeter的介绍,网上其实有不少的文章,我原本是不想再重复写类似文章的,但我发现有些很关键性的,在我们测试中一定会用到的一些设置 ...
- apache压力测试工具的apache bench和JMeter的安装
Apache压力测试工具的安装 1,apache bench的安装 apache bench工具集成在http的软件包内,可以直接安装apache就可以. 当有些时候,我们不需要用到所有的软件包,我 ...
- MQTT压力测试工具之JMeter插件教程
基于Jmeter的MQTT测试插件-上 1. Jmeter插件简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具.下载 用于对软件做压力测试,它最初被设计用于Web应用 ...
- 【转】Jmeter:图形界面压力测试工具
Jmeter是一款强大的图形界面压力测试工具,完全用Java写成,关于Jmeter的介绍,网上其实有不少的文章,我原本是不想再重复写类似文章的,但我发现有些很关键性的,在我们测试中一定会用到的一些设置 ...
- 【JMeter】压力测试工具的概览与使用
软件工程综合实践第五次个人作业 作业要求:在软件测试章节中,我们介绍了不少VSTS的软件测试工具,请使用一些其他平台上的测试工具,并写博客介绍如何在你的项目中具体使用. 前言: 第一次看到这个作业 ...
- 十个免费的Web压力测试工具
两天,jnj在本站发布了<如何在低速率网络中测试 Web 应用>,那是测试网络不好的情况.而下面是十个免费的可以用来进行Web的负载/压力测试的工具,这样,你就可以知道你的服务器以及你的W ...
- 使用Jmeter至WebService压力测试
使用Jmeter至WebService压力测试 目中我们使用了Jmeter对webservice进行了压力測试,Apache JMeter是Apache组织开发的基于Java的压力測试工具.用于对 ...
- (转)使用JMeter进行Web压力测试
使用JMeter进行压力测试 说到压力测试,一般第一反应都是LoadRunner.这个软件也确实是自动化测试的一个事实标准.无奈这个软件太过庞大,以及不能在MacOS上使用.我由于项目的需要,需要对一 ...
- jmeter简单得压力测试
Jmeter教程 简单的压力测试 Jmeter是一个非常好用的压力测试工具. Jmeter用来做轻量级的压力测试,非常合适,只需要十几分钟,就能把压力测试需要的脚本写好. 阅读目录 什么是压力测试 ...
随机推荐
- <<C++标准程序库>>中的STL简单学习笔记
0. 内容为个人学习笔记, 仅供参考, 如有错漏, 欢迎指正! 1. STL中的所有组件都是由模板构成的, 所以其元素可以是任意型别的. 组件有: - 容器: 管理某类对象的集合. 不同的容器有各自的 ...
- python可视化
1.折线图 import matplotlib.pyplot as plt x = [1,2,3,4,5] squares = [1,4,9,16,25] plt.plot(x,squares) pl ...
- 编写高质量代码改善C#程序的157个建议——建议133:用camelCasing命名私有字段和局部变量
建议133:用camelCasing命名私有字段和局部变量 私有变量和局部变量只对本类型负责,它们在命名方式也采用和开放的属性及字段不同的方法.camelCasing很适合这类命名. camelCas ...
- route -A inet6 增加下一跳 提示错误 SIOCADDRT: No route to host
1.增加前路由表: 2. route -A inet6 增加下一跳 提示错误 SIOCADDRT: No route to host 3.删除已有的下一条路由表项: 4.再次尝试 route -A i ...
- BZOJ 2038 小z的袜子(莫队)
Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...
- RobotFramework与Redis库连接
首先导入:RedisLibrary 具体写法 #连接Redis ${redis_conn} RedisLibrary.Connect To Redis ${DB_host} #获取验证码 ${smsV ...
- 为web文件夹添加IIS应用程序池用户权限
在文件夹或文件右键属性—>安全——>编辑——>添加——>输入IIS APPPOOL\应用程序池名,确定即可将IIS 7或7.5.8的应用程序池虚拟用户添加到权限控制里面,然后再 ...
- element-ui学习
1. 小技巧 使用导航路由 配置el-menu-item的index属性,如照片 也可使用数据动态配置导航菜单:参考 走马灯高度自适应 动态设置Carousel的height参数
- BZOJ 1562 [NOI2009] 变换序列
[NOI2009] 变换序列 [题解] 就是有一个序列,每个位置可以填两个数,不可重复,问最小字典序. 显然,可以建一个二分图,判合法就是找完美匹配. 那怎么弄最小字典序呢?有好多种解法,我这里给出了 ...
- 【Selenium专题】FAQ_浏览器_ChromeDriver版本导致报错
报错信息 Started ChromeDriver port=31984 version=23.0.1240.0 log=C:\workspace\test\chromedriver.log [063 ...