基本概念
JMeter的测试计划(Test Plan)呈树状结构,树里面有多种元素类型,树状结构的元素之间有的是有继承关系的(其原理有点类似log4j)。下面简述一下元素类型:
1、ThreadGroup
顾名思义就是线程组,测试必须有一个ThreadGroup元素作为基础(否则就没有测试线程在跑了),这个元素可以配置跑多少个线程、每个线程循环多少次,所有线程数的总启动时间(Ramp-up period)等等。
2、Controller
包括Logical Controller和Sampler,前者用来作一些逻辑上的控制,例如轮换、条件、循环等等。Sampler就是真正“干活”的“取样器”,例如“HTTP Request”,就是拿来执行一个HTTP请求的。
3、Listener
Listener对请求过程进行监听,可以简单理解为获取结果的东东。例如Simple Data Writer,可以把结果写到一个文本文件里(其实所有Listener都可以写数据到文件里),还有View Results in Table,就是把结果显示在表格里。
4、 Timer
用来控制执行流程中的时间延迟等功能。
5、 Assertion
断言,加到Sampler里面可以对返回的结果进行判断,例如判断HTTP返回结果里面是否含有某个字符串。如果断言为真,JMeter会标记请求为成功,否则标记为失败。
6、 Configuration Element
配置用的元素,很有用。由于测试计划是树状和有继承关系的,可以在高层次指定一个Configuration Element,低层次的相关Sampler如果没有显式地指定配置,就继承高层次的配置信息。(跟log4j很像吧?)
7、 Pre-Processor/Post-Processor Elements
用来在Sampler运行前和运行后作一些预处理和后处理工作的。例如动态修改请求的参数(预处理),从返回信息里面提取信息(后处理)等等。
http请求基本使用步骤:
1.建立测试计划
测试计划描述了执行测试过程中JMeter的执行过程和步骤,一个完整的测试计划包括一个或者多个线程组(Thread Groups)、逻辑控制(Logic Controller)、实例产生控制器(Sample Generating Controllers)、侦听器(Listener)、定时器(Timer)、比较(Assertions)、配置元素(Config Elements)。打开JMeter时,它已经建立一个默认的测试计划,一个JMeter应用的实例只能建立或者打开一个测试计划。现在我们开始填充一 个测试计划的内容,这个测试计划向一个jsp文件和一个servlet发出请求,我们需要JMeter模拟五个请求者(也就是五个线程),每个请求者连续 请求两次,
2.增加负载信息设置:
1. 选中可视化界面中左边树的Test Plan节点,单击右键,选择Add'Thread Group,界面右边将会出现他的设置信息框。
2. Thread Group有三个和负载信息相关的参数:
Number of Threads: 设置发送请求的用户数目
Ramp-up period: 每个请求发生的总时间间隔,单位是秒。比如你的请求数目是5,而这个参数是10,那么每个请求之间的间隔就是10/5,也就是2秒
Loop Count: 请求发生的重复次数,如果选择后面的forever(默认),那么 请求将一直继续,如果不选择forever,而在输入框中输入数字,那么请求将重复 指定的次数,如果输入0,那么请求将执行一次。
根据我们演示例子的设计,我们应该将Number of Threads设置为5,Ramp-up period设置为0(也就是同时并发请求),不选中forever,在Loop Count后面的输入框中输入2,设置后的屏幕截图如下:
3.增加默认http属性(可选)
实际的测试工作往往是针对同一个服务器上Web应用展开的,所以Jmeter提供了这样一种设置, 在默认Http属性设置需要被测试服务器的相关属性,以后的http请求设置中就可以忽略这些相同参数的设置,减少设置参数录入的时间。我们这里将采用这种属性。你可以通过下面的步骤来设置默认http属性:
1. 选中可视化界面中左边树的Test Plan节点,单击右键,选择Add'config element'http request defaults,界面右边将会出现他的设置信息框。
2. 默认http属性的主要参数说明如下:
protocal:发送测试请求时使用的协议
server name or ip:被测试服务器的ip地址或者名字
path: 默认的起始位置。比如将path设置为/jmeter,那么所有的http请求的url中都将增加/jmeter路径。
port number: 服务器提供服务的端口号
我们的测试计划将针对本机的Web服务器上的Web应用进行测试,所以protocal应该是http,ip使用localhost,因为这个web应 用发布的context路径是/jmeter,所以这里的path设置为/jmeter,因为使用Tomcat服务器,所以port number是8080。
4.增加Http请求
现在我们需要增加http请求了,他也是我们测试的内容主体部分。你可以通过下面的步骤来增加性的http请求:
1. 选中可视化界面中左边树的Thread Group节点,单击右键,选择Add'sampler'http request,界面右边将会出现他的设置信息框。
2. 他的参数和2.5中介绍的http属性差不多,增加的属性中有发送http时方法的选择,你可以选择为get或者post。
我们现在增加两个http 请求,因为我们设置了默认的http属性,所以和默认http属性中相同的属性不再重复设置。设置后的屏幕截图如下:
5.增加Listener
增加listener是为了记录测试信息并且可以使用Jmeter提供的可视化界面查看测试结果,里面有好几种结果分析方式可供选择,你可以根据自己习 惯的分析方式选择不同的结果显示方式
小结:
JMeter用于进行功能或者性能测试,通过使用JMeter提供的功能,我们可以可视化的制定测试计划:包括规定使用什么样的负载、测试什么内容、传入的参数,同时,他提供了好多种图形化的测试结果显示方式,使我们能够简单的开始测试工作和分析测试结果。
java对象的测试应用:
使用Jmete中的Java Reuest,可以对编写的java类或者方法进行测试,Jmeter没有自带编译器,需要借助第三方编译器才能实现,因此使用Java编译器编写测试代码,将测试代码和需要测试的类都放入Jmeter的lib文件夹下,然后再Jmeter中添加Java Reuest,就可以进行相应的测试了。
1. 编写java测试用例
针对"Java请求"类型的测试,需要基于JMeter测试框架编写测试用例。
1.eclipse新建一个普通java工程
2.将jmeter安装目录的lib下所有jar包导入工程
3.将测试的类需要的jar包导入工程
4.新建一个Java class,如例子所示:
1、选中主界面左侧的“测试计划”,右键菜单->添加->Threads(Users)->线程组
2、再选中刚才新增的"线程组",右键菜单->添加->Sampler->Java请求
3、再选中刚才新增的"Java请求",右键菜单->添加->监视器->聚合报告
(聚合报告即是性能测试结果报告)
4、在"Java请求"选项卡中可以选择你想测试的类名;在"线程组"选项卡中可以输入想循环的次数及并发线程数
5、一切就绪后,点击菜单栏上的"运行"->启动,JMeter即会按第4步的配置开始运行,选中"聚合报告"即可查看实时状态
数据库服务器
数据库服务器在大多数企业项目中是不可缺少的,对于它进行压力测试是为了找出:数据库对象是否可以有效地承受来自多个用户的访问。这些对象主要是:索引、触发器、存储过程和锁。通过对于SQL语句和存储过程的测试,JMeter 可以间接的反应数据库对象是否需要优化。
JMeter 使用 JDBC 发送请求,完成对于数据库的测试。
其中:
在实际的项目中,至少有2种类型的JDBC请求需要关注:select语句和存储过程。前者反应了select语句是否高效,以及表的索引等是否需要优化;后者则是反应存储过程的算法是否高效。它们如果效率低下,必然会带来响应上的不尽如人意。对于这两种请求,JDBC请求的配置略有区别:
Select语句