一.JMeter的体系结构、运行原理

【备注:本文参考:《全栈性能测试修炼宝典JMeter实战》】

一.JMeter简介

1.开源免费、具有扩展性,JMeter是使用率最高、最全面、成本较低的性能测试工具之一;

2.JMeter可以对Web应用进行测试,同时也提供了Web录制功能;

3.另外还支持Java请求、JMS、EJB、WebService、JDBC、FTP、LDAP、SMTP、Junit、Mail、MongoDB、JSR223等的测试。基本上我们常见的应用类型都可以用JMeter进行测试。另,JMeter可根据特定测试需求开源扩展功能;

4.JMeter支持Socket协议的测试。也很方便用来进行性能测试自动化。

二.JMeter体系结构

1.元件:类似于HTTP请求、事务控制器、响应断言等,就是一个元件;

2.组件:一组元件的集合(一个或者多个),如:逻辑控制器中有事务控制器、仅一次控制器、循环控制器等,就是元件;但是他们被归类到逻辑控制器中,逻辑控制器就是组件;

3.JMeter的体系结构:

一.JMeter的体系结构、运行原理_第1张图片

x1~x5:是负载模拟的一个过程,使用这些组件来完成负载的模拟;

x1:选择协议,模拟用户请求,检查服务器响应是否正确,然后收集结果信息;

x2:完善测试脚本,包括参数化,关联等

x3:控制测试脚本业务逻辑

x4:集合点,模拟用户并发

x5:用户数,一个线程代表一个用户;

Y1:可以理解为选择协议,包含负载模拟部分,负责模拟用户请求;

Y2:可以理解为检查点,结果验证部分,负责验证结果正确性;

Z:可以理解为监听器,负责结果的收集,监听器不仅可以放在线程组里面,也可以放在线程组外面;

4.取样器:用来模拟用户操作,向服务器(被测试系统)发出HTTP请求,WEBService(SOAP/XML-RPC Request)请求或者JAVA请求等。(包含各种协议:HTTP、FTP、JAVA、JMS、LDAP、MAIL、MongoDB、SMTP、SOAP、TCP、Junit等,还支持BeanShell脚本);取样器访问路径:【测试计划】---》【线程组】---》【Sampler】

一.JMeter的体系结构、运行原理_第2张图片

5.断言:断言用来验证结果是否正确,(Loadrunner也叫:检查点),即:判断请求是否成功返回且是否符合要求;断言元件多,如:响应断言、XML断言、BeanShell断言;常用的是响应断言;

【测试计划】---》【断言】

一.JMeter的体系结构、运行原理_第3张图片

6.监听器:JMeter的测试结果需要添加监听器来收集,JMeter结果收集程序的设计模式就是监听器模式。JMeter的监听器有两个任务。1)添加结果监听,并且可以保存测试结果到文件,这些结果数据可以供再次分析使用。2)展示结果,JMeter可以以表格及图形的形式展现结果,方便测试人员分析测试结果。【测试计划】---》【监听器】

一.JMeter的体系结构、运行原理_第4张图片

JMeter的【取样器】【断言】【监听器】组合在一起就可以帮我们完成发生请求、验证结果及记录结果三项工作;

7.前置处理器:

在测试脚本开发过程中,我们在请求发送前可能会做一些环境或者参数的准备工作,就是使用前置处理器完成。(如:在对数据库进行操作前需要先建立一个数据库连接,就是使用前置处理器实现。)【测试计划】--》【前置处理器】

一.JMeter的体系结构、运行原理_第5张图片

8.配置元件

性能测试中为了模拟大量用户操作,往往需要参数化,JMeter的参数化可以通过配置元件来实现,如:CSV Data Set Config,它可以帮助我们从文件中读取测试数据。另外JMeter也提供了众多的函数(通过函数助手可以查看)来帮我们生成动态数据。除此之外,配置元件还可以用来记录服务器的返回数据,比如Http Cache Manager 自动记录服务器返回的Cache信息。简而言之,取样器为取样器提供预备数据,然后由取样器发出请求。【测试计划】---》【配置元件】

一.JMeter的体系结构、运行原理_第6张图片

9.后置处理器

后置处理器一般放在取样器之后,用来处理服务器的返回结果,比如一个Web应用程序,我们登录后会返回一个SessionID,这个SessionID在登录之后的业务操作中会作为验证条件,验证用户是否合法登录了。利用取样器模拟这个请求时就需要带上这个属性,它是由服务器返回的;此时可以用正则表达式提取器来提取数据。【测试计划】--》【后置处理器】

后置处理器就是专门用来响应数据做处理的元件。大家听说过关联一词,JMeter的关联就是通过后置处理器来完成的。

【前置处理器】【配置元件】【后置处理器】都是为取样器提供数据支持的,取样器关注的是业务逻辑。

一.JMeter的体系结构、运行原理_第7张图片

10.控制器

举例:收邮件,登录一次邮箱,即可查看多封邮件。要在JMeter中实现改场景,所以我们需要控制登录次数。JMeter逻辑控制器中的仅一次控制器即可完成。逻辑控制器有很多,可以各种组合来实现各个需求。【测试计划】--》【线程组】--》【逻辑控制器】

一.JMeter的体系结构、运行原理_第8张图片

11.定时器

模拟用户负载,再要实现同一时刻发送;定时器可以实现。定时器种类有很多,功能也不同。【测试计划】--》【线程组】--》【定时器】

一.JMeter的体系结构、运行原理_第9张图片

12.线程组

性能测试需要模拟大量用户负载的情况,线程组就是用来完成这个工作;一个线程一个用户。线程组的设置十分简单。除了设置线程数以外,还可以设置运行时长,定时运行等。第三方插件(JMeter Plugin)的扩展也让JMeter的场景设计更加丰富。【测试计划】--》【Threads(Users)】

一.JMeter的体系结构、运行原理_第10张图片

三.JMeter的运行逻辑

1.利用取样器模拟用户请求;如果需要做一些数据、环境的准备,那么就使用配置元件;如果需要对响应的数据做处理,即使用后置处理器。

2.控制运行;使用线程组来设置运行场景,利用逻辑控制器来控制业务(实际上即是控制取样器)。

3.收集结果,利用断言来验证测试结果,利用监听器来收集显示测试结果。

此外,JMeter也支持远程运行,弥补单台机器负载不够的情况。远程运行时远程负载机要运行Agent(jmeter-server.bat来启动。)一.JMeter的体系结构、运行原理_第11张图片

说明:JMeter与LoadRunner有差异的;Loadrunner可以选择进程方式或者线程方式来运行。JMeter则是以线程的方式来运行;JMeter是运行在JVM虚拟机上的,每个进程的耗费比LoadRunner的进程耗费较大。

(1)控制机:运用多台JMeter负载机进行性能测试时,被选中作为管理机的那台机器即是控制器。JMeter控制机也可参与脚本运行。同时也担负着管理负载机指挥远程负载机运行的任务,并且收集远程负载机的测试结果。

(2)负载机:向被测试应用服务器发起负载的机器,控制机同时也是一台负载机。JMeter负载机受控制机管理。负载机受控制机管理首先要启动一个客户端程序(Agent:jmeter-server.bat),这样控制机才可以接管负载机。控制机把运行脚本的发送到远程负载机,但如果运行的测试脚本有参数文件及jar包时,控制机并不能把它们发送到远程负载机,这种情况就需要手动拷贝了。若在利用JMeter做性能自动化测试时不能这样,我们可以用工具实现自动拷贝。

(3)远程运行逻辑:1.远程负载机首先启动Agent程序,待控制机链接;2.控制机连接上远程负载机;3.控制机发送指令(脚本及启动命令)启动线程;4.负载机运行脚本,回传状态(包括测试结果);5.控制机收集结果并显示。

四.JMeter测试计划要素

a.要素一:脚本中测试计划只能一个

b.要素二:测试计划中至少有一个线程组

c.要素三:至少要有一个取样器(即:测试目的就是要模拟用户请求,没有取样脚本就毫无意义)

d.要素四:至少有一个监听器(即:测试结果用例衡量系统性能,我们需要从结果中分析性能)

注意:其它元件都是为这些要素服务的。

你可能感兴趣的:(#,Jmeter,#)