一
JMeter概述
ApacheJMeter是什么?
ApacheJMeter是Apache组织的开放源代码项目,是一个100%纯Java桌面应用,用于压力测试和性能测量。它最初被设计用于Web应用测试但后来扩展到其它测试领域。ApacheJMeter可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,Java对象,数据库和查询,FTP服务器或是其它资源)的性能进行测试。JMeter可以用于在服务器,网络或对象模拟繁重的负载来测试它们提供服务的受压能力或者分析不同压力条件下的总体性能情况。你可以使用JMeter提供的图形化界面,分析性能指标或者在高负载情况下测试你的服务器 / 脚本 / 对象。
ApacheJMeter能做什么?
1、能够对HTTP和FTP服务器进行压力和性能测试,也可以对任何数据库进行同样的测试
2、完全的可移植性和100%纯Java
3、完全Swing的轻量级组件支持
4、完全多线程框架允许通过多个线程并发取样和通过单独的线程组对不同的功能同时取样
5、精心的GUI设计允许快速操作和更精确的计时
6、缓存和离线分析/回放测试结果
7、高可扩展性:
可链接的取样器允许无限制的测试能力
各种负载统计表和可链接的计时器可供选择
数据分析和可视化插件提供了很好的可扩展性以及个性化
具有提供动态输入到测试的功能
支持脚本编程的取样器
二
Jmeter环境的搭建
Jmeter在使用之前也需要安装JDK环境,如何安装JDK环境,可以先翻看我们的高级教程。
JDK文章链接:软件测试| APP测试 —— Appium 的环境搭建及工具安装教程。
里面介绍了如何安装配置JDK,需要说明的一点是JDK的版本需要和Jmeter版本匹配,版本对应关系如下表:
下载软件:
Jmeter官网下载地址:http://jmeter.apache.org/download_jmeter.cgi
在官网界面,点击zip下载链接。直接下载即可。
注:本次演示界面以老版本为演示素材,同学们下载的时候下载最新版本就ok。
安装配置:
Jmeter的安装非常简单,无需详细的安装,只需要解压后放在一个目录下,然后配置环境变量即可。例如,我们把解压后的目录放在D盘
下面进行环境变量,首先打开计算机属性页面,打开路径如下图
在属性界面,依次点击“高级系统设置”—“高级”—“环境变量”—“新建”,新建环境变量,命名为JMETER_HOME,其路径设置为Jmeter实际存放路径
然后修改CLASSPATH,在后面添加
;%JMETER_HOME%/lib/ext/ApacheJMeter_core.jar;%JMETER_HOME%/lib/jorphan.jar;在变量path后面加上%JMETER_HOME%\bin
配置完成后在cmd输入:jmeter和jmeter–v测试一下是否配置正确!
如下图,输入Jmeter后,成功自动打开JMeter,表示配置正确。
三
Jmeter界面和菜单介绍
新打开的Jmeter界面背景颜色默认是黑色,相信很多同学也是看不习惯的。
可以依次选择工具栏的【Options】→【LookandFeel】来调整我们习惯的界面,这里笔者选择的是Windows→【Chinese(Simplified)】。
同时,我们也发现界面为全英文的,相信很多同学都看不明白,也看不习惯。不过请放心,界面我们可以把它调成中文版界面。
依次选择工具栏的:
【Options】→【ChooseLanguage】→【Chinese(Simplified)】就可以切换成中文简体了,只不过这只是临时修改(估计是Jmeter的一个bug),要想永久修改,需要手动修改配置文件。修改Jmeter的bin目录下的jmeter.properties
用记事本打开后,将language的值设置为zh_CN,保存修改即可。
操作界面介绍:
01
测试计划(TestPlan)
用来描述一个性能测试,包含与本次性能测试所有相关的功能。也就说本的性能测试的所有内容是于基于一个计划的。下面看一下一个计划下面都有哪些主要的功能模块(右键单击“测试计划”弹出菜单)。
02
线程组(ThreadsUsers)
虽然有三个添加线程组的选项,名字不一样,创建之后,其界面是完全一样的。之前的版本只有一个线程组的名字。现在多了setupthreadGroup与terdownThreadGroup:
1)、setupthreadgroup一种特殊类型的ThreadGroup的,可用于执行预测试操作。这些线程的行为完全像一个正常的线程组元件。不同的是,这些类型的线程执行测试前进行定期线程组的执行。
2)、teardownthreadgroup一种特殊类型的ThreadGroup的,可用于执行测试后动作。这些线程的行为完全像一个正常的线程组元件。不同的是,这些类型的线程执行测试结束后执行定期的线程组。可能你还是不太理他们与普通的线程组有什么不同。如果您用过junit,想必你不会对setup,teardown这2个字眼陌生。即时每用过,也没关系。熟悉loadrunner的应该知道,loadrunner的脚本除了action里是真正的脚本核心内容,还有初始化“环境”的初始化脚本和测试完毕后对应的清除信息的脚本块。那么这里setupthreadgroup和teardownthreadgroup就是分别指这两部分。其实从本质上来看,他们并没有什么不同。
3)、threadgroup(线程组)这个就是我们通常添加运行的线程。通俗的讲一个线程组,,可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。线程组中包含的线程数量在测试执行过程中是不会发生改变的。
03
测试片段(TestFragment)
测试片段是在2.5版本之后新加的一个选项。
测试片段元素是控制器上的一个种特殊的线程组,它在测试树上与线程组处于一个层级。它与线程组有所不同,因为它不被执行,除非它是一个模块控制器或者是被控制器所引用时才会被执行。
04
取样器(Sampler)
取样器(Sample)是性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元,JMeter原生支持多种不同的sampler,如HTTPRequestSampler、FTPRequestSample、TCPRequestSample、JDBCRequestSampler等,每一种不同类型的sampler可以根据设置的参数向服务器发出不同类型的请求。
05
逻辑控制器(LogicController)
逻辑控制器,包括两类元件:
一类是用于控制testplan中sampler节点发送请求的逻辑顺序的控制器,常用的有如果(If)控制器、switchController、RuntimeController、循环控制器等。
另一类是用来组织可控制sampler来节点的,如事务控制器、吞吐量控制器。
06
配置元件(ConfigElement)
配置元件(configelement)用于提供对静态数据配置的支持。CSVDataSetconfig可以将本地数据文件形成数据池(DataPool),而对应于HTTPRequestSampler和TCPRequestSampler等类型的配制无件则可以修改Sampler的默认数据。
07
定时器(Timer)
定时器(Timer)用于操作之间设置等待时间,等待时间是性能测试中常用的控制客户端QPS的手端。类似于LoadRunner里面的“思考时间”。JMeter定义了BeanShellTimer、ConstantThroughputTimer、固定定时器等不同类型的Timer。
08
前置处理器(PerProcessors)
用于在实际的请求发出之前对即将发出的请求进行特殊处理。例如,HTTPURL重写修复符则可以实现URL重写,当RUL中有sessionID一类的session信息时,可以通过该处理器填充发出请求的实际的sessionID。
09
后置处理器(PostProcessors)
用于对Sampler发出请求后得到的服务器响应进行处理。一般用来提取响应中的特定数据(类似LoadRunner测试工具中的关联概念)。例如,用正则表达式可以从响应数据中提取出我们想要的数据。
10
断言(Assertions)
断言用于检查测试中得到的相应数据等是否符合预期,断言一般用来设置检查点,用以保证性能测试过程中的数据交互是否与预期一致。
11
监听器(Listener)
这个监听器可不是用来监听系统资源的元件。它是用来对测试结果数据进行处理和可视化展示的一系列元件。图行结果、查看结果树、聚合报告。都是我们经常用到的元件。到此,我们已经简单了解了Jmeter的基本组成元件,后续我们通过设置参数和聚合报告来执行一个简单的性能测试。
的元件。到此,我们已经简单了解了Jmeter的基本组成元件,后续我们通过设置参数和聚合报告来执行一个简单的性能测试。