15064861615

软件测试之Web功能性测试

发布时间:2021-3-29
来源:

在平时工作中时常需要对网站进行自动化测试,虽然一些简单的测试可以通过爬虫的方式来做,但是如果涉及到比较复杂的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("http://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("http://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是一个非常实用的工具。


更多新闻

专业测试,请联系我们!
15064861615