Jmeter教程

  • Post author:
  • Post category:其他


J

meter(一)基础介绍

参考书籍:段念《软件性能测试与案例剖析》——第二版

推荐一本书《零成本实现web性能测试——基于Apache—jmeter》,主要内容是一些关于jmeter的实战使用,想学习的可以去看看。。。

jmeter是一款优秀的开源性能测试工具,目前最新版本3.0版本,官网文档地址:

http://jmeter.apache.org/usermanual/index.html


一、优点

1、开源工具,可扩展性非常好

2、高可扩展性,用户可自定义调试相关模块代码

3、精心简单的GUI设计,小巧灵活

4、完全的可移植性和100%纯java

5、完全swing和轻量组件支持(预编译的HAR使用javax.swing.*)包

6、完全多线程框架,允许通过多个线程并发取样以及单独的线程对不同的功能同时取样

7、支持脚本取样器


二、安装及下载

这里附一个最新的jmeter官网下载地址:


http://jmeter.apache.org/download_jmeter.cgi

该链接是3.0版本的jmeter安装包

jmeter本身不需要安装,只需要配置好JDK环境,然后在在jmeter文件中的bin文件中打开jmeter.bat文件即可

最新版本,建议配置的JDK最好用1.7及以上版本


三、基础构成


1、组成部分

1)负载发生器:产生负载,多进程或多线程模拟用户行为

2)用户运行器:脚本运行引擎,用户运行器附加在进程或线程上,根据脚本模拟指定的用户行为

3)资源生成器:生成测试过程中服务器、负载机的资源数据

4)报表生成器:根据测试中获得的数据生成报表,提供可视化的数据显示方式·


2、主要概念


2.1测试计划(test plan)

描述一个性能测试,包含本次测试所有相关功能


2.2.threads(users)线程

Setup thread group:

一种特殊类型的线程,可用于执行预测试操作。即执行测试前进行定期线程组的执行

Teardown thread group:

一种特殊类型的线程,可用于执行测试后动作。即执行测试结束后执行定期的线程组

以上两个线程组,举个例子:loadrunner的脚本除了action里是真正的脚本核心内容,还有初始化“环境”的初始化脚本和测试完毕后对应的清除信息的脚本块,与其对应

Thread group:

通常添加使用的线程,一般一个线程组可看做一个虚拟用户组,其中每个线程为一个虚拟用户


2.3测试片段(test fragment)

2.5版本之后新增的一个选项,是一种特殊的线程组,在测试树上与线程组一个层级,但是它不被执行,除非它是一个模块控制器或者被控制器所引用时才会被执行


2.4控制器

Jmeter有2种控制器:取样器(sampler)和逻辑控制器(Logic Controller)

作用:用这些原件驱动处理一个测试

1)取样器(Sampler)

是性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元,JMeter 原生支持多种不同的sampler

如 HTTP Request Sampler 、 FTP  Request Sampler 、TCP  Request Sampler 、JDBC Request Sampler 等

每一种不同类型的 sampler 可以根据设置的参数向服务器发出不同类型的请求。

Java Request Sampler 和 Beanshell Request Sampler 是两种特殊的可定制的 Sampler (暂不讨论)

2)逻辑控制器(Logic Controller)

包含两类原件:

一类是控制Test Plan中Sampler节点发送请求的逻辑顺序控制器,常用的有:If Controller、Swith Controller、Loop Controller、Random Controller等

另一类是用来组织和控制Sampler节点的,如Transaction Controller、Throughput Controller等


2.5监听器(Listener)



对测试结果进行处理和可视化展示的一系列组件,常用的有图形结果、查看结果树、聚合报告等

以上的五类原件就可以构成一个简单的性能测试脚本

下面再介绍几种jmeter提供的其他组件:


2.6配置原件(Config Element)

用于提供对静态数据配置的支持。CSV Date Set Config可以将本地数据文件形成数据池(Date Pool),而对应于HTTP Request Configuration

和TCP Request Sample等类型的Configuration元件则可以修改这些Sample的默认数据等


2.7定时器(Time)

用于操作之间设置等待时间,等待时间使性能测试中常用的控制客户端QPS的手段,jmeter定义了Constant Times、

Constant Throughput Times、Guass Ramdon Times等不同类型的Times


2.8断言(Assertions)

用于检查测试中得到的响应数据等是否符合预期,Assertions一般用来设置检查点,用以保证性能测试过程中的数据交互与预期一致


2.9前处理器(Pre Processors)

用于在实际请求发出之前对即将发出的请求进行特殊处理。

例如:Count处理器可以实现自增操作,自增后生成的的数据可以被将要发出的请求使用,而HTTP URL Re—Writing Modifier处理器则可以实现URL重写,

当URL中有sessionID一类的session信息时,可以通过该处理器填充发出请求实际的sessionID。


2.10后处理器(Post Processors)

用于对Sampler发出请求后得到的服务器响应进行处理。一般用来提取响应中的特定数据(类似loadrunner中的关联)。

例如:Regular Expression Extractor用于提取响应数据中匹配某正则表达式的数据段,并将其填充在参数中,Xpath Extractor则可以用于提取响应数据中通过给定Xpath值获得的数据。


jmeter(二)录制脚本

对大多数刚开始接触性能测试的人来说,代码功力可能不是太好,我们可以通过工具,录制脚本来进行测试,以达到我们的目的

一般来讲,录制脚本有两种方法


一、利用badboy进行脚本录制


1、下载安装

badboy官网地址:

http://www.badboy.com.au


提示:

官网下载时候会有用户邮件验证的,直接continue跳过,下载即可


安装:

和一般的Windows安装程序没区别,无脑下一步就行;安装完成后一般都会在桌面和开始菜单里面有badboy的快捷方式,如果没有,在badboy安装目录下找到badboy.exe文件,双击启动即可


启动:

启动badboy之后,界面如下


2、录制


1)

如上图,在地址栏(红色标注区域)中输入你需要录制的web应用的URL,这里以http://www.baidu.com为例子


2)

点击开始录制按钮(地址栏上方圈出来的地方)开始录制


3)

开始录制后,你可以在badboy内嵌的浏览器(界面右侧)对被测应用进行操作,所有操作过程都会记录在界面左侧的编辑窗口(黄色标注区域)

录制的脚本并不是一行行代码,而是一个web对象,有点类似于loadrunner中VuGen中的tree view视图


4)

录制完成后,点击工具栏中的停止按钮(绿色标注区域),完成脚本的录制


5)

点击file→save或者export to jmeter,将文件保存为jmeter的脚本格式:.jmx;启动jmeter,打开刚录制保存的文件,就可以进行测试了


二、利用jmeter代理服务器进行脚本录制


1、启动jmeter:

在测试计划中添加线程组,线程组中添加逻辑控制器→录制控制器


2、工作台:

添加非测试元件→http代理服务器


3、端口(代理服务器监听端口):

设置为8080(一般来说)

目标控制器:测试计划——线程组

分组选择:每个组放入一个新的控制器


4、http代理服务器:

右键单击,添加定时器→高斯随机定时器(告知jmeter在其生成的http请求中自动增加一个定时器)

定时器会使相应的取样器被延迟:上一个请求发送被响应且延时指定时间后,下一个被定时器影响的取样请求才会被发送

如果在代理服务器中使用了高斯随机定时器,则应在其中的

固定延迟偏移

里添加:

${T}

:用于自动引用记录的延迟时间


5、

打开浏览器,网络设置,将局域网设置中的代理服务器设为localhost,端口设置为8080


6、

代理服务器配置后之后,点击启动,代理服务器就会开始记录所接受的http请求


7、

在浏览器地址栏输入需要测试的地址并进行相关操作,录制完成后,停止http代理服务器,在录制控制器上点击右键,保存录制的脚本

注意:别忘了将代理服务器设置恢复原样


8、

脚本录制完毕,启动jmeter,就可以进行测试了

jmeter是一个开源的性能测试工具,它可以通过鼠标拖拽来随意改变元件之间的顺序以及元件的父子关系,那么随着它们的顺序和所在的域不同,它们在执行的时候,也会有很多不同。

jmeter的test plan通过图形化的方式表达脚本,域代码方式的脚本不同,图形方式表达的脚本中无法使用变量和函数等描述元件的作用域,因此jmeter主要依靠test plan中元件的相对位置、

父子关系以及元件本身的类型来决定test plan中各元件的执行顺序;原件在test plan中的位置不同,可能导致该元件的行为有很大差异。(新版jmeter都可以自主选择语言,对号入座即可)


1、元件的作用域

jmeter中共有8类可被执行的元件(test plan和thread group不属于元件),其中,sampler(取样器)是不与其他元件发生交互的作用的元件,Logic Controller

(逻辑控制器)只对其子节点的sampler有效,而其他元件需要与sampler等元件交互。


Config Elements(配置元件):

影响其范围内的所有元件


Pre-porcessors(前置处理器):

在其作用范围内的每一个sampler元件之前执行


Timer(定时器):

对其作用范围内的每一个sampler有效


Post-porcessors(后置处理器):

在其作用范围内的每一个sampler元件之后执行


Assirtions(断言):

对其作用范围内的每一个sampler元件执行后的结果执行校验


Listener(监听器):

收集其作用范围内的每一个sampler元件的信息并且呈现出来

在jmeter中,元件的作用域是靠test plan的树形结构中元件的父子关系来确定的,其原则如下:


1)

sampler不与其他元件相互作用,因此不存在作用域问题


2)

Logic Controller只对其子节点中的sampler和Logic Controller作用


3)

除sampler和Logic Controller外的其他元件,如果是某个sampler的子节点,则该元件仅对其父节点作用


4)

除sampler和Logic Controller外的其他元件,如果其父节点不是sampler,则其作用域是该元件父节点下的其他所有后带节点(包括子节点,子节点的子节点等)


2、元件的执行顺序

在同一作用域范围内,test plan中的元件按照以下顺序执行:

1)

Config Elements

2)

Pre-porcessors

3)

Timer

4)

Sampler

5)

Post-porcessors

(除非Sampler得到的返回结果为空)

6)

Assirtions

(除非Sampler得到的返回结果为空)

7)

Listener

(除非Sampler得到的返回结果为空)

注意:Pre-porcessors、Post-porcessors和Assirtions等元件仅对Sampler作用,如在它们作用域内没有任何Sampler,则不会被执行;

如果在同一作用域范围内有多个同一类型的元件,则这些元件按照它们在test plan中的上下顺序依次执行。



版权声明:本文为jijerry原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。