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网 ...
随机推荐
- js判断字符在另一个字符串中出现次数
经过搜索验证,提供两个方法. 1. 通过分割获取长度原理 var s = 'www.51qdq.com';var n = (s.split('.')).length-1;alert(n); //弹出 ...
- Java开发手冊 Java学习手冊教程(MtJava开发手冊)
本文档的版权归MtJava文档小组全部,本文档及其描写叙述的内容受有关法律的版权保护,对本文档内容的不论什么形式的非法复制.泄露或散布.将导致对应的法律责任. MtJava仅仅是一个学习Java的简化 ...
- [AngularJS - app] AngularJS Location-picker app
From: http://rangle.io/blog/two-ways-to-build-a-location-picker-for-a-mobile-angularjs-application/ ...
- Android在MediaMuxer和MediaCodec用例 - audio+video
在Android多媒体类,MediaMuxer和MediaCodec这是一个相对年轻,他们是JB 4.1和JB 4.3据介绍. 前者被用来产生一个混合的音频和视频的多媒体文件.的缺点是,现在可以只支持 ...
- iOS开发——OC篇&协议篇/NSCoder/NSCoding/NSCoping
协议篇/NSCoder/NSCoding/NSCoping 协议声明类需要实现的的方法,为不同的类提供公用方法,一个类可以有多个协议,但只能有一个父类,即单继承.它类似java中的接口. 正式协议(f ...
- android115 自定义控件
布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:to ...
- RHEL 7特性说明(七):编译程序及工具
转载自:RedHat https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/7/html/7.0_Release ...
- 双tomcat的部署
由于开发环境使用的tomcat需频繁开启关闭,所以决定另外搭建一个tomcat部署后台供前台调用接口,顺便记录一下备忘 我的部署环境为windows7 tomcat7 将下载的tomcat放到其他位置 ...
- PAT 1008
1008. Elevator (20) The highest building in our city has only one elevator. A request list is made u ...
- windows身份验证模式和SQL server身份验证模式 有什么不同
两个验证方式是有明显不同的. 主要集中在信任连接和非信任连接. windows 身份验证相对于混合模式更加安全,使用本连接模式时候,sql不判断sa密码,而仅根据用户的windows权限来进行身份验证 ...