利用JMeter进行性能测试
一、JMeter介绍
二、Jmeter安装
三、工作原理
四、脚本录制
五、运行JMeter进行测试
六、JMeter主要组件介绍
七、参数化设置
八、动态数据关联
九、使用插件进行服务器性能监控
十、JMeter中进行分布式测试
一、JMeter介绍
JMeter,一个100%的纯Java桌面应用,它是Apache组织的开放源代码项目,它是功能和性能测试的工具。JMeter可以用于测试静态或者动态资源的性能(文件、Servlets、Perl脚本、Java对象、数据库和查询、ftp服务器或者其他资源)。原先Jmemer是为Web/HTTP测试而设计的,但是它已经扩展以支持各种各样的测试模块。它和用于HTTP和SQL数据库(使用JDBC)的模块一起运送。它可以用来测试静止资料库或者活动资料库中的服务器的运行情况,可以用来模拟对服务器或者网络系统加以重负荷以测试它的抵抗力,或者用来分析不同负荷类型下的所有运行情况。它也提供了一个可替换的界面用来定制数据显示,测试同步及测试的创建和执行。
Jmeter的使用说明地址:http://jakarta.apache.org/jmeter/usermanual/index.html
JMeter 的特性:
a) 能够对HTTP和FTP服务器进行压力和性能测试, 也可以对任何数据库进行同样的测试(通过JDBC)。
b) 完全的可移植性和100% 纯Java。
c) 完全 Swing 和轻量组件支持(预编译的JAR使用 javax.swing.*)包。
d) 完全多线程 框架允许通过多个线程并发取样和 通过单独的线程组对不同的功能同时取样。
e) 精心的GUI设计允许快速操作和更精确的计时。
f) 缓存和离线分析/回放测试结果。
g) 高可扩展性
h) 可链接的取样器允许无限制的测试能力。
i) 各种负载统计表和可链接的计时器可供选择。
j) 数据分析和可视化插件提供了很好的可扩展性以及 以及个性化。
k) 具有提供动态输入到测试的功能(包括Javascrīpt)。
l) 支持脚本变成的取样器(在1.9.2及以上版本支持BeanShell)。
二、Jmeter安装
1.先安装JDK
JDK官网下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
根据自己的需求选择自己想要下载的JDK版本
这边以下载JDK1.8为例
安装JDK
安装JDk的步骤如下:
点击下载的JDK文件jdk-8u181-windows-i586.exe,点击下一步直至安装完成,然后开始配置环境:
点击我的电脑----属性----高级----环境变量----在系统变量中----点击新建,
变量名:JAVA_HOME 变量值:JDK的安装路径,如当前的安装路径是 D:\6.XN\Java\JDK\JDK1.8.1 变量名:CALSSPATH 变量值:.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar;
找到 path 变量名—>“编辑” 添加(变量之间用";"隔开):可以加在最前面 也可以加在最后面 最后面记得在前面加分号隔开,最前面记得在最后面加上分号隔开。
变量名:PATH
变量值:;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
将path应该添加的路径放在path的最后面,在Windows命令提示符(cmd)下验证 Java 是否成功:
java -version
如果有多个JDK路径的话,JAVA_HOME 的路径改掉就可以,指向你想要使用的JDK路径,所以以后如果要更新JDK的话 不一定需要卸载原先的JDK
安装jmeter是必须安装JDK的。
2.Jmeter官网下载地址:
http://jmeter.apache.org/download_jmeter.cgi
百度搜索Apache JMeter官网,点击进去之后,在页面左侧找到Download标签下的“Download Releases”,点击此标签,页面进入新的页面,点击此页面Binaries标签下的“apache-jmeter-4.0.zip”,下载jmeter,下载后解压文件
新增环境变量JMETER_HOME,填好路径之后,点击确定,
变量名:JMETER_HOME 变量值:Jmeter的安装路径 D:\6.XN\apache-jmeter-4.0 变量名:CLASSPATH 变量值:%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-2.0.jar;
找到jmeter安装bin目录中的jmeter.bat执行文件,执行,出现以下界面说明执行安装成功。
此时会弹出两个界面,一个是命令窗口,一个是JMeter窗口,意味着JMeter已经安装成功了,执行成功弹出的dos不可关闭
JMeter汉化
方法1:启动Jmeter找到 options ->choose language ->chinese(Simplified),但是设置完重新启动后还会变为默认英文。
方法2:永久汉化
在Jmeter的安装目录下的bin目录中找到 jmeter.properties这个文件,用文本编辑器打开,在#language=en下面插入一行language=zh_CN,这样,Jmeter就默认中文了。
2、更改界面背景:
选项->外观中多种风格可以选,具体颜色可以自行实验,更改外观后Jmeter需要重新启动才能生效。
在Jemter点击.bat之后启动不了,要在电脑的环境变量中增加 path 中增加 ;%SystemRoot%\system32;%SystemRoot%
三、工作原理
JMeter可以作为Web服务器与浏览器之间的代理网关,以便捕获浏览器的请求和Web服务器的响应,进而生成性能测试脚本。有了性能测试脚本,JMeter就可以通过线程组来模拟真实用户对Web服务器的访问压力。
因为 jmeter是运行在jvm虚拟机上的 ,进程开销比较大,所以jmeter是以线程来运行的
GUI模式运行测试脚本会对电脑的资源消耗较大,仅仅用来编写和调试测试脚本
资源有限的情况下 使用命令行模式去测试高并发和压力测试
jmeter的测试计划要素
测试计划、测试计划中至少要有一个线程组、线程组中至少要有一个取样器、必须要有一个监听器
四、脚本录制
①Web脚本录制:利用BadBoy进行脚本录制 利用JMeter的代理服务器功能进行脚本录制。
通过Badboy的官方网站(http://www.badboy.com.au)下载Badboy的最新版本,点击continue
点击“continue”后,就可以看到当前Badboy最新版本下载,对应版本点击download进行下载
安装Badboy。安装过程同一般的Windows 应用程序没有什么区别,安装完成后你可以在桌面和Windows开始菜单中看到相应的快捷方式——如果找不到,可以找一下Badboy安装目录下的Badboy.exe 文件,直接双击启动Badboy; 启动Badboy,你可以看到下面的界面。
在地址栏(图中红色方框标注的部分)中输入你需要录制的Web应用的URL——这里我们以http://www.baidu.com 为例 。
点击 开始录制 按钮(图中蓝色圆圈标注的部分)或者红色的圆形录制按钮开始录制。 开始录制后,你可以直接在Badboy内嵌的浏览器(主界面的右侧)中对被测应用进行操作,
所有的操作都会被记录在主界面左侧的编辑窗口中(图中黄色方框标注的部分)——在这个试验中,我们在baidu的搜索引擎中输入 JMeter 进行搜索。不过录制下来的脚本并不是一行行的代码,而是一个个Web对象——这有点像LoadRunner的VuGen中的Tree View视图; 录制完成后,点击工具栏中的“停止录制”按钮(图中紫色方框标注的部分),完成脚本的录制;
选择“File -> Export to JMeter”菜单,填写文件名“baidu.jmx”,将录制好脚本导出为JMeter脚本格式。
也可以选择“File -> Save”菜单保存为Badboy脚本; 启动JMeter并打开刚刚生成的测试脚本,就可以用JMeter进行测试了。
②Web脚本录制:《利用JMeter的代理服务器功能进行Web脚本录制》
jmeter的代理服务器的作用:
Web代理(proxy)服务器是网络的中间实体。 代理位于Web客户端和Web服务器之间,扮演“中间人”的角色。
本来你请求一个网络,是直接你的电脑->你要请求的网站,然后现在加了代理服务器,是先把网络发到代理服务器,那边去处理,你的电脑->代理服务器->你要请求的网站,作用就是可以操作数据
在测试计划中添加线程组,在线程组中添加逻辑控制器-录制控制器。
在工作台中添加非测试元件-HTTP代理服务器。 端口:即代理服务器的监听端口,我们设为8080。
目标控制器选择:使用录制控制器; 分组选择:每个组放入一个新的控制器。 分组: 对请求进行分组。“分组”的概念是将一批请求汇总分组,可以把url请求理解为组。
1.“不对样本分组”:所有请求全部罗列
2.“在组间添加分隔”:加入一个虚拟的以分割线命名的动作,运行同“不对样本分组”,无实际意义
3.“每个组放入一个新的控制器”:执行时按控制器给输出结果
4.“只存储每个组的第一个样本”:对于一次url请求,实际很多次http请求的情况,这个选项很好用,因为我们常常是不关心后面的那些请求的。
③App脚本录制:《利用JMeter的代理服务器功能进行app脚本录制》
“测试计划”中添加“线程组”; “工作台”中添加“HTTP代理服务器”;
配置代理服务器:Global Settings下面的端口配置:9988,HTTPS Domains配置:http://10.200.52.88,目标控制器配置:测试计划>线程组(端口:随意设置;
ip:电脑的ip)如右图设置 注意:电脑和手机处于一个局域网。电脑和手机连接共一个WIFI,或者电脑提供热点让手机连接
a、线程组
如果是录制方式打开的jmx脚本默认会场景线程组,如果是手工生成脚本则需要首先添加线程组,右键点击测试计划,选择添加,添加线程组,这里的线程组相当于loadrunner中的用户组。
十、JMeter中进行分布式测试
作为一个纯 JAVA 的GUI应用,JMeter对于CPU和内存的消耗还是很惊人的,所以当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至还会引起JAVA内存溢出的错误。
不过,JMeter也可以像 LoadRunner 一样通过使用多台机器运行所谓的代理来分担负载产生器自身的压力,并借此来获取更大的并发用户数,我们只需手动配置一下即可。
1、在所有期望运行JMeter作为 负载产生器的机器上安装JMeter,并确定其中一台机器作为 控制器,其他的机器作为 代理。然后运行所有 代理 机器上的JMeter-server.bat文件—假定我们使用两台机器172.20.80.47和172.20.80.68作为 代理; 2、在Controller 机器的JMeter安装目录下找到 bin 目录,再找到 jmeter.properties 这个文件,使用记事本或者其他文字编辑工具打开它;
3、在打开的文件中查找“remote_hosts=”这个字符串,你可以找到这样一行“remote_hosts=127.0.0.1”。其中的 127.0..0.1 表示运行JMeter代理的机器,这里需要修改为“remote_hosts=172.20.80.47,172.20.80.68”;
4、保存文件,并重新启动控制器机器上的JMeter,并进入启动 ->远程启动菜单项。就会看到我们刚才添加的两个代理的地址,选中即可运行,如果想同时启动所有代理,选择远程全部启动即可。 要进行分布式测试代理机器上需要添加环境变量,即添加用户变量JMETER_HOME=d:\jmeter,系统变量中的path中添加d:\jmeter\bin(假设jmeter放在d盘根目录下)。