性能测试工具Jmeter学习和使用
摘要: 在日常的开发中,软件测试人员能够对程序进行功能上的测试以确保用户的正常使用,但对于一个需要发布在服务器上供多用户同时使用的软件而言,还需要模拟多用户同时使用的场景,对站点进行性能测试。但安排100个人同时访问测试站点显然是不可行的,此时就需要一个像Jmeter这样的软件测试工具来模拟用户行为,进行性能测试。同时也可能出现一个进程中多个线程同时运行的情况,此时对其性能进行测试也是一个软件测试人员应当掌握的。
关键字: Jmeter,性能测试,测试计划
1 Jmeter安装
1.1 Jmeter介绍
Apache JMeter是一款开源测试工具,被设计为用于测试客户端/服务端结构的软件(例如web应用程序)。它可以用来测试静态和动态资源的性能,Jmeter可用于模拟大量负载来测试一台服务器、网络或者对象的健壮性或者分析不同负载下的整体性能。
Jmeter相较LoadRunner而言极为小巧,无需复杂的安装,但因为它是使用Java开发的工具,需要JDK环境。其功能强大,设计之初只是一个简单的web性能测试工具,但经过不段的更新扩展,现在可以完成数据库、FTP、LDAP、WebService等方面的测试。扩展性极强。它可以测试性能、接口、甚至可以通过加载浏览器驱动完成UI自动化的工作。
Jmeter不支持IP欺骗,这一点比起LoadRunner略显不足,而且Jmeter无法验证JS程序与页面UI,须与Selenium一起才能完成web2.0应用的测试。
1.2 安装
由于Jmeter是使用Java编写的,在安装前必须先确保电脑有Java的JDK和JRE。Java环境配置完成后,到官网下载所需要的Jmeter版本得到一个压缩包,在自己选择的文件目录下解压即可。
1.3 运行
进入解压文件夹内部的bin目录下,有ApacheJMeter.jar、jmeter.bat、jmeter.sh三个文件都可以用来启动Jmeter。其中,ApacheJMeter.jar是图形化启动入口,在各系统中都能运行,jmeter.bat可以在Windows系统下启动,jmeter.sh可以在Linux下命令行启动。但后两者启动后会出现一个控制台和图形界面,在使用图形界面的过程中必须一直保持开启控制台。为方便使用,建议由ApacheJMeter创建快捷方式到桌面。
在安装好后进行使用时可能会出现中文乱码的问题,将bin目录下的jmeter.properties第1062行代码注释取消,编码格式改为utf-8即可。
2 测试计划
进行测试前,在创建测试计划之后将测试计划进行保存,Jmeter可以保存整个测试计划或仅保存其中的一部分,保存时选择要保存的部分右键另存为即可。
2.1 线程组
线程组元素是任何测试计划的起点。所有控制器和取样器必须在线程组下。其他元素(例如,侦听器)可以直接放置在测试计划下,在这种情况下,它们将应用于所有线程组。顾名思义,线程组元素控制JMeter将用于执行测试的线程数。线程组的控件可以用来设置线程数、加速时还有执行测试的次数。
每个线程将完整地执行测试计划,并且完全独立于其他测试线程。多个线程用于模拟与服务器应用程序的并发连接。
在创建线程组时,会发现线程组分为了setUp线程组、tearUp线程组和线程组,查阅资料后对三种线程组进行简单介绍。
图 1 线程组
1)setUp线程组
一种特殊类型的线程组,可用于执行预测试操作。位于该线程组的线程会被先执行,等该线程组的线程全都执行完毕后再去执行其他线程组的线程。
2)tearUp线程组
一种特殊类型的线程组,可用于执行测试后动作。在其他线程组的线程都完成后,才会执行该线程组的线程。
3)线程组
这个就是我们通常添加运行的线程。通俗的讲一个线程组,可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。线程组中包含的线程数量在测试执行过程中是不会发生改变的。
2.2取样器
取样器被用来模拟用户的操作,实现向服务器或站点发出HTTP请求、WebService(SOAP/XML-RPC Request)请求或者Java请求等功能。我们可以把HTTP请求元件看成是一个没有界面的浏览器,它可以发送HTTP请求,接收服务器的响应数据。取样器是测试中向服务器发送请求、记录响应信息、记录响应时间的最小单元。JMeter提供了多种不同的取样器。如HTTP请求、FTP请求、JUnit请求、SMTP请求等。
图 2 取样器类型
2.3 监听器
监听器提供对JMeter运行时JMeter收集的有关测试用例的信息的访问。最常用的应该是"查看结果树"侦听器,用于显示取样器请求和响应的详细信息,包括每个线程的结果都可以在结果树中查看。
但使用时结果树只能查看与它同级别或低级别目录下的测试结果。
2.4 断言
断言用来验证结果是否正确,将一个预设的结果与实际结果匹配,匹配则成功,反之则失败。断言可以清楚地展示结果是否符合预期,方便测试人员快速地处理结果信息。
2.5 定时器
默认情况下,JMeter线程按顺序执行采样器而不会暂停。我们建议您通过将可用计时器之一添加到您的线程组来指定延迟。如果您不添加延迟,JMeter 可能会在很短的时间内发出过多的请求,从而使您的服务器不堪重负。
计时器可以使JMeter的每个采样器采样之前有一定的延迟时间。
如果您选择将多个计时器添加到线程组,JMeter 将获取计时器的总和并在执行计时器适用的采样器之前暂停该时间量。定时器可以作为采样器或控制器的子级添加,以限制它们应用到的采样器。
图 3 定时器类型
2.6 执行顺序
配置元素、预处理器、计时器、取样器、后处理器(除非SampleResult为null)、断言(除非SampleResult为null)、监听器(除非SampleResult为null)。
具体的区别在于计时器、断言、预处理器和后处理器只有在有适用的采样器时才被处理。逻辑控制器和采样器按照出现的顺序进行处理。其他测试元素根据其发现范围和测试元素的类型进行处理。[在一种类型中,元素按照它们在树中出现的顺序进行处理]。
例如,在以下测试计划中:
- 控制器
- n 后处理器1
- n 采样器1
- n 采样器2
- n 计时器1
- n 断言1
- n 预处理器1
- n 计时器2
- n 后处理器2
执行顺序为:
预处理器1->计时器1->计时器2->采样器1->后处理器1->后处理器2->断言1->预处理器1->计时器1->计时器2->采样器2->后处理器1->后处理器2->断言1
3 测试实例
设置了HTTP请求的默认值。由于所测试的项目是本人所编写的运行在本地端口的项目,所以其路径开头都是类似的http://192.168.43.127:8080/,其遵守的协议、IP地址和端口号乃至请求方式在很多情况下都是一致的,顾设置了HTTP请求的默认值,使得在之后的HTTP请求访问中都不在需要填写已设置默认值的信息栏,能够简化一些重复性的操作。
图 4 设置请求默认值
填写HTTP请求,由于编写的姓名路径比较简单,所以一个请求中没有无需填写路径,另一个请求下的路径只有一个user和不同的端口号9090.
图 5 HTTP请求HOME Page
图 6 后台数据请求
具体的查询结果在下图中的结果树部分已经详细显示,如图:
图 7 后台数据请求结果
图 8 HomePage请求结果
4 与LoadRunner的比较
角度 | Jmeter | LoadRunner |
---|---|---|
价格 | 开源软件,无需支付任何费用 | 商业软件,需支付相应费用以开通正版软件商品 |
安装 | 只需要将安装包解压,然后配置好相对的环境变量即可使用。简单快捷。 | 安装环境比较严谨,安装过程中可能会出现各种各样的问题报错 |
是否有IP欺骗功能 | 无 | 有 |
报表设计 | 报表较少,对于分析性能不足以作为依据,需要在相关的服务器上另外写脚本记录服务器性能 | 十分齐全,对分析性能不足时能提供很多的依据 |
性能配置 | 主要通过增加线程组的数量,或者设置循环的次数来达到增加并发用户 | 可以通过Controller场景设置进行配置达到配置不同的性能测试需求 |
是否适用于web测试 | 可以做web程序的功能测试,利用Jmeter中的样本取样,可以做灰盒测试 | 可以,但相较而言更加的复杂,故主要用于作性能测试 |
文档支持 | Jmeter为开源软件,官方的文档比起专业的测试软件要略差一些,需要有自己的理解 | 作为商业软件,有开发公司的技术支持和网上的大量资料 |
5 实验感想
在目前接触到的常见的开发中,对于一个站点的性能测试一直是目前的我们所了解到的测试的死角。学生阶段还处在开发与纠错的阶段,对于只能完成一个简单网页的学生而言,性能方面的测试虽然可能还比较陌生,但这并不能代表其重要性就如所知晓的一样低。当前的学习其实还不足以掌握Jmeter各种操作,还能说有一扇关于性能测试的门已经被推开,但内里的情况还需自己去探索。
参考文献
的我们所了解到的测试的死角。学生阶段还处在开发与纠错的阶段,对于只能完成一个简单网页的学生而言,性能方面的测试虽然可能还比较陌生,但这并不能代表其重要性就如所知晓的一样低。当前的学习其实还不足以掌握Jmeter各种操作,还能说有一扇关于性能测试的门已经被推开,但内里的情况还需自己去探索。
参考文献
[1]. JMeter用户手册,https://dlcdn.apache.org//jmeter/,2022年12月25日