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网 ...
随机推荐
- Android ADB使用之详细篇
Android开发环境中,ADB是我们进行Android开发经常要用的调试工具,它的使用当然是我们Android开发者必须要掌握的. ADB概述 Android Debug Bridge,Androi ...
- Android中由IP地址查询经纬度坐标的实例
大家都知道,根据IP地址就可以知道它所在的具体位置,在Android中同样可以由IP地址得到它的位置,即具体的地理经纬度坐标. 本文就直接以代码的方式演示如何根据IP地址查询地理经纬度坐标位置,下面的 ...
- JSON数据格式以及与后台交互数据转换实例
/* 作者:烟大阳仔 时间:20131013 介绍:主要了解一下json的格式,看看数据是怎么存储的 */ <!DOCTYPE html PUBLIC "-//W3C//DTD HTM ...
- js操作json添加元素和数据的方法
function addServerUrlToJson() { var json_tem = [{"name":"a","value":1} ...
- 一天JavaScript示例-在功能上的标量参数和数组参数的差异
<!DOCTYPE> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta h ...
- HDU 1068 Girls and Boys(最大独立集合 = 顶点数 - 最大匹配数)
HDU 1068 :题目链接 题意:一些男孩和女孩,给出一些人物关系,然后问能找到最多有多少个人都互不认识. 转换一下:就是大家都不认识的人,即最大独立集合 #include <iostream ...
- ulimit 命令详解
Linux对于每个用户,系统限制其最大进程数.为提高性能,可以根据设备资源情况,设置各linux 用户的最大进程数 可以用ulimit -a 来显示当前的各种用户进程限制. 下面我把某linux用 ...
- 用GDB排查Python程序故障
某Team在用Python开发一些代码,涉及子进程以及设法消除僵尸进程的需求.实践中他们碰上Python程序非预期退出的现象.最初他们决定用GDB调试Python解释器,查看exit()的源头 ...
- 标准I/O库之流和FILE对象
对于标准I/O库,它们的操作是围绕流(stream)进行的.当用标准I/O库打开或创建一个文件时,我们已使一个流与一个文件相关联. 对于ASCII字符集,一个字符用一个字节表示.对于国际字符集,一个字 ...
- iOS-制作Framework
步骤 打开Xcode,创建新工程.手下留情,请先看图! 在TARGETS下选中工程,在Build Settings下更改几个参数. 更改参数 在Architectures下增加armv7s,并选中.将 ...