Jemeter 与badboy


JMeter是一款在国外非常流行和受欢迎的开源性能测试工具,像LoadRunner 一样,它也提供了一个利用本地Proxy Server(代理服务器)来录制生成测试脚本的功能,但是这个功能并不好用。所以在本文中介绍一个更为常用的方法——使用Badboy录制生成JMeter 脚本。

JMeter下载与安装

JMeter下载地址:

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

选择Download Releases --点击下载Binary:apache-jmeter-2.13_src.zip(注意zip包才是适合windows系统的,其中Source是可以看到源码的包,如果不需要查看源码可以只下载Binary下的zip包。)下载后解压.

打开方式:

apache-jmeter-2.13\bin\jmeter.bat

启动常见错误:

jmeter.bat 运行出错,unable to access jarfile apachejmeter.jar error value=1

原因:下载的JMeter非完整版,请重新下载。

Badboy

Badboy是一款不错的Web自动化测试工具,Badboy 是澳大利亚的一个软件公司设计的,有免费版可以下载。优势:(1)Badboy提供了将Web测试脚本直接导出生成JMeter 脚本的功能,并且这个功能非常好用,也非常简单。你可以跟着下面的试验步骤来迈出你在开源世界的第一步。(2)使用 jmeter 的代理服务器可以顺利录制完整的 http 请求,包括请求的头;但无法录制cookies,对于网站脚本,大多需要 cookies 支持,可以使用 badboy 来录制。

1. 通过Badboy的官方网站下载Badboy的最新版本;

2. 安装Badboy。安装过程同一般的Windows 应用程序没有什么区别,安装完成后你可以在桌面和Windows开始菜单中看到相应的快捷方式——如果找不到,可以找一下Badboy安装目录下的Badboy.exe 文件,直接双击启动Badboy

3. 启动Badboy,你可以看到下面的界面。

JMeter使用

Jmeter和LR一样有着录制脚本、参数化、检查点、集合点、设置关联、场景等。

一、录制脚本

(一). 使用JMeter录制

在“工作台”添加“HTTP 代理服务器”。

代理服务器的端口,默认 8080,可自行修改,但不要与其它应用端口冲突
目标控制器:录制的脚本存放的位置,可选择项为测试计划中的线程组

分组:对请求进行分组。“ 分组”的概念是将一批请求汇总分组,可以把 url 请求理解为组。

“不对样本分组”: 所有请求全部罗列
“在组间添加分隔”: 加入一个虚拟的以分割线命名的动作,运行同“不对样本分组”,
无实际意义
“每个组放入一个新的控制器”: 执行时按控制器给输出结果
“只存储每个组的第一个样本”: 对于一次 url 请求,实际很多次 http 请求的情况,这
个选项很好用,因为我们常常是不关心后面的那些请求的。

记录 HTTP 信息头:录制 request 的 head 信息
添加断言:录制时加入空的检查点
Regex matching:录制时加入空的正则匹配

在浏览器中录制:
启动 HTTP 代理服务器后,打开浏览器(IE,Firefox,Opera 等),添加代理,地址填
写本机 ip 或 host name,端口填写刚刚设置的代理端口,在浏览器中进行正常网页浏览,即
可录制下对应的操作。

缺点:;无法录制cookies,对于网站脚本,大多需要 cookies 支持。Bayboy可以解决这个问题。

(二). 使用Badboy录制

1. Bayboy录制

(1) 开始录制后,你可以直接在Badboy内嵌的浏览器(主界面的右侧)中对被测应用进行操作,所有的操作都会被记录在主界面左侧的编辑窗口中。录制下来的脚本并不是一行行的代码,而是一个个Web对象——这就有点像LoadRunner的VuGen中的Tree View视图;

(2) 录制完成后,点击工具栏中的“停止录制”按钮,完成脚本的录制;

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

2. Badboy录制参数化

比如登录需要用户名,密码,要实现参数化。在左下角“Variables”,右键单击添加参数。

(二)参数化

CSV Data SetConfig(推荐)

利用JmeterCSV Data SetConfig,可以实现这个功能,具体如下:
1.新建一个文本文件,里面保存要登录的用户名,密码,文件内容如下:
admin,123
manager,456
test,test
说明:这里用英文逗号为分隔符,也可以用其他为分隔符,在CSVData Set Config中可以设置。
2. 右键点击Jmeter中需要参数化的某个请求,选择添加——配置原件——CSVData Set Config,会添加一个CSV Data SetConfig,需要设置相关的一些内容,具体如下:
Filename---参数项文件
File Encoding ---文件的编译方法,一般为空
Vaiable Names---文件中各列所表示的参数项;各参数项之间利用逗号分隔;参数项的名称应该与HTTPRequest中的参数项一致。
Delimiter---如文件中使用的是逗号分隔,则填写逗号;如使用的是TAB,则填写\t;
Recycle on EOF? ---True=当读取文件到结尾时,再重头读取文件
False=当读取文件到结尾时,停止读取文件
Stop thread on EOF? ---当Recycle onEOF?一项为False时起效;True=当读取文件到结尾时,停止进程

Filename:文件名,,指保存信息的文件目录,可以相对或者绝对路径(比如:D:\CSV\userinfo.txt

注意:由于用户名和密码是全局变量,因此CSV Data Set Config放在全局域中,对于每个循环控制器,可以定义局部的变量。

3. 在需要使用变量的地方,比如在登录操作中,需要提交的表单字段包含用户名密码,我们就可以用${变量名}的形式进行替换,例如${user}${password}

这样,每次在登录时,就可以从userinfo.txt中读取自己配置的用户名和密码。

如果需要测试多个用户同时登录需要设定集合时间(详见(四))。

4. 另外,通常有用户认证的地方都要用到cookie或者session,那么最好在测试计划中加入一个httpcookie管理器(HTTP Cookie Manager),直接添加一般不需要任何设置,否则可能会出现登录失败(在测试结果中,如果看到多次请求不同页面返回的字节数却是相同的,那多半是登录失败了)
5. 最后,添加后,可以通过添加-监视器-查看结果树(请求部分)”,来检验参数化是否成功,运行线程组,如果失败,那么检查一下文本的路径,变量大小写等等,手册上说使用相对文本路径时,要以测试配置文件(默认是jmeterbin目录)的目录为参考,但是我试过似乎不行,换成绝对路径就可以了

函数助手---__CSVRead

先准备一个dat文件保存在本地,然后选择”选项“---函数助手---__CSVRead--输入dat文件保存的路径如C:\test.dat,点击生成并复制${__CSVRead(c:\test.dat,)}
找到需参数化的页面--将复制的${__CSVRead(c:\test.dat,)}粘贴到参数化值的位置。

正则表达式参数化

在 http请求下加入“后置处理器”>“正则表达式提取器”:引用名称即使用的参数名;填入正则表达式;模板选取匹配的组;

示例中用正则表达式匹配出产品 id 作为后续使用的参数。
提取到的参数,调用时用${product_id_1},${product_id_2},${product_id_3}……;
如果想要得到匹配出的参数的个数,用${product_id_matchNr};如果想随机选取其中一个,
只需将匹配数字设为0,使用${product_id}调用即可。

可以一次匹配多组;示例中只匹配了一个,假如正则表达式为 name="chkProductIds"
id="chk(.+?)" value="(.+?)",就会有两组参数。想获得匹配到的组个数用${product_id_g}。模
板针对的是匹配到的字符串再做组的区分,比如希望${product_id}取出的是第二组参数的
值,用$2$。

(二)检查点
检查对对象设置:右键点击某页面---->添加---->断言---->响应断言
检查结果:添加一个断言结果,右键点击页面---->添加---->监听器---->断言结果
还可以再添加一个“查看结果树”右键点击我们的“登录”页面---->添加---->监听器---->查看结果树

(三)设定延迟时间

在脚本中添加“定时器”à“固定定时器”,设定延迟时间。

(四)设定集合时间

在脚本中添加“定时器”->“Synchronizing Timer”。设置集合点处的并发用户数,即“多少”个用户达到集合点后再执行。
(五)响应数据及添加报告

JMeter报告有很多种,擦看结果树中可以看到每个步骤的执行结果。

结果树:

可以看到各个步骤的运行情况。

聚合报告各字段含义:

Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值

#Samples:表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100

Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间

Median:中位数,也就是 50% 用户的响应时间

90% Line:90% 用户的响应时间

Note:关于 50% 和 90% 并发用户数的含义,请参考下文http://www.cnblogs.com/jackei/archive/2006/11/11/557972.html

Min:最小响应时间

Max:最大响应时间

Error%:本次测试中出现错误的请求的数量/请求的总数

Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数

KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec

Summary Report:

优质内容筛选与推荐>>
1、C# 通过一个控制台打开另一个控制台
2、分页总结
3、软件工程课程-个人编程作业
4、Windows Live Essentials beta下载
5、Linux程序设计入门 - fork, pthread, and signals[转载]


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号