LoadRunner 的录制功能让性能测试脚本编写对于不懂代码的人变成了一件容易上手的事,但是由于 LoadRunner 收费高昂,庞大,一般企业很少用,除非必须使用。Jmeter 作为性能测试中的王者也少不了提供录制功能。Jmeter 的录制除了自身提供的 HTTP 代理方式进行录制的原理是解析网络数据包,按 HTTP 协议包装成 Http Request、Http Response 等对象,这些对象就是我们可以清楚方便认识的东西。
1.打开浏览器(宏哥这里以 IE11 为例)顺着右上角 -【Internet 选项】-【连接】-【局域网设置】进入如图所示页面:
2.在 “代理服务器” 中按上图进行设置,可以把 “localhost” 换成 127.0.0.1,8080 换成你想设置的端口,主要不要与别的端口产生冲突,如果有,请换成别的端口,一般 4 位的端口冲突的机会比较少;配置好以后点击 “确定” 按钮。
1.首先在 JMeter 中添加一个线程组,如下图所示:
2.添加 HTTP 代理服务器节点,如下图所示:
3.设置代理服务器,端口号设置就是我们在浏览器中设置的端口,如下图所示:
4.目标控制器:决定将来我们录制的脚本放在那个目录下(测试计划是一颗目录树,这个目录就是树中的一个节点)。你可以在【测试计划】-【线程组】下面添加节点,然后指定脚本放在此节点,宏哥在线程组增加了【简单控制器】节点,然后就可以在 “目标控制器” 处选择到它。如下图所示:
5.分组:录制脚本的时候,会增加很多节点,这些节点我们可以给它分个组,方便我们查看和管理。对于 http 请求我们可以把每一个 URL 看成一个组,这里可以更好地理解。分组有如下选项,如下图所示:
选项参数说明:
(1)不对样本分组:罗列出录制到的所有 http 请求。
(2)在组间添加分隔:加入以分割线命名的简单控制器。
(3)每个组放入一个新的控制器:每个 URL 产生的请求放在一个 控制器下。
(4)只存储每个组的第一个样本:我们知道一个 URL 产生的 HTTP 请求可能不止一个,一张图片、一个样式都会是一个 HTTP 请求,录制时将会产生很多的 HTTP 请求,但有时候测试我们需要考虑缓存,实际上一些图片不用每次都去下载,我们也不关心这些图片产生的负载,另外对于互联网多数会用的 CDN 等图库来存储这些图片、CSS 等静态资源。所以理论上我们可以在脚本中忽略它,但是我们必须根据实际情况来选择是否忽略。因此如果忽略,我们就可以选择此项,只录制产生动态数据的 HTTP 请求。
(5)每个请求放入一个新的事务控制器:宏哥用大白话解释就是每个 URL 的请求放入一个事务中,不管它有多少 HTTP 请求,只要是这个 URL 请求产生的。
其他界面参数说明:
(1)记录 HTTP 信息头:把 Header 头信息也录制下来。
(2)添加断言:这个大家都知道,就是添加检查点,在录制的时候加入空的检查点,后续我们自己填写断言(检查)规则。
(3)Regex matching“检查点用正则表达式来匹配内容。
(4)Http Sampler settings:与 “http 请求” 设置方法一样。
1.全部配置好以后,在【HTTP 代理控制器】中按下【启动】。然后子啊浏览器中浏览 Web 页面(你要测试的功能),就可以录制下这些 HTTP 请求。录制状态下的 “启动” 按钮是灰色的不可以点击,非录制状态下的 “启动” 按钮可以点击。
2.在录制时每个 js、png、swf 及动态请求(需要服务器动态取数据)都会录制下来。所以我们选择 “只存储每个组的第一个样本”,但这样通常优惠有动态请求被漏掉,所以 HTTP 代理来进行录制还不是很高效,因此我们换一个工具(Badboy)来录制,甚至有能力的话,我们直接手写脚本(宏哥推荐这种方式)。
注意:
现在越来有多的系统或者网站的前端架构使用动态加载的方式(Ajax+JS+JSON)来处理,对于这种应用,我们使用 JMeter 或者 LoadRunner 进行录制都不能完成任务。不相信的童鞋们可以录制一下去哪儿官网。
3.点击启动后,会提示:Jmeter 导入 https 安全证书,启动 Jmeter 的 HTTP 代理服务器,会在 Jmeter 安装路径的 bin 目录下生成一个安全证书文件:ApacheJMeterTemporaryRootCA.crt。如下图所示:
4.在 Jmeter 菜单选项-> SSL 管理器,导入 jmeter 的 bin 目录下的安全证书文件 ApacheJMeterTemporaryRootCA.crt。
5.点击 SSL 管理器,查看导入的证书,如下图所示:
6.在 JMeter 的 bin 目录下,找到证书双击打开证书,将证书导入浏览器中,如下图所示:
7.代理服务器重新启动后,会打开如下所示界面,Recorder:Trnsactions Control。此时开始录制脚本,在浏览器中输入要访问的网址,进行相关操作。这里以度娘为例,录制访问度娘,然后查询:北京 - 宏哥的脚本。
这个弹框用处,为了方便快捷的填写录制时,需要编写的事务名称所使用;不需要每次去打开 jmeter 的界面去修改事务名称,大家可以忽略它。
8.在浏览器输入度娘网址后,进入度娘后,输入框输入:北京 - 宏哥,点击查询。查看 Jmeter 线程组下的录制控制器是否已经有请求产生。若产生请求,录制脚本成功。如下图所示:
9.录制成功后,请求中也会记录发送的信息,如服务器名称、端口号、路径、和请求时的参数等,如下图所示:
10.选中 “录制控制器”,右键添加 “观察结果树”,运行脚本,对所录制的脚本进行调试,这里是验证录制登录成功的脚本,如下图所示:
11.精简脚本,对除访问度娘,查询北京 - 宏哥以外的请求进行删除。如下图所示,在察看结果树可以看到运行后的脚本响应,在响应体中看到<百度一下>,代表访问成功,看到北京 - 宏哥的查询结果,代码查询成功,至此录制完成。关闭 Jmeter 代理服务器。如下图所示:
查询北京 - 宏哥请求的结果,如下图:
1.可能有些同学遇到 Jmeter 录制前访问正常,设置代理却无法访问。
根据宏哥的分析可能性有几种,一类是工具本身的代理进程未启动,一类是端口被占用,另一类是证书问题。
可能性最大的都是证书问题,http 的请求可能还好,https 的请求就可能涉及到证书。安装 bin 目录下的证书即可(具体证书安装的方法可以问一下度娘,不过也简单类似傻瓜式的安装软件下一步,下一步就可以了)。其实按照宏哥的步骤应该是没有什么大问题的。
2.录制完以后,不能正常的访问互联网,注意要关闭浏览器的代理后,就可以正常访问了。
·好了,今天就分享到这里,不会写脚本的童鞋们这次有口福了!!!