phantomjs 自动化测试
最近网站的质量检查越来越严格,原来开发过程中很多隐蔽的问题,逐渐暴露出来,为提高前端的工作效率,就想到是不是可以在开发过程中能自动的对页面的中一些规范化的东西进行自动监测,这个就可以省去不少麻烦。
整体分析,一张静态页面主要包含以下几块内容:
1. 页面源码,即html内容
2. 图片
3. js
4. css
5. 异步化数据
对页面源码的测试,一般就是看它是否包含一些不合法字符,这样其实就是要求可以获取到页面源码,剩下的就好办了,可以自己写正则去匹配源码内容。
对图片,我们关注的一般我们首先关注,图片是不是404,其次应该就是关注图片大小,然后就是图片格式,再次是图片的域名
js的话,首先关注的也是,是否加载成功,即是不是404,其次是是否报错,然后是js的域名
css,我们主要关注的是css的域名
对于异步化数据,暂时可以先忽略
最近看了下phantomjs,它基本上提供了以上的所有的API接口,对于现有的页面测试,基本上可以满足,具体phantomjs的安装方法自己到网站找吧,这里推荐个地址:
http://www.html-js.com/article/Phantomjs-based-frontend-automation-testing-road
phantomjs使用方法说明
1. 创建 页面的 接口
var page = require('webpage').create(),sys = require("system");
page.open(sys.args[1],function (status){
var title = page.evaluate(function(s) {
return document.querySelector(s).innerText;
}, 'title');
page.render(title+".png");
if(status !== 'success'){
console.log('FAIL to load the address');
} else {
t = Date.now() - t;
allTime = '页面加载总时间' + t + ' ms';
var P_CONTENT = page.content;
isIframe = isContainIframe(P_CONTENT);
}
});
2. page中有几个很重要的属性,一是page.content,这个属性可以获取页面的内容,即html代码;第二个是 page.onResourceReceived,这个属性可以获取到页面的静态资源。即js/css/img,用一些简单的判断,就可以区分开来资源的类型;第三个,比较重要的属性,就是page.onLoadFinished,这个一般用于结果输出类;第四个属性,是page.onError,这个属性简单易懂,就是报错信息汇总了。
以下是代码是使用phantomjs对网站专题进行的自动化测试代码,附上来,给大家参考
var page = require('webpage').create(),sys = require("system");
var imgALL = new Array();
var illImg = "";
var jsALL = new Array();
var allTime = "";
var isIframe = "";
var isILLPara = "";
var js_tem = true;
var staticZY = new Array();
var msgStack = new Array();
var t = Date.now();
page.settings.userAgent = "";
page.open(sys.args[1],function (status){
var title = page.evaluate(function(s) {
return document.querySelector(s).innerText;
}, 'title');
page.render(title+".png");
if(status !== 'success'){
console.log('FAIL to load the address');
} else {
t = Date.now() - t;
allTime = '页面加载总时间' + t + ' ms';
var P_CONTENT = page.content;
isIframe = isContainIframe(P_CONTENT);
}
});
//图片大小判断
var jsReg = /(.XXX.com)/ig;
var illPara = /(img[1-4]?.XXX.com)/ig;
page.onResourceReceived = function(response){
if(response.bodySize && illPara.test(response.url)){
staticZY.push("禁止含有 img[1-4]?.XXX.com:"+response.url);
}
if(response.bodySize && /(image)/ig.test(response.contentType)){
if(response.bodySize > 400*1024){
imgALL.push(response.url+",图片大小:"+(response.bodySize/1024).toFixed(2)+"k,大于400k");
}
}
if(response.bodySize && /(application\/x-javascript)/ig.test(response.contentType)){
if(/(.XXX.com)/ig.test(response.url) || /(.XXX.com)/ig.test(response.url)){
}else{
jsALL.push("引入外部js文件,请注意核查:" + response.url+",js大小:"+(response.bodySize/1024).toFixed(2)+"k");
}
}
};
// 页面报错信息
// phantom.onError = function(msg, trace){
// msgStack = ['PHANTOM ERROR: ' + msg];
// if (trace && trace.length) {
// msgStack.push('TRACE:');
// trace.forEach(function(t) {
// msgStack.push(' -> ' + (t.file || t.sourceURL) + ': ' + t.line + (t.function ? ' (in function ' + t.function +')' : ''));
// });
// }
// };
// 页面中是否包涵iframe
function isContainIframe(t){
//img[0-4].XXX.com域名
var illPara = /(iframe)/ig;
if(illPara.test(t)){
return "页面中静态资源有 iframe 标签,不合法";
}else{
return "页面不含有 iframe 标签"
};
}
page.onLoadFinished = function(){
if(js_tem){
console.log("测试结果如下:");
console.log("\n"+allTime);
console.log("\n"+isIframe);
console.log("\n"+"静态资源:"+staticZY.join("\n"));
console.log("\n"+"页面中大于 400k图片:"+imgALL.join("\n"));
console.log("\n"+"加载非XXX静态资源数:"+jsALL.join("\n"));
js_tem = false;
phantom.exit();
}
}
phantomjs 自动化测试的更多相关文章
- python selenium+phantomJS自动化测试环境
0x00配置phantomJS 1. 在windows平台下 此种方法是弹浏览器进行自动化测试的. 1.下载谷歌的驱动 https://chromedriver.storage.googleapis. ...
- ruby + phantomjs 自动化测试 - GA
说起测试GA,真是一件枯燥乏味,重复性很高的工作,那么为什么我们不使用自动化测试代替它呢,显然,很多公司的产品迭代太快,ga也变化的比较频繁,但是确保ga工作正常,对于其他部门的工作是有很大帮助的,由 ...
- Nightmare基于phantomjs的自动化测试套件
今天将介绍一款自动化测试套件名叫nightmare,他是一个基于phantomjs的测试框架,一个基于phantomjs之上为测试应用封装的一套high level API.其API以goto, re ...
- 用phantomjs进行web界面自动化测试的几个注意点
貌似我以前说过不少界面自动化测试的坏话,哈哈.最近接触了phantomjs,发现用它进行web界面测试也挺有意思的,下面举几个我使用过程中发现的注意点. 1.需要指定phantomjs位置,否则使用时 ...
- 使用phantomjs进行无界面UI自动化测试
PhantomJS(http://phantomjs.org/) 是一个基于WebKit的服务器端JavaScript API.它全面支持web而不需浏览器支持,其快速.原生支持各种Web标准:DOM ...
- 浏览器自动化测试初探 - 使用phantomjs与casperjs
收录待用,修改转载已取得腾讯云授权 作者:yangchunwen 首先要解释一下为什么叫浏览器自动化测试,因为本文只关注发布后页面功能的自动化测试,也就是UI层面的自动化. 浏览器测试有别于js代码的 ...
- [转] 浏览器自动化测试初探:使用 phantomjs 与 casperjs
[From] https://www.qcloud.com/community/article/641602001489391648 作者:yangchunwen 首先要解释一下为什么叫浏览器自动化测 ...
- Robot Framework使用Phantomjs进行无界面UI自动化测试
Robot Framework 是一款关键字驱动的验收自动化测试框架,现在在国内使用的越来越广泛了.一种通用的Web UI自动化测试解决方案是Robot Framework+Selenium2Libr ...
- 【tips】自动化测试工具 - selenium和phantomJS
### 目录清单 selenium和phantomjs概述 selenium常用API 案例操作:模拟登陆csdn 1. selenium和phantomJS是什么东西 selenium是一套web网 ...
随机推荐
- Centos 7 yum 安装Apache
1.首先查看是否已经安装 rpm -qa httpd 2.如果没有 yum install httpd -y rpm -ql httpd 查看 3 ...
- MST最小生成树及克鲁斯卡尔(Kruskal)算法
最小生成树MST,英文名如何拼写已忘,应该是min spaning tree吧.假设一个无向连通图有n个节点,那么它的生成树就是包括这n个节点的无环连通图,无环即形成树.最小生成树是对边上权重的考虑, ...
- PHP为fopen,file_get_contents等函数请求web地址时增加Http头的方法
我们在使用fsockopen时可以方便的自定义自己请求的http头内容来访问某些对客户端请求头有特殊限制的网站,但是使用fopen,file_get_contents等函数请求web地址时怎么来灵活定 ...
- 项目源码--Android高质量图片浏览器源码
下载源码 技术要点: 1. 浏览所有格式的图片 2. 图片缓存到数据库 3. Sqlite数据库的高级应用 4. 文件夹缩图显示 5. 多点触控技术 6. 动画技术 7. 支持超高清图片 8. ...
- linux vi 撤销重做于前进后退--转
在vi中按u可以撤销一次操作 u 撤销上一步的操作Ctrl+r 恢复上一步被撤销的操作 注意:如果你输入“u”两次,你的文本恢复原样,那应该是你的Vim被配置在Vi兼容模式了.重做如果你撤销得太多 ...
- Helpers\Date
Helpers\Date The Date helper is used for calculations with dates. Date::difference($from, $to, $type ...
- Azure PowerShell 创建虚拟机
# 指定订阅名称$subscriptionName="订阅名称"# 指定云服务名称$serviceName="云服务名称"# 指定用来保存虚拟机VHD的存储$s ...
- Unit Testing PowerShell Code with Pester
Summary: Guest blogger, Dave Wyatt, discusses using Pester to analyze small pieces of Windows PowerS ...
- 关于@see注解
所有三种类型的注释文档都可包含@see标记,它允许我们引用其他类里的文档.对于这个标记,javadoc会生成相应的HTML,将其直接链接到其他文档.格式如下: @see 类名@see 完整类名@see ...
- ArrayBlockingQueue和LinkedBlockingQueue分析
JAVA并发包提供三个常用的并发队列实现,分别是:ConcurrentLinkedQueue.LinkedBlockingQueue和ArrayBlockingQueue. Concurren ...