您的位置:首页 > 其它

JMeter进行web测试详解

2016-01-19 09:48 232 查看
Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域。 它可以用于测试静态和动态资源例如静态文件、Java小服务程序、CGI脚本、Java 对象、数据库, FTP服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来在不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。

1. 下载JMeter

下载安装JDK

下载解压JMeter压缩包

JMeter解压之后即可使用,无需安装。

2. 启动JMeter

这里在windows下进行

在目录apache-jmeter-2.13\bin 下可以见到一个jmeter.bat文件,双击此文件,即看到JMeter控制面板。

3. 创建Http测试例子

1)创建线程组



线程属性

线程数表示启动多少个线程

Ramp-Up Period (in seconds)表示线程之间间隔多少时间允许,单位是秒,比如如果填写10,那么10/10=1表示10个线程间每隔1秒钟发送请求。 循环次数:一组线程运行完毕算是一次,循环次数就是这样的一个请求过程运行多少次。

Delay Thread creation until needed:勾选后表示线程只在需要的时候才会创建。

2)在线程组中添加HTTP请求



3)填写服务器地址和端口号、路径,如图访问的http请求的URL:http://172.18.45.170:8080/admin/auth,本例子模拟登录流程

4)添加url参数,可以填写固定值或者变量,这里使用CVS文件动态配置用户名和密码,在http请求右键添加--配置元件--CVS data set config,配置如下



其中,filename 为user.csv文件存放的位置(如果与jmx文件在同一目录,可直接写文件名),logins.csv可先建一个文本文件,然后更改后缀名即可,里面的数据为一行一个“username,password”,中间用逗号隔开。Variable Names可以自己定义。

然后在http请求的参数设置处使用${变量名}即可



这表示每个线程都从${userName}和${password}中读取值,实现不同的用户访问。

5)如果一个参数的值没有固定值,要随机取值,可用随机函数来表示,

随机取值[1,10],于是可以用${_Random(1,10)}来表示,这样子每次线程取得值为1到10中间的随机值。

6)为Http请求添加后置处理器-正则表达式提取器



根据Http请求的返回值,使用正则表达式提取相应的值

例如返回值是如下json,图中设置获取了realName的值analysis,并赋值给变量realName,此变量即可在下面的请求中使用。

{

"message": "success",

"statusCode": 200,

"tokenId": "d16459d19e3b89d49d1ba3524e37e6cb35d",

"nickName": "analysis",

"userId": "2995a8eeb35d4767892b733be35a873b",

"userName": "analysis",

"realName": "analysis",

}

正则表达式提取器各个选择的作用:

(1)Apply to:默认即可

(2)要检查的字段:主体等选择,一般我们选择主体,即服务器返回给我们的页面主体信息

(3)引用名称:即参数名称,这个自己定义,在后面时可用

(4)正则表达式: 正则表达式中()括起来的部分就是要提取的。.代表任意字符,+代表出现任意次,后面加?。

(5)模板:$1$代表只有一组数据

(6)匹配数字:0代表随机取值,-1代表全部取值,其余正整数代表将在已提取的内容中,第几个匹配的内容。

(7)缺省值:如果参数没有取得到值,那默认给一个值

7)添加响应断言



注意点:

当模匹配规则为“包括”和“匹配”时,支持正则表达式;当为“Equals”或“Substring”时是完全匹配。



8)添加监听器-聚合报告



聚合报告属性:

Label – Sample的标签.

# Samples – 同名Label的个数

Average – 平均响应时间

Median – 50%的请求所用的时间不超过该值

90% Line - 90%的请求所用的时间不超过该值

Min – 最小响应时间

Max – 最大响应时间

Error % - 错误率

Throughput – 吞吐量,即每秒多少请求

Kb/sec – 吞吐量,每秒多少Kb

大概的一个登录的Http请求流程就这样设置。

4. 使用badboy录制JMeter脚本

由于一个线程组可能会有很多个http请求,通过badboy的对每个请求进行录制,可以节省不少时间。

首先,下载安装Badboy。



1)在地址栏(图中红色方框标注的部分)中输入你需要录制的Web应用的URL——这里我们以http://www.baidu.com 为例 。

2)点击 开始录制 按钮(图中蓝色圆圈标注的部分)开始录制。

开始录制后,你可以直接在Badboy内嵌的浏览器(主界面的右侧)中对被测应用进行操作,所有的操作都会被记录在主界面左侧的编辑窗口中(图中黄色方框标注的部分)——在这个试验中,我们在baidu的搜索引擎中输入 JMeter 进行搜索。不过录制下来的脚本并不是一行行的代码,而是一个个Web对象——这有点像LoadRunner的VuGen中的Tree View视图;

3)录制完成后,点击工具栏中的“停止录制”按钮(图中紫色方框标注的部分),完成脚本的录制;

4)选择“File -> Export to JMeter”菜单,填写文件名“baidu.jmx”,将录制好脚本导出为JMeter脚本格式。也可以选择“File -> Save”菜单保存为Badboy脚本;

5)启动JMeter并打开刚刚生成的测试脚本,就可以用JMeter进行测试了。

5.JMeter中进行分布式测试

作为一个纯 JAVA 的GUI应用,JMeter对于CPU和内存的消耗还是很惊人的,所以当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至还会引起JAVA内存溢出的错误。不过,JMeter也可以像 LoadRunner 一样通过使用多台机器运行所谓的代理来分担负载产生器自身的压力,并借此来获取更大的并发用户数,我们只需手动配置一下即可。

1、在所有期望运行JMeter作为负载产生器的机器上安装JMeter,并确定其中一台机器作为 控制器,其他的机器作为代理。然后运行所有代理机器上的JMeter-server.bat文件—假定我们使用两台机器172.20.80.47和172.20.80.68作为代理

2、在Controller 机器的JMeter安装目录下找到 bin 目录,再找到 jmeter.properties 这个文件,使用记事本或者其他文字编辑工具打开它;

3、在打开的文件中查找“remote_hosts=”这个字符串,你可以找到这样一行“remote_hosts=127.0.0.1”。其中的 127.0..0.1 表示运行JMeter代理的机器,这里需要修改为“remote_hosts=172.20.80.47,172.20.80.68”;

4、保存文件,并重新启动控制器机器上的JMeter,并进入启动 ->远程启动菜单项。就会看到我们刚才添加的两个代理的地址,选中即可运行,如果想同时启动所有代理,选择远程全部启动即可。

要进行分布式测试代理机器上需要添加环境变量,即添加用户变量JMETER_HOME=d:\jmeter,系统变量中的path中添加d:\jmeter\bin(假设jmeter放在d盘根目录下)。

原则上,当线程大于100个时就需要对Jmeter进行分布式部署。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: