为什么要进行脚本录制?
在做接口测试时,开发会提供接口文档作为测试脚本编写的依据,但接口文档往往有一些局限性:
接口文档本身可能有编写错误
接口文档可以针对单个字段的取值和含义做描述,但多个字段的组合作用很难通过文字做一个完备的描述
仅靠文字描述,测试人员难以把接口和业务操作完全匹配起来
这个时候我们就需要借助抓包工具,分析业务操作和业务流背后的接口调用和接口数据组合
目前业界有很多抓包工具,包括Fiddler,Charles,当抓到数据以后,测试人员对数据做一个梳理分析,然后再转化成接口测试脚本。
录制脚本四种方式介绍:
一:使用原生的HTTP代理服务器
-
原理:
Jmeter可以作为web服务器与浏览器之间的代理网关,以便捕获浏览器的请求和web服务器的响应,如此就可以很容易地生成性能测试脚本。
JMeter脚本(.jmx)为xml格式,树形结构,由元件组成,使用取样器产生请求,主要采用HTTP代理服务器。
-
操作:
1)jmeter配置
1.1 在测试计划中添加线程组
1.2 在线程组中添加录制控制器
1.3 在测试计划中添加代理服务器,且http代理服务器后界面设置如下:
2)浏览器配置
2.1 使用Chrome浏览器,设置本机代理,IP地址:127.0.0.1;端口号:8889
打开代理模式:
2.2 添加浏览器证书:
2.2 .1 添加证书:(打开管理证书后选择受信任的根证书颁发机构点击导入,进入jmeter安装目录Bin文件夹)
导入成功:
3、录制与回放
Http Test Script Recorder 点击开始,同时在浏览器中开始操作,jmeter开始录取网站内容。
4、jmeter调试
此时的jmeter会抓取浏览器所有发送的请求,为了只查看需要的服务网址,使用过滤器
Http Test Script Recorder:(使用正则表达式)
URl Patterns to Include 只查看包含的url
URl Patterns to Exclude 过滤掉包含的url
脚本过滤:
测试计划 -> http代理服务器 -> requests filtering -> 排除模式 ,录制时排除在外的内容:
.*\.(js|css|PNG|jpg|ico|png|gif).*
PS:
录制完成记得关闭代理;
二:Chrome浏览器使用BlazeMeter插件录制脚本
-
特点:
1.轻量级的免费测试工具;
2.可以功能测试,主要还是性能测试;
3.可以单独进行简单任务的压力测试,也可以作为Jmeter脚本开发工具。 主要是测试人员使用。也有少量功能支持开发人员调试、自测使用。
-
BlazeMeter Chrome插件官方简介:
记录 Selenium 和 HTTP 流量在不到 10 分钟的时间内创建负载和功能测试(Apache JMeter 兼容)。
BlazeMeter Chrome 扩展使您能为web应用程序录制、上传、运行测试。
Chrome 扩展记录了您的浏览器发送的所有 HTTP/S 请求和实际用户交互。它创建一个 JMeter 或 Selenium 脚本,并自动将其上传到 BlazeMeter.com,您只需单击一下即可执行测试。无需安装 JMeter 或 Selenium 即可记录或运行 GUI 功能、API 功能或性能测试,Chrome 扩展将自动创建 JMeter (JMX) 和 Taurus Selenium (YAML) 脚本。
该扩展还允许您在本地 Chrome 浏览器上调试和测试记录 Selenium 会话。
通过在本地使用 JMeter,您可以调试和增强由 Chrome 扩展创建的 JMX 文件,以确保您的脚本准备就绪。
BlazeMeter的功能和要求:
- 记录浏览器发出的所有HTTP请求;
- Apache JMeter兼容;
- 运行没有测试脚本应用程序的测试;
- 为多达1,000,000个并发用户运行测试;
- 需要BlazeMeter帐户(免费);
-
安装:去谷歌应用商城https://chrome.google.com/webstore/category/extensions?hl=zh-CN 下载插件Blazemeter,添加至Chrome;
-
登录Blazemeter,想使用并且导出脚本的话需要登录Blazemeter,但是由于申请账号麻烦,可以直接谷歌授权登录即可;
-
录制过程可以看到是这样的,可以随时暂停,数字代表的是录制了多少个;
-
录制结束后,点击edit,选择Jmeter Script(可以直接导入到jmeter),保存到本地
-
打开Jmeter-打开导出的jmx脚本,BlazeMeter自动填充全局配置信息(Http信息头,抽取出接口环境变量)
BlazeMeter成功抓取到搜索接口的路径以及它的参数信息:
-
可以在本地线程组添加查看结果数运行;
PS:测试的时候浏览器最好只打开一个标签,以免其他页面对录制的脚本造成影响,如果涉及到多个站点的请求,在导出脚本的时候会让你选择:
选择相应的站点,点击submit即可;
三:通过Fiddler抓包导出Jmeter脚本
-
原理:JMeter本质上是一个xml文档,Fiddler通过改写http代理,让数据从它那通过,来监控并且截取到数据的代理机制,插件的基本原理就是Fiddler抓取HTTP请求包,将HTTP请求信息通过插件的逻辑处理组装成JMeter可识别的脚本即可。
-
操作如下:
第一步:下载扩展插件,直接使用已有的开源插件,github地址,或者通过该地址下载:插件下载。
第二步:插件下载完后,将下载的JmeterExport.dll文件放到Fiddler的ImportExport对应的目录下,移动成功后,记得重启fiddler,如下图:
第三步:打开Fiddler抓取请求(可进行过滤)
-
勾选“UseFilters”
-
在下面的下拉框中选择“Show only the following Hosts”,并在输入框中填入Hosts名称,如*.baidu.com;
-
在Requests Headers中勾选“Hide if URL contains”,填入.css .js .gif .png .jpg .swf 用以过滤css/js/图片等类型请求
-
根据需要,可在下面“Respons Status Code”中勾选“Hide non-2xx”用以过滤非2xx返回码(即失败)的请求
-
最后点击右上角Actions -> Run Filterset Now,开始运行Filer过滤
第四步:设置请求的Comments(选中请求 按大写的M键)
第五步:File---Export Sessions---Selectd Sessions,选中对应的Jmeter格式保存。
第六步:导入到JMeter稍作修改执行后续测试。
注意:导出的jmeter脚本是不包含Thread Group的,需要自己创建Thread Group,然后再运行脚本查看结果进行分析。
常见问题:
1.打开jmeter脚本时报如下错:problem loading XML from: CannotResolveClassException:
问题1解决方法:
1、下载jmeter插件
jmeter插件下载地址:Install :: JMeter-Plugins.org
2、将下载的jmeter-plugins-manager.jar
jmeter-plugins-manager.jar是jmeter的一个插件管理工具包,下载完成之后,将下载的jmeter-plugins-manager-0.11.jar文件放置到jmeter的安装目录/lib/ext
3、重启jmeter,进入options -> Plugins Manager下载JSON/YAML Plugins (deprecated)
4、jmeter会自动重启,再次导入脚本就OK啦~
四:使用第三方软件badboy录制
-
介绍
一款免费的Web自动化测试工具,是用C++开发的动态应用测试工具。
其拥有强大的屏幕录制和回放功能,提供图形结果分析功能,刚好弥补了JMeter的不足之处,所以在做Web测试时,使用这两个工具将是最佳组合。
同时Badboy提供了录制好的Web测试脚本,可直接导出生成JMeter支持的.jmx格式的脚本。
PS:
必须等到上一步的request处理完毕后,才能点击发送下一个request,否则下一个request会作为第一个request的子frame.
-
安装
1)Badboy官网:Badboy - Download(已无法访问)
badboy安装包:链接: https://pan.baidu.com/s/1Ae3tLuP3q7301SzyXDGw2A 提取码: jcg5
2) 下载后傻瓜式安装;
3) 点击安装好的badboy的图标,你将看到Badboy的IDE界面,下图是对界面进行的简单注解,其中包括Badboy官网的一个介绍截图
4) 这个是对其进行的一个详细的介绍,如下图所示:
3. 操作步骤:
a、打开badboy软件,默认打开是Recording状态,即录制状态,如果要停止录制点击工具栏红色圆圈按钮;
b、在地址栏输入被测项目地址,按回车;
c、badboy就开始录制了,录制好之后保存:File--》Export to Jmeter..
d、启动JMeter,文件--》打开,导入脚本;
e、检查每一个HTTP请求;
1.1.1、在badboy录制中添加断言
如: 在搜索出来的结果页面中选中搜索框内的文本,选择Tools--》Add Assertion for Selection
1.1.2、回放通过
ps:
录制的时候总是提示"当前页面的脚本发生错误",解决方法如下: badboy工具栏—Preferences—Playing—勾选Javascript Error Dialogs
优缺点对比:
jmeter 代理录制:
1、请求抓取过多
2、配置代理等操作比较繁琐
Badboy:
1、有时候录制不了,兼容性较差
2、post请求的时候,如果链接中有参数、body里面也有参数,都会放在body里面
fiddler:
-
不需要手动设置浏览器代理;
-
方便、简单、效率;
-
不足:需要人工优化;
Blazemeter:
1、可以直接录制浏览器的操作,直接提取jmeter脚本;
2、导出脚本时可通过域名进行筛选;
3、会自动填充全局配置信息(http信息头抽取出环境变量)