JMeter基本原理是建立一个线程池,多线程运行取样器产生大量负载,在运行过程中通过断言来验证结果的正确性,通过监听器来记录测试结果。如果取样器中有参数化的需求,可以通过配置元件或前置处理器来完成。如果有关联需求,可以通过后置处理器来完成。如果想要设置运行场景,比如模拟多少用户,运行多长时间,就设置线程组。如果想要模拟并发场景,可以利用定时器来设置;如果想要控制业务的执行逻辑,比如登录只执行一次,可以通过控制器来完成。
以下内容对JMeter的组成部分进行了详细的介绍。
1.Sampler取样器
用来模拟用户操作,向服务器发出Http请求、WebService(SOAP/XML-RPCRequest)请求或者Java请求等。我们可以把Http请求元件看成是一个没有界面的浏览器,它可以发送Http请求,接收服务器的响应数据。
Sampler的访问路径:【Test Plan】---- 【Thread Group】 ---- 【Sampler】
2.Assertions断言
断言用来验证结果是否正确。说白了就是用一个预设的结果(值、表达式、时间长短等条件)与实际结果匹配,匹配到则成功,反之失败。
断言的访问路径:【Test Plan】---- 【Assertions】
3.Listerner监听器
Jmeter的测试结果需要添加监听器来收集,Jmeter结果收集程序的设计模式就是监听器模式。Jmeter的监听器有两个任务。
(1)添加结果监听,并且可以保存测试结果到文件,这些结果数据可以供再次分析和使用。
(2)展示结果,Jmeter可以以表格及图形的形式展现结果,方便测试人员分析测试结果。我们在开发测试脚本时,不可避免需要调试,监听器也提供了辅助(比如查看结果树,我们可以在其中看到请求与响应的数据)。
监听器的访问路径:【Test Plan】---- 【Listerner】
Sampler取样器,Assertions断言、Listerners监听器组合在一起就可以帮我们完成发送请求、验证结果以及记录结果三项工作。
4.Pre Processors前置处理器
在脚本开发过程中,我们在请求发送前可能会做一些环境或者参数的准备工作,那么我们可以在前置处理器中来完成这些工作。比如,我们在对数据库进行操作前需要先建立一个数据库连接,那么前置处理器就可以完成这个功能。
前置处理器访问路径:【Test Plan】---- 【Pre Processors】
5.Config Element配置元件
性能测试中为了模拟大量用户操作我们往往需要做参数化,Jmeter的参数化可以通过配置元件来完成,比如CSV Data Set Config,它可以帮助我们从文件中读取测试数据。另外JMeter也提供了众多的函数(通过函数助手可以查看到)来帮我们生成动态数据。当然配置元件的作用不仅于此,它还可以用来记录服务器的返回数据,比如Http Catche Manager,自动记录服务器返回的Catche信息。简而言之它为取样器提供预备数据,然后由取样器发出请求。配置元件访问路径:【Test Plan】---- 【Config Element】
6.Post Processors后置处理器
后置处理器一般放在取样器之后,用来处理服务器的返回结果,比如一个Web应用程序,我们登录后会返回一个SessionID,这个SessionID在登录之后的业务操作过程中会作为验证条件,验证用户是否合法登录了。我们利用取样器模拟这个请求时就需要带上这个属性。Jmeter帮我们提供了元件,比如正则表达式提取器,它支持正则表达式的方式来提取数据。
后置处理器就是专门用来对响应数据做处理的元件,JMeter的关联就是通过后置处理器来完成的。
访问路径:【Test Plan】---- 【Post Processors】
前置处理器、配置元件、后置处理器都是为取样器提供数据支持的,取样器关注的是业务逻辑。
7.Logic Controller控制器
我们在收邮件时,只需要登录一次邮箱即可查看多封邮件。如果这个场景我们要在JMeter中实现,我们需要控制登录的次数。JMeter逻辑控制器中的仅一次控制器即可以完成。当然了,控制器不只只有这一个,还有很多其它的控制器来完成我们的各种需求。
控制器的访问路径:【Test Plan】---- 【Thread Group】----【Logic Controller】
8.Timer定时器
为了足够真实的模拟用户负载,我们有时会需要模拟这些请求在同一时刻发送,就好像把大家集合在一条起跑线上,然后一声令响,同事起跑。那么我们此时需要一个集合的功能,JMeter中可以通过定时器来完成这个需求。当然了,定时器可不只有这一个功能,定时器种类有很多,每一种代表了不同的功能。、
访问路径:【Test Plan】---- 【Thread Group】---- 【Timer】
9.Threads (Users)线程组
性能测试要模拟大量用户负载的情况,线程组就是用来完成这个工作的,在此元件中我们可以设置运行的线程数(就是模拟多少用户,一线程一用户)。除了设置线程数以外,还可以设置运行时长,定时运行等。另外第三方插件(Jmeter Plugin)的扩展也让JMeter的场景设计更加丰富。
访问路径:【Test Plan】---- 【Threads (Users)】
10.Test Fragment
Test Fragment是一个辅助的组件,在此节点下几乎可以放置任何JMeter测试元件,但它一般不会被运行,它的作用主要有以下两种:
(1)在脚本开发过程中可以用来备份元件
(2)Test Fragment下的元件可以被模块控制器调用,我们可以利用它来模块化请求(把一个业务封装成一个方法供复用)供模块控制器调用