JMeter是纯Java语言开发。开源、免费是其重要的特点。
起初就是用于性能测试,主要Web端的性能。
后来扩展到接口测试、回归测试等功能测试领域。
拥有界面,支持多语种。界面还比较完善,适合初学者掌握和使用。
![36cb1496745fed87f2e71acf0c01d1d2.png](https://i-blog.csdnimg.cn/blog_migrate/22e6573926dc8482cebe4d800e589bc1.png)
JMeter无需安装,只需要安装JDK(Java开发环境)和配制好即可。
下载后直接解压缩。
使用Jmeter进行测试的话,需要哪些组件或者内容的支持?下面一一列出:
1、创建测试计划。
类似于很多开发工具中的项目或者工程。
![db3772e59c8d76303104331bfdcb7113.png](https://i-blog.csdnimg.cn/blog_migrate/c706862c87b5c9f173a5b4c89ff173f6.png)
2、创建线程组(用户)。
主要模拟用户的请求和操作。
![48f75524a15870c8d0ca3263279b10c3.png](https://i-blog.csdnimg.cn/blog_migrate/f2c455b1dacc3fdada26804ac4ed438f.png)
3、添加取样器。
获取被监控的数据类型。(模拟用户发送各种数据请求)
![d8ceb7c0c6c968fb344fac3dcceed780.png](https://i-blog.csdnimg.cn/blog_migrate/b2e4c101e363cf4ca3452a244a0bd1d3.png)
4、添加断言。(自动化测试的重要操作之一)
对服务器的相应结果进行判断。常用的断言是响应断言和JSON断言。
![37a597ce7881bfc54681896c9ecf7155.png](https://i-blog.csdnimg.cn/blog_migrate/3cbcbac6ab4d93e3d912a2a364e02134.png)
5、添加监听器。
以不同形式显示请求的结果。常用的是查看结果树。
![e1347c491a6462884072710906d95991.png](https://i-blog.csdnimg.cn/blog_migrate/ae642eaad30688b472976c8adaf0b127.png)
以上内容构建完毕后,完善请求内容。发送请求。
![de4608f1bbcb362bb87d82f7e06e8ec5.png](https://i-blog.csdnimg.cn/blog_migrate/f132dd545368d8255c401b4c1e5adf64.jpeg)
查看结果。并且直接查看服务器响应值。
![486b95ddaad3d36b6bf0d5623051ce3c.png](https://i-blog.csdnimg.cn/blog_migrate/213b930c82dbfe00fc8d3a65a9741824.jpeg)
后续如果需要,可以添加参数化,使得测试脚本更加完善。
使用JMeter进行脚本录制
可以像Loadrunner一样,录制很多操作步骤和系统服务器数据。
Jmeter自己自带脚本的录制,但是使用比较麻烦,需要配置的内容(浏览器、代理),上课不演示。
有另外一款软件-Badboy,可以专门录制请求,生成脚本,供Jmeter使用。
![a9620abaae67540f9f95e9c4f55d6114.png](https://i-blog.csdnimg.cn/blog_migrate/9ffbfb8e8bd6397170640acf74739f16.png)
启动Badboy。看他的界面。
![7342eec0896cc02a14ca1866a3a560b2.png](https://i-blog.csdnimg.cn/blog_migrate/2eca7fc64f253a13b1f7164cb57865d4.jpeg)
录制一个脚本。
开始录制,点击 【开始】按钮即可。在地址栏中输入要打开的网站的地址。点【跳转】按钮,打开页面,操作步骤会生成相应的内容。
![fdc5f6c6576dde780fd47ad59f70881f.png](https://i-blog.csdnimg.cn/blog_migrate/6de66d7fc83bf76a646ea48db1b4dc99.png)
在页面中操作的过程中,badboy会记录下客户端浏览器和服务器的数据交互。(类似抓包工具)
![2357a7fe7b3fc8af57747956c8d0ed50.png](https://i-blog.csdnimg.cn/blog_migrate/709976119a0faa7eb714e92dc190901f.jpeg)
将脚本导出成为JMeter可运行的JMX文件。
![b219421fa046a5fdade2015cd21b3a21.png](https://i-blog.csdnimg.cn/blog_migrate/92894249a174142c136a0f6fe9ab87d7.jpeg)
保存导出内容。
![5f813f9aa66e29d5c736cfec7a2f6b0f.png](https://i-blog.csdnimg.cn/blog_migrate/91846134584ce6896a035ee396eccfa3.png)
使用JMeter打开。
![7e266b6d748645a658bcfcd8f13e00dc.png](https://i-blog.csdnimg.cn/blog_migrate/31014bfa1cfe0eb763e0303a1fe71680.jpeg)
查看打开后的内容和效果。
![7322c15c63667724bc11a4c17e1873fc.png](https://i-blog.csdnimg.cn/blog_migrate/4f47b6cbb2152f088eafea2d13773936.jpeg)
脚本中有很多规范化的内容:
1)cookie管理、用户自定义变量、HTTP请求Header管理
2)脚本的集中管理。放在一个Loop Controller中。
3)每一个请求能够自动的解析内容,包括协议、端口号、请求中的参数以及参数值。
设置设计性能测试的场景。
1)设计足够多的虚拟用户。(类似于Loadrunner中的运行时设置、Controller中虚拟用户设置、加压减压策略)
![3c0f4acb62efa16cdc82ead5f168e4f9.png](https://i-blog.csdnimg.cn/blog_migrate/b0a0acedb004f8c98057ea0ceffb9296.png)
①线程组的名称:自定义。见名知义,方便查找和维护即可。
②备注。
③请求失败后采取的措施:
继续;
开始下一个线程循环;
停止线程;
停止测试;
立即停止;
④设置线程组属性:
线程(虚拟用户)的数量;
用户加载的持续时间(类似于Loadrunner的加压策略);
循环次数(类似于Loadrunner中的 Run logic)
⑤使用相同的线程进行迭代(可选,可以不选)
⑥延迟线程的创建直到被需要
⑦指定线程的生命周期
![024f59be7eb5296e180d6d2b07e1b2d5.png](https://i-blog.csdnimg.cn/blog_migrate/218cf5ecf654c92396d5e4aac714de28.png)
持续时间。
启动延迟。
2)足够多的运行时间。
线程的属性设置中完成。
3)服务器相关数据监控。
JMeter要完成服务器相关数据监控,需要三个组件和插件。
(自带的官网下载三个文件:分别用来显示监控数据和信息;服务端要有监控的代理)
JMeter实现第三方的美化工具(将测试过程中的数据,美化显示)
如下图需要两个文件:
![2bc81ccefccb364be036107eeba290ee.png](https://i-blog.csdnimg.cn/blog_migrate/4ab905e9cc4db51f5bcadc0e176fb3de.png)
JMeter-plugins-Manager文件作用是进行JMeter的插件管理。
ServerAgent文件的作用是在被监控的服务器上,运行,控制器中进行配制后可以查看监控的资源和数据。
一、在控制器上安装性能监控的插件。
将文件JMeter-plugins-Manager-1.3.jar复制到JMeter的lib/ext目录下。
![7bbbc28ff1f21f16e66080cfd092bd5b.png](https://i-blog.csdnimg.cn/blog_migrate/2f5c9643722b93d136c2914cb69f53cc.png)
启动JMeter。在选项菜单中,选择 Plugins Manager,打开进行管理。
![c094c9b9de70466df31d80245094efd9.png](https://i-blog.csdnimg.cn/blog_migrate/e175f32dfcce122324acb414717268b3.png)
在可选的插件库中,找到PerfMon插件。
![988c7cd7746724b08ccb64ed1724ffcd.png](https://i-blog.csdnimg.cn/blog_migrate/737b18eb741708be8adffcac02a32d5c.png)
勾选该插件,然后点击 apply changs and Restart JMeter。成功重启后,打开JMeter。
创建一个测试项目,添加一个jp@gc……的监听器,监听服务端的性能指标。
![c8343ac1e55044089737207943cf9342.png](https://i-blog.csdnimg.cn/blog_migrate/d2e3b1aae3275ff160c4b38be7c0258d.jpeg)
创建一个测试项目,包含HTTP请求,包两个监听器,一个查看结果数,一个监控被测服务器的性能。
![b938cf052dfd7c0d4097d9ee3f14e985.png](https://i-blog.csdnimg.cn/blog_migrate/94cb23c6a26200060bf39b28d744b8f5.jpeg)
设置被监控的主机的IP地址和端口号。
![82779a054de193a7bd3b0e4e124205ba.png](https://i-blog.csdnimg.cn/blog_migrate/7be1e8a57313f0ba8336c01409968a2b.png)
通过 add row 按钮,添加被监控主机的详细信息。
IP地址;服务端口号;被监控的性能指标。
二、被监控端进行的设置
上传文件 ServerAgent到被监控服务器的主机。
解压缩该文件,并启动其中的 StartAgent.bat文件
![51118c85e44165f9f5109d1707fdb188.png](https://i-blog.csdnimg.cn/blog_migrate/0777512fb066748f8e23f90169c30309.png)
启动成功,如下所示:
![f5922f4df5a035137ff6258b7770ce4d.png](https://i-blog.csdnimg.cn/blog_migrate/2837b53b95fc7a62d84e855511d5f692.png)
三、回到控制器,发送请求,查看服务器性能的指标变化。
通过一次请求的数据,发现服务端尚未开始发送数据,客户端请求就断开了连接。如下所示。
![96a36d0754fdcf00f0f6ef6a6c882f6a.png](https://i-blog.csdnimg.cn/blog_migrate/b1fdfe73e6cd3c348aefd98f295e741c.png)
如果需要持久的监控服务器性能,必须不断地发送请求。
控制器设置请求发送频率。将线程设置的Loop count设置为:永远。
![07d19c23a18d138ac9817381e4abc3e6.png](https://i-blog.csdnimg.cn/blog_migrate/6f723b5bde9371bebde6758765e1b00a.png)
再次启动测试请求。
![19d45e5ae7d856c17389ba52e330b97f.png](https://i-blog.csdnimg.cn/blog_migrate/3dc74bfef91354abb9dc9519d96a4e39.jpeg)
如果需要监控更过的性能数据,就在 Add row中添加其他监控指标。
![a9de6f640b2e664d01dd3a24bc2ff393.png](https://i-blog.csdnimg.cn/blog_migrate/31a18e95fe342636441918e6d7075e0d.jpeg)
总结:通过监控服务器的变化,收集测试数据。达成监控性能指标的目的。
4)事务
事务是性能测试中衡量TPS,事务成功率等性能指标的基础。
JMeter中,使用Transaction Controller进行事务的划分。
![df7fda63304016342efef09d490fdb79.png](https://i-blog.csdnimg.cn/blog_migrate/579e8daa6cc5c838e2ce2a611c1ea55d.png)
事务本身不是请求,所以运行中,没有数据发送,只是内容的统计。
![66f24ffdade381c3e399904f6cebb666.png](https://i-blog.csdnimg.cn/blog_migrate/bef6a8697196c6d77230da65362dcc62.jpeg)
5)JM中的同步定时器(Loadrunner中的集合点)
JMeter中的并发有两种方式展现。
一个就是虚拟用户的启动时候,1秒加载的线程数。就相当于并发。
另一个方式就是使用定时器-Synchronizing Timer:同步定时器。
![bed2300ce171f7c01e5382b1a3533420.png](https://i-blog.csdnimg.cn/blog_migrate/7a5eddf00aed182ead885e9898fe6273.png)
添加之后,查看定时器的页面。
![eb75d585adfd37ea5689309da94ac30e.png](https://i-blog.csdnimg.cn/blog_migrate/cb14c5ecf774a81d9ea4cb9e76a293d7.png)
①定时器名称:见名知义。
②备注:
③模拟用户分组的数量:就是并发的数量。
④超时(毫秒级):1000ms=1s
运行脚本,查看和分析结果。
![b318d2f325b4339afe9e6b0f2ead4966.png](https://i-blog.csdnimg.cn/blog_migrate/119ab2fe8844852de4fb89475ce68be7.jpeg)
分析结果:
1)先加载3个用户(第1个直接加载,第2个是2秒后,第3个就是4秒),在第一次放行(同步定时器)之前,一共有三个线程
![f8837abb81db6b5af7f29aefab55d09d.png](https://i-blog.csdnimg.cn/blog_migrate/35d5503e92caae04ad9ae422934e2ba4.png)
2)上图就表示了,本次程序释放线程的简单情况。
6)多机联合负载设置。
专业的角度:我们称为分布式负载(压力)测试。
表现形式:就是一台控制器,控制多台负载机器(发生器),向服务器发起请求。
![68888eb80cdfe8be79f0c3730b164d96.png](https://i-blog.csdnimg.cn/blog_migrate/0a619b3c71bc3c6dffbff29d5caf7a9d.png)
采用这种测试形式的原因:一台计算机难以搞垮服务器。为了真实的模拟高压或者大量请求,更多的计算机和请求数会更好。
JMeter中实现方式,首先配置控制器,还要有多台负载机(被控制的)。
先配置负载机。先远程连接到负载机。配置JMeter的一个代理。
首先编辑JMeter的配置文件。
![382e4e93e7631f397f4d7dce40738f45.png](https://i-blog.csdnimg.cn/blog_migrate/aca2a68a5bccb0945726611c6f8059da.jpeg)
编辑属性文件中的两项内容,以及获取负载机的IP地址。
![12bd13fb13087f22ae27fa775ad41919.png](https://i-blog.csdnimg.cn/blog_migrate/5878ad83f52415e3c5885a139d63906a.jpeg)
修改remote_hosts=127.0.0.1,并且去掉开头行的 #
修改server_port=1099,并且去掉开头行的 #
在控制器中,生成一个控制器密钥。在控制器的JM的bin目录中,找到下面画框的文件。(本身是一个Windows批处理文件,可以直接运行)
![939a340f40a092dc07ea3b51e13e4697.png](https://i-blog.csdnimg.cn/blog_migrate/2c0c0c5b6267482576c4dbfa99fabbf6.png)
在文件中输入相关指示信息。所有地方回复:y;最后可以不输入口令,直接点击回车。
文件运行后,会生成一个密钥文件。
![f0680d776b7ed2e633bddf90ad8f73ab.png](https://i-blog.csdnimg.cn/blog_migrate/c6d38341413bd8946c521c3991a59fa4.png)
将密钥文件复制到被控计算机的相关目录下。(具体是哪里呢?答:就是被控计算机的JM的bin目录下)
![293ed5624af9e050c35b955bbe0f92d6.png](https://i-blog.csdnimg.cn/blog_migrate/3415ada22a3fda5a07c931202ae9167d.jpeg)
被控计算机启动一个JMeter-Server服务。表明接受被代理。
![28e7ec296aa793395eaee6991e48b8bc.png](https://i-blog.csdnimg.cn/blog_migrate/9631bd1c07196798d6e9fdda0af3cade.png)
如果启动成功,则会显示如下:
![21da3917a579f3789356602c3034efd8.png](https://i-blog.csdnimg.cn/blog_migrate/ceb2cf0e4a2fdc4d0dcc423bb4f04701.png)
最后在控制器的JM中,找到配置文件,设置被控计算机的IP地址和端口号。
![8a8615153e19a5e3997d06ee5d9eaf10.png](https://i-blog.csdnimg.cn/blog_migrate/5eaf7a0d04d31914d2ad8866ba5f07bf.png)
需要控制多少台计算机,就在remote_hosts后面追加,每一个都用逗号(英文的)隔开即可。
控制器启动JMeter。在run菜单中 找remote Start,如果有前面添加的主机,说明配置文件没有问题。
![27918e1d9cd19f66956e4e625f215998.png](https://i-blog.csdnimg.cn/blog_migrate/e42d9482b4af5b2c3fa757204d2ed2e6.png)
点击被控机器的IP地址。(在被控机上查看服务运行状态)
![c56f61990d997b07b06ca5d0bd920b1a.png](https://i-blog.csdnimg.cn/blog_migrate/85930fd265ddecb958216965b068ce4e.jpeg)
如果被控机出现如上图所示的内容,(画框的部分),说明代理没有问题,且正在运行。运行结束后,显示Finish。
![36c3f827a34596fb60a9dfcf70f42578.png](https://i-blog.csdnimg.cn/blog_migrate/48376e3f0f7500e6681660d6e46eabc1.jpeg)
在控制器上查看运行结果。
![c4435282d779780b4a1b98879a079124.png](https://i-blog.csdnimg.cn/blog_migrate/2a72839ce1bd9ad4c0443c02b82c0796.jpeg)
注意:此处不是脚本错误。只是因为被控计算机无法联网,导致请求错误。
转化了被控机的IP之后,请求又可以正常发送。
![cdcce5bcd2effacdb891c3b9e5459175.png](https://i-blog.csdnimg.cn/blog_migrate/e12ee3f8e1e12a48cc291a9ac3f8eb78.jpeg)
7)IP欺骗技术是JMeter不支持。
使用JMeter查看结果。
监听器中通过表格方式查看。
![8987ff4936cd03ec62a4250a30b58506.png](https://i-blog.csdnimg.cn/blog_migrate/87b45852c76e28233fa83120495216bb.jpeg)
通过configure设置数据的存储内容。
![e3c2d3169aac0161d9b9e63356411e8d.png](https://i-blog.csdnimg.cn/blog_migrate/295252746c0233d3c1e39bcc67e1127d.jpeg)