什么是JMeter
来自Jmeter官网的介绍。
https://jmeter.apache.org/
Apache JMeter™应用开源软件,100%纯Java应用程序,设计用于负载功能测试和性能测试。它最初是为测试Web应用程序而设计的,但后来扩展到其他测试函数中。
Apache JMeter 功能包括:
-
能够加载和测试许多不同的应用程序/服务器/协议类型:
Web的HTTP,HTTPS(java,Nodejs,PHP,ASP.NET,…)
SOAP / REST Webservices
FTP 文件传输协议
Database via JDBC
LDAP
Message-oriented middleware (MOM) via JMS
邮件传输协议 - SMTP(S), POP3(S) 和 IMAP(S)
本地命令或Shell 脚本
TCP
Java Objects
全功能测试IDE,允许快速记录测试计划(来自浏览器或本地应用程序),构建和 调试。
基于Java开发,支持Linux、Windows、MAC OSX等平台。
可以生成完整的动态HTML报告。
通过从最流行的响应格式、HTML、JSON、XML或任何文本格式提取数据的能力,可以轻松地进行相关性。
全多线程框架允许多线程并发采样,同时通过不同的线程组进行不同功能的同时采样。
缓存和离线分析/重放测试结果。
高度可扩展内核, 数据分析和可视化插件可扩展,可通过Maven、Gradle和Jenkins实现持续集成。
采用的技术
JMeter是一款Java桌面应用程序,它的用户界面采用Swing Java API实现。基于这两点,JMeter是一个跨平台工具,能够运行在任何安装了Java虚拟机的操作系统(Windows, Linux, Mac)的设备上。 它的框架支持并发和多线程或者线程组的执行。这对于配置负载测试和压力测试非常有用。 它是可扩展的,提供了大量的可用插件。 JMeter是Apache软件基金会下的一个子项目,是完全免费和开源的。
搭建Jmeter环境
参考链接:
开启Jmeter之旅 (1) - MAC下安装Jmeter
构建一个简单的Jmeter性能测试
了解了Jmeter,环境也已经搭建成功,下面开始构建一个测试计划,简述Jmeter测试过程。 使用Jmeter时,通常会遵循下面三个流程: 构建测试计划,负载测试运行、负载测试分析三个步骤,Let's start!
从模板创建测试计划
启动jmeter后,jmeter会自动生成一个空的测试计划,用户可以基于该测试计划模板建立自己的测试计划。
一、添加虚拟用户组
右击“测试计划”>添加>Threads(Users)>线程组。
什么是线程组?
JMeter是由Java实现的,并且使用一个Java线程来模拟一个用户,因此线程组(Thread Group)就是指一组用户的意思,换句话说一个线程组就是一组虚拟用户(virtual users),这些虚拟用户用来模拟访问被测系统。
线程组中常用到的一些设置
线程数:这里就是指虚拟用户数,默认的输入是“1”,则表明模拟一个虚拟用户访问被测系统,如果想模拟100个用户,则此处输入100。
Ramp-Up 时间 (秒):虚拟用户增长时长。不明白别着急,举个例子:比如你测试的是一个考勤系统,那么实际用户登录使用考勤系统的时候并不是大家喊1、2、3 - 走起,然后一起登录。实际使用场景可能是9点钟上班,那么从8:30开始,考勤系统会陆陆续续有人开始登录,直到9:10左右,那么如果完全按照用户的使用场景,设计该测试的时候此处应输入40(分钟)* 60(秒)= 2400。但是实际测试一般不会设置如此长的Ramp-Up时间,原因嘛,难道你做一次测试要先等上40分钟做登录操作?一般情况下,可以估计出登录频率最高的时间长度,比如此处可能从8:55到9:00登录的人最多,那这里设置成300秒,如果“线程数”输入为100,则意味着在5分钟内100用户登录完毕。
循环次数:该处设置一个虚拟用户做多少次的测试。默认为1,意味着一个虚拟用户做完一遍事情之后,该虚拟用户停止运行。如果选中“永远”,则意味着测试运行起来之后就根本停不下来了,除非你把它强制终止。
关于线程组选项的说明
线程(用户)菜单下,有三个添加线程组的选项,名字不一样, 创建之后,其界面是完全一样的。之前的版本只有一个线程组的名字。现在多一个setUp theread Group 与terDown Thread Group
- setup thread group
一种特殊类型的ThreadGroup的,可用于执行预测试操作。这些线程的行为完全像一个正常的线程组元件。不同的是,这些类型的线程执行测试前进行定期线程组的执行。
- teardown thread group
一种特殊类型的ThreadGroup的,可用于执行测试后动作。这些线程的行为完全像一个正常的线程组元件。不同的是,这些类型的线程执行测试结束后执行定期的线程组。
可能你还是不太理他们与普通的线程组有什么不同。 如果您用过junit,想必你不会对setup ,teardown这2个字眼陌生。 即时每用过,也没关系。 熟悉loadrunner的应该知道,loadrunner的脚本除了action里是真正的脚本核心内容,还有初始化“环境”的初始化脚本和测试完毕后对应的清除信息的脚本块。 那么这里 setup thread group 和 teardown thread group 就是分别指这两部分。 其实从本质上来看,他们并没有什么不同。
- thread group(线程组)
这个就是我们通常添加运行的线程。通俗的讲一个线程组,,可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。线程组中包含的线程数量在测试执行过程中是不会发生改变的。
二、添加被测页面
接下来的一步就是要加入实际被测页面,右击“线程组” > “添加” > “Sampler” > “HTTP请求”。
接下来需要设置一下“HTTP请求” Sampler的属性,如下所示:
1)名称:输入“Jmeter”,就是被测试网页的描述性文字
2)服务器名称或IP:被测服务器的网站名字,也可以是IP地址。剩下的属性可以按照被测系统的属性按需配置,现在都可以为空。
目前脚本已经创建完成,点击“保存”按钮,保存创建的测试计划脚本。
负载测试运行
点击下图的“启动”按钮,可以运行此测试计划了。
点击启动后,很快就执行完了,但是我们从窗口并没有看到执行过程和结果。那如何进行分析呢?
负载测试分析
注意,直接点击运行后,JMeter 窗口没有看到运行过程和结果,我们可以打开 选项 - 日志查看,查看运行日志,
JMeter的log通过log4j2.xml配置文件进行配置,文件目录: /usr/local/Cellar/jmeter/5.0/libexec/bin/log4j2.xml,可以调整log级别,logger元素。更多信息可以参考Apache Log4j 2 Configuration页面。
当然,日志看起来有点费劲儿,测试出现问题,通过日志查,太不直观了,别急,JMeter提供了“监听器”让用户来观察测试结果。
如下图所示,右击“线程组” > “监听器” > “察看结果树”来查看性能测试过程中请求和响应信息。添加完毕后,保存测试脚本,再次运行。
运行测试完毕之后,点击“察看结果树” > “Jmeter”,在取样结果下,可以看到测试过程中一些有用的信息,比如发送请求的信息和响应数据等。接下来可以试着改一下“线程组”里的“线程数”为10,就是模拟10个用户访问。测试公网地址,数值不要改太大。
好了,目前已经完成了一个Jmeter测试用例的创建、执行和分析过程,入门很简单。
参考连接