目录
Jmeter简介
JMeter是一款开源桌面软件,用来模拟用户负载来完成性能测试工作。JMeter可以对web进行测试,提供web录制功能,可以扩展JMeter功能来满足特定的测试需求。
名词解释
元件:代表JMeter工具菜单中的一个子菜单,比如HTTP请求,事务控制器,响应断言等,就是一个元件。
组件:一组元件的集合(一个或者多个)。比如逻辑控制器中有事务控制器、循环控制器等,这些都是元件,但是它们把归类到逻辑控制器中,逻辑控制器就是组件。
Jmeter体系结构图
Jmeter的基本原理
Jmeter的基本原理是建立一个线程池,多线程运行取样器产生大量负载,在运行过程中通过断言验证结果的正确性,通过监听器来记录测试结果。
- 如果取样器中有参数化的需求,可以通过X2中的配置元件或者前置处理器来完成。
- 如果有关联需求,可通过后置处理器来完成。
- 如果想要设置运行场景,如模拟多少用户,运行多长时间,可以设置线程组。
- 如果想要模拟并发场景,可以利用定时器来设置。
- 如果想要控制业务的执行逻辑,如登录操作只运行一次,可以使用控制器来完成。
JMeter组成部分
X1 【取样器】
用来模拟用户操作,向服务器(被测试系统)发出Http请求、WebService(SOAP/XML-RPC Requests)请求或者Java请求等。
取样器的访问路径:【测试计划】—— 【线程组】—— 【Sampler】
X1 【断言】
用来验证结果是否正确,类似于LoadRunner中的检查点。可以帮助我们来判断请求是否成功返回且是否符合要求。就是用一个预设的结果(值、表达式、时间长短等条件)与实际结果匹配,匹配到则成功,反之失败。常用的是响应断言,对于复杂的断言可以通过BeanShell脚本来完成。
断言的访问路径:【测试计划】—— 【断言】
X1 【监听器】
收集JMeter的测试结果,JMeter结果收集程序的设计模式就是监听器模式。JMeter的监听器有两个任务:
1.添加结果监听,并且可以保存测试结果到文件,这些结果数据可以供再次分析使用。
2.展示结果,JMeter可以以表格及图形的形式展示结果,方便测试人员分析测试结果。在开发测试脚本时,不可避免需要调试,监听器也提供了辅助(比如查看结果树,我们可以在其中看到请求与响应的数据)
监听器的访问路径:【测试计划】—— 【监听器】,详情如下图:
【取样器】、【断言】、【监听器】组合在一起就可以帮助我们完成发送请求、验证结果及记录结果三项工作。
X2 【前置处理器】
在取样器发送请求之前做一些环境或参数的准备工作,例如:在对数据进行操作前需要建立一个数据库连接,那么前置处理器可以完成这个工作。
前置处理器的访问路径:【测试计划】—— 【前置处理器】
X2 【配置元件】
取样器提供预备数据、然后由取样器发出请求;还可以用来记录服务器的返回数据,比如:Http Cache Manager,自动记录服务器返回的Cache信息。
性能测试中为了模拟大量用户操作往往需要参数化,JMeter中的参数化可以通过配置元件来完成,比如:CSV Data Set Config,可以帮助我们从文件中读取数据。另外JMeter也提供了从多函数来帮助我们生成动态数据。
配置元件的访问路径:【测试计划】—— 【配置元件】,:
X2 【后置处理器】
一般放在取样器之后,用来处理服务器的返回结果。(专门用来对响应数据做处理的元件,JMeter中的关联也是通过后置处理器来完成)
比如一个Web程序在登录后返回一个SessionID,这个SessionID在登录之后的业务过程中会做为验证条件,验证用户是否合法登录了。我们利用取样器模拟这个请求时就需要带上这个属性,那么如何获取呢? 首先我们要知道这个SessionID从哪里来?——它是由服务器返回的。我们需要用什么工具获取它?JMeter提供了元件,比如正则表达式提取器,它支持正则表达式的方式来提取数据。
访问路径:【测试计划】——【后置处理器】,:
- X3 【控制器】
逻辑控制器可以控制采样器(samplers)的执行顺序。由此可知,控制器需要和采样器一起使用,否则控制器就没有什么意义了。放在控制器下面的所有的采样器都会当做一个整体,执行时也会一起被执行。
比如在收邮件时,只需要登录一次邮箱就可以查看多封邮件,这个场景在JMeter中只需要使用控制器中的“一次控制器”就可以控制登录的次数。
控制器的访问路径:【测试计划】——【线程组】—— 【逻辑控制器】
X4 【定时器】
用于在模拟大量用户在同一时间处理系统业务,起到集合的功能(常用于并发测试)
访问路径:【测试计划】—— 【线程组】—— 【定时器】
X5 【线程组】
用于模拟大量用户负载,此元件中可以设置运行的线程数(就是模拟多用户,一线程就是一个用户)
访问路径:【测试计划】——【线程组】
测试片段(Test Fragment)
辅助组件,可以在脚本开发过程中用来备份元件,Test Fragment下的元件可以被模块控制器调用,可以利用他来模块化请求供模块化控制器调用
Jmeter运行原理
在Jmeter中是以线程的方式来运行,运行在JVM虚拟机上的Jmeter通过线程组来驱动多个线程运行测试脚本对被测服务发起负载,买个负载机上都可以运行多个线程组。Jmeter运行场景不仅可以以GUI方式完成,还可以使用命令行。命令行运行的方式对于负载机的资源消耗更小。
Jmeter远程运行架构图
控制机:运用多台Jmeter负载机进行性能测试,被选中作为管理机的那台机器即是控制机。Jmeter控制机也可以参与脚本的运行;同时它也担负着管理远程负载机指挥负载机运行的任务,并且收集远程负载机的测试结果。
- 负载机:向被测试应用服务器发起负载的机器,控制机同时也是一台负载机。若负载机想要被控制机控制需要运行一个客户端程序(Agengt:jmeter-server.bat)。启动后,控制机便可以把运行的脚本隐蔽的发送到远程负载机。但是如果运行的测试脚本有参数文件及依赖的jar包时,控制机并不能把他们发送到远程负载机,这种情况就需要手动copy了。不过也可以通过工具来实现自动copy。
- 远程运行逻辑:
远程负载机首先启动Agent程序,待控制机连接;
控制机连接上远程负载机;
控制机发送指令(脚本及启动命令)启动线程;
负载机运行脚本,回传状态(包括结果);
控制机手机结果并显示;
Jmeter测试计划要素
JMeter中一个脚本即是一个测试计划,也是一个管理单元,JMeter的请求模拟与并发数(设置线程数,一个线程代表一个虚拟用户)设置都子脚本文件中一起设置。
要素一:脚本中测试计划只能有一个
要素二:测试计划中至少要有一个线程组
要素三:至少要有一个取样器
要素四:至少要有一个监听器
JMeter工具目录介绍
- Bin:放置了各项配置文件(比如日志设置、JVM设置等)、启动文件(JMeter启动快捷方式,报告生成快捷方式,Heap Dump快捷方式等)、启动jar包、示例脚本等。
- Docs:放置了JMeter API离线文档,Web方式。
- Extras:JMeter辅助功能,提供与Ant、Jenkins集成的可能性,我们可以利用Ant与Jenkins来构建性能测试自动化构架。Ant可以利用xsl脚本把XML格式的测试结果以HTML方式展示。
- Lib:JMeter组件以jar包的形式放置在lib/ext目录下,需要扩展的JMeter组件的jar包放在此目录即可。JMeter支持运行Junit测试类,其测试包放在lib/junit目录下。
- licenses:JMeter licenses相关声明信息放在此文件夹,全部是文本文件。对测试没有任何实际意义。
- printable_docs:JMeter的离线帮助文件放置目录,是我们学习JMeter的绝好向导。
- LICENSE:License说明文件。
- NOTICE:版权声明。
- README:JMeter简明介绍。
Jmeter安装使用
- 1、本机配置好Java环境变量
- 2、官网下载压缩包,在任意目录下解压
- 3、进入到Jmeter的bin目录下,双击jmeter.bat启动
总结
Jmeter运行逻辑如下三部分:
第一:利用取样器模拟用户请求,如果需要做一些环境及数据的准备,使用前置处理器,如果需要对响应的数据做处理,使用后置处理器;
第二:控制运行;使用线程组来设置运行场景,利用逻辑控制器来控制业务;(实际就是控制取样器)
第三:收集结果,利用断言来验证测试结果,利用监听器来收集显示测试结果。
同时,Jmeter也支持远程运行,弥补单台机器负载不够的情况,远程运行时远程负载机需要运行Agent.