摘要:本文将带你了解测试技术Web功能性测试,希望对大家学测试技术有所帮助。
本文将带你了解测试技术Web功能性测试,希望对大家学测试技术有所帮助。
在平时工作中时常需要对网站进行自动化测试,虽然一些简单的测试可以通过爬虫的方式来做,但是如果涉及到比较复杂的js和CSS渲染的话,就必须使用真正的浏览器了。毕竟自己实现HTML DOM解析还相对容易,但是如果做上述工作就太麻烦了。
由于我们网站90%以上的用户用的都是IE,而有一些代码也是特定于IE的,因此在测试的时候,必须要对IE进行自动化测试。当然,大部分代码对各个浏览器都是兼容的,因此也可以采用其他更自动化,兼容性更广的方法来进行Web测试。
在Windows下进行自动化测试,个人觉得最合适的方法就是WSH+javascript了,可以使用WScript对象和众多ActiveX组件来完成诸多功能,而且语法和普通javascript都一样,主要需要熟悉的就是各个组件的接口。
使用js进行IE测试的流程是:
1.通过WScript.createObject创建一个IE对象,并绑定它的事件回调(Event Callback/Sink)
2.调用IE对象的navigate2方法,打开指定的网页,并将其Visible属性设置为true
3.在IE对象的OnDocumentComplete事件中,检查网页是否已经完全载入(不然访问document对象会有问题)
4.通过document对象访问各个HTML对象以及其计算出来的CSS属性,并模拟用户输入进行功能性测试
5.在最后调用IE对象的quit方法关闭IE,如果为了保险,可以找到所有的IE窗口,向其发送Alt+F4按键将其关闭
6.将得到的测试信息通过SMS(例如定制的HTTP接口)或者电子邮件(通过CDO.Message对象)发送到对应人员
上面是大致的流程,具体在设计和编码的时候,会遇到一些其他的问题:
1.JS中如何创建与绑定事件回调
2.如何在测试中绕过IE的阻止自动弹窗的设置,使得可以进行用户模拟点击打开新窗口的测试(不然弹窗会被阻止)
其实在创建一个ActiveX组件的时候,WScript.createObject方法第一个参数是组件名,第二个参数就是事件回调函数的前缀了。例如对于IE对象来说,它的组件名是InternetExplorer.Application,对应的事件有DocumentComplete、OnQuit等(参见DWebBrowserEvents2),假设我希望收到DocumentComplete事件通知,可以这样写代码:
var shouldQuit = false;
function
_eventsDocumentComplete(obj, url) {
WScript.Echo(url);
}
function
_eventsOnQuit() {
shouldQuit =
true;
}
var browser =
WScript.createObject(""InternetExplorer.Application"",
""_events"");
browser.navigate2(""//www.shendu.com"");
browser.visible =
true;
while(!shouldQuit)
{
WScript.sleep(100);
}
在上面的代码中需要加入一个while循环,这样才能不退出程序,继而收到事件响应。
在HTML文档都已经载入完毕以后,就可以访问browser的document对象获取DOM树,进行一系列操作和测试了,例如通过document.getElementById('btnSumbit').click()模拟form提交之类的。
另外,在IE中,如果通过代码模拟点击想产生一个新窗口,往往会被IE自动弹窗阻拦功能挡住,就是平时常见的顶部提示阻止了一个弹窗的细黄条。在测试过程中,我们往往需要模拟用户输入产生自动弹窗,这时候,需要在测试的时候去掉这个功能,然后在测试结束的时候再打开这个设置。要做到这一点,只需要修改注册表的HKEY_CURRENT_USER下的\Software\Microsoft\Internet Explorer\New Windows\Allow项,添加上对应的域名即可。在JS里可以这样写:
//对host这个域名允许自动弹窗
var shell =
WScript.CreateObject(""WScript.Shell"");
var regKey =
""HKCU\\Software\\Microsoft\\Internet Explorer\\New
Windows\\Allow\\"" + host;
shell.RegWrite(regKey,
0, ""REG_BINARY"");
//测试代码
//...
//恢复自动弹窗阻止
shell.RegDelete(regKey);
另外,进行IE测试需要打开Windows桌面才行,因此它有一个比较郁闷的要求,就是不能是未登录状态,我们为了解决这个问题,是开了一个Windows虚拟机,在虚拟机里面专门设置了计划任务运行相关这个测试js的。
因为IE测试限制很多,因此我们平时也可以采用phantomjs进行测试。phantomjs是一个内嵌了Webkit的无界面浏览器(headless browser)。通过phantomjs定义的一系列接口,我们可以实现很多Web自动化的测试,例如打开网页,监控每个访问,并生成HAR格式的图形,给网页生成截图,打开新浪微博模拟登陆获取微博信息等。在phantomjs的examples目录中有很多例子可以学习,例如生成HAR流量图的netsniff.js等。下面是一个生成网站截图的例子:
var page = new WebPage();
page.open(encodeURI(""//www.shendu.com""),
function (status) {
if (status !==
'success') {
console.log('Unable
to load page!');
} else {
window.setTimeout(function
() {
page.render('snapshot.png');
phantom.exit();
}, 200);
}
});
另外,如果需要将查看HAR流量图自动化嵌入自己网站的,网上也有开源的程序可以使用。
上面的两种测试方法都是通过javascript做的,其实,平时在windows下熊猫写了不少javascript的实用程序给自己和朋友们用,尤其是那些不懂程序的朋友。例如生成费用分摊Excel表的功能,把图片转化为文字的功能,分析一些格式文件生成其他文件的功能等。
因为Windows环境上缺省就可以通过WSH运行javascript,而IE/Word/Excel/PowerPoint/WMI等都可以通过js来操作,因此对windows来说,WSH+js是一个非常实用的工具。
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标软件测试之测试技术频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号