33、网页应用测试工具与百万网页测试框架解析

网页应用测试工具与百万网页测试框架解析

1. Windmill测试工具介绍

Windmill是一款用于网页应用测试的开源工具,可从 官网 免费获取。它具有诸多实用特性,在网页应用测试领域有独特优势。

1.1 从shell运行JavaScript测试

可以使用以下命令在shell中运行JavaScript测试:

windmill shell 'browser' 'url'

例如:

Running: At prompt, In [1]: run_js_tests('/path/to/js_tests_dir')
1.2 调试功能

Windmill最突出的调试特性是能够直接从shell执行Windmill操作,无需手动操作浏览器。以下是一个与浏览器交互的shell会话示例:

zsh% windmill shell firefox http://www.google.com
(Start the Windmill server in shell mode)
Started ['/Applications/Firefox.app/Contents/MacOS/firefox-bin', '-profile',
'/var/folders/YO/YOAvf2hSGt0+VnBIAKuImE+++TM/-Tmp-/tmpy0xq6y.mozrunner',
'http://www.google.com/windmill-serv/start.html']
(Windmill output telling you what was launched and from where)
In [1]: from windmill.authoring import WindmillTestClient
(Import the Windmill Test Client)
In [2]: client = WindmillTestClient(__name__)
(Access the Windmill client) 
In [3]: client.click(name=u"q")
(Click on a DOM node in the browser with a name attribute of "q")
Out[3]: {u'endtime': u'2009-3-9T18:1:3.813Z',
 u'method': u'click',
 u'output': None,
 u'params': {u'name': u'q', u'uuid': u'101d4630-256b-11de-b49f-002332da2796'},
 u'result': True,
 u'starttime': u'2009-3-9T18:1:3.811Z',
 u'suite_name': u'windmill.bin.shell_objects',
 u'version': u'0.1'}
(All of the output associated with the click action)
1.3 客户端调试特性

除了上述调试功能,Windmill还内置了一些客户端特性,用于调试文档对象模型(DOM)和JavaScript。

  • Firebug Lite :集成在Windmill IDE中,提供了与Firebug Firefox插件类似的功能,可在所有浏览器、测试窗口和Windmill IDE中使用。其主要目标是让用户随时与网页应用的任何部分进行交互,包括DOM检查器、JavaScript控制台以及HTML、CSS、Script、DOM、XML HTTP Request(XHR)等视图。
  • LookupNode :可利用Firebug Lite控制台,使用Windmill内置功能在DOM中搜索节点。 lookupNode 方法非常实用,它能跨窗口、框架和内联框架查找定位器以找到节点。以下是使用示例:
>>> lookupNode({name:'q'})
<input value="" title="Google Search" size="55" name="q" maxlength="2048" autocomplete="off">
>>> lookupNode({name:'q'}).name
"q"
>>> lookupNode({name:'q'}).parentNode
<td nowrap="" align="center">
//testing xpath lookup 
>>> lookupNode({xpath:"/html/body/center/form/table[1]/tbody/tr/td[2]/input[2]"}) 
<input value="" title="Google Search" size="55" name="q" maxlength="2048" autocomplete="off">
2. Windmill与其他测试工具对比

市面上有多种用于浏览器网页应用测试的解决方案,如Watir、Selenium、Twill和WebDriver等,它们各有优缺点。

工具名称 优点 缺点
Windmill 具有记录器、集成Firebug Lite、集成检查器,支持跨域和SSL测试,对新测试人员入门门槛较低 运行在内容安全模型内,无法访问浏览器某些部分,如确认对话框或文件上传;尚未有类似Selenium GRID的分布式测试解决方案
Watir - -
Selenium 拥有GRID项目,可进行分布式测试 -
Twill 测试运行速度快,测试语法更易读 缺乏对大量使用JavaScript的应用的测试能力
3. 百万网页测试框架的发展历程

百万网页测试框架的发展源于Mozilla项目团队的一系列需求和创新。

3.1 早期工具:Spider

最初,Mozilla项目团队为验证网页元素(如HTML标签或DOM元素)的使用情况,创建了Spider工具。该工具以模块化方式遍历网页,检查特定标签或元素,并允许快速添加或交换“用户钩子”以增加各种测试和分析功能。其核心代码如下:

while (this.mCurrentUrl != null && !isGoodUrl)
{
       var href = this.mCurrentUrl.mUrl;
       var lhref = href.toLowerCase();
       if (this.mCurrentUrl.mDepth > this.mDepth)
       {
            dlog('CSpider.loadPage ignoring ' + this.mCurrentUrl.mUrl +
                 ' mCurrentUrl.mDepth > ' + this.mCurrentUrl.mDepth+
                 ' CSpider.mDepth ' + this.mDepth);
            this.mCurrentUrl = this.mPagesPending.pop();
       }
       elseif (       lhref.search(/\.aac$/) != -1 ||
            lhref.search(/\.ads$/) != -1 ||
            lhref.search(/\.adp$/) != -1 ||
            lhref.search(/\.app$/) != -1 ||
            ...
            lhref.search(/\.xls$/) != -1 ||
            lhref.search(/\.xpi$/) != -1 ||
            lhref.search(/\.zip$/) != -1
       )
       {
            dlog('CSpider.loadPage Bad Extension blocked ' + href);
            this.mCurrentUrl = this.mPagesPending.pop();
       }
       else if (this.mRespectRobotRules && isRobotBlocked(href, this.mUserAgent))
       {
            msg('CSpider.loadPage Robot Rules blocked ' + href);
            this.mCurrentUrl = this.mPagesPending.pop();
       }
       else
       {
            isGoodUrl= true;
       }

Spider工具扩展可从 这里 获取。

3.2 Sisyphus框架的诞生

三年后,团队因反复运行半自动化JavaScript测试感到沮丧,于是利用Spider工具创建了基于JavaScript的Sisyphus框架。该框架以希腊神话中不断推巨石上山的国王Sisyphus命名,允许JavaScript测试在大量真实网页上递归运行,使团队无需在重大更改或发布回归测试时随时待命运行测试。

3.3 工具的融合与发展

2008年12月,团队使用的工具只能测试约500个网页且无法扩展,同时存在Firefox渲染网页与扩展交互的问题。于是,他们希望工具具备以下特性:
- 从alexa.com生成自定义URL集,最多可测试一百万个URL。
- 在测试框架(Spider)中管理大量URL集。
- 启动选定版本的Firefox,打开页面,收集内存泄漏和断言信息,然后退出Firefox(Sisyphus)。
- 加载扩展(Sisyphus)。
- 跨崩溃继续测试(Sisyphus)。
- 除了打开网页,还能通过链接进行更严格的测试(Spider)。

团队发现Alexa有百万级URL列表,下载并转换为测试脚本可理解的格式。同时,将Spider工具的数据库与现有框架结合,取得了良好效果。此外,还发现Sisyphus可加载扩展,这引发了对扩展测试的思考。

以下是Sisyphus测试时内存泄漏和断言的输出示例:

  • 内存泄漏
nsTraceRefcntImpl::DumpStatistics: 701 entries
nsStringStats
 => mAllocCount:          14412
 => mReallocCount:         1458
 => mFreeCount:           14256  --  LEAKED 156 !!!
 => mShareCount:           9327
 => mAdoptCount:           1150
 => mAdoptFreeCount:       1147  --  LEAKED 3 !!!
  • 断言
###!!! ASSERTION: nsWyciwygChannel::GetOriginalURI - mOriginalURI not set! : 
'mOriginalURI != mURI', file c:/work/mozilla/builds/1.9.1-trace-malloc/mozilla/
content/html/document/src/nsWyciwygChannel.cpp, line 182

测试后,会在日志文件中打印每个URL的退出状态,以判断测试是否崩溃。例如:

http://www.cnn.com: EXIT STATUS: NORMAL (9.594268 seconds)
Assertion failure: !rt->gcRunning, at /work/mozilla/builds/1.9.1/mozilla/js/
src/jsgc.cpp:1873 http://www.download.com: EXIT STATUS: CRASHED signal 5 SIGTRAP 
(100.560452 seconds)
4. Sisyphus工具使用方法

Sisyphus本身不安装Firefox,但可启动之前安装的特定版本。当前使用顺序为:选择已安装的Firefox版本,启动Firefox,安装扩展,运行测试,退出Firefox,可重复操作。

命令行示例如下:

./tester.sh -t "$TEST_DIR/tests/mozilla.org/top-sites/test.sh \
-s $TEST_DIR/tests/mozilla.org/top-sites/global1000.txt -D 0 -r" \
firefox 1.9.1-tracemonkey debug

参数说明:
- -t :指定要运行的测试。
- -s :包含要测试URL的文件。
- -D :蜘蛛搜索深度(0表示仅加载当前URL)。
- -r :要测试的Firefox版本。

关键环境变量:
- XPCOM_DEBUG_BREAK=stack :捕获断言时的堆栈信息。
- XPCOM_MEM_LOG=1 :记录泄漏数据。

该工具非常灵活,可专注于断言测试、内存泄漏测试等。它能自动加载数千个网站,无需手动输入URL,还能测试不同地区的网站,而无需了解其语言和文化。不过,一些测试集运行时间较长,如百万URL列表需要数月时间,团队将考虑优化测试时长和频率。同时,为避免在活跃分支上浪费时间查找已修复的问题,会针对不同分支选择合适的URL集进行测试。

当发现崩溃时,需进一步分析日志文件,查找具体原因。例如,根据退出状态和相关错误信息,定位到崩溃发生的URL和代码位置,结合环境变量记录的堆栈和泄漏数据,深入排查问题。

总体而言,Windmill和百万网页测试框架在网页应用测试中各有其独特价值,能帮助开发者更高效地发现和解决问题,提升网页应用的质量。

网页应用测试工具与百万网页测试框架解析

5. 百万网页测试框架的优势与挑战
5.1 优势

百万网页测试框架具有显著的优势,使其在网页测试领域具有重要价值。
- 大规模测试能力 :能够处理大量的网页测试任务,从数百个到数百万个网页的测试都可以实现。这对于全面评估浏览器在各种真实网页环境下的性能和稳定性至关重要。
- 灵活性 :可以根据不同的需求生成自定义的URL集,支持不同版本的Firefox以及加载各种扩展进行测试。例如,可以选择不同的构建类型(如标准、调试或优化版本),并针对不同的测试重点(如断言测试、内存泄漏测试等)进行配置。
- 自动化程度高 :工具允许自动加载大量网站,无需手动输入URL,大大提高了测试效率。同时,能够自动收集和记录测试数据,如内存泄漏信息、断言错误和退出状态等,方便后续的分析和问题定位。
- 跨文化和语言测试 :可以测试不同地区和语言的网页,而无需了解具体的语言和文化背景,有助于发现浏览器在处理各种网页内容时的通用问题。

5.2 挑战

尽管百万网页测试框架有很多优势,但也面临着一些挑战。
- 测试时长 :部分测试集运行时间极长,如百万URL列表的测试可能需要数月时间。这不仅消耗大量的时间和资源,还可能导致测试结果滞后,无法及时发现和解决问题。
- 恶意行为风险 :频繁测试实时网站可能会被视为恶意机器人,对网站造成不必要的负担,甚至引发安全问题。因此,需要合理控制测试的频率和方式。
- 问题发现的时效性 :在活跃分支上,重大问题通常会被社区迅速发现和解决。如果测试时间过长,可能会发现一些已经被修复的问题,浪费测试资源。

6. 测试框架的优化思路

为了应对上述挑战,需要对百万网页测试框架进行优化。以下是一些可能的优化思路:
- 测试时长优化
- 并行测试 :引入并行测试机制,同时在多个机器或线程上运行测试任务,以缩短整体测试时间。
- 智能抽样 :根据网页的重要性、流量等因素进行智能抽样,选择部分具有代表性的网页进行测试,减少测试规模。
- 增量测试 :对于已经测试过的网页,只对有变化的部分进行重新测试,避免重复测试。
- 恶意行为风险控制
- 设置合理的测试频率 :根据网站的性质和流量,设置合理的测试间隔时间,避免对网站造成过大的压力。
- 模拟正常用户行为 :在测试过程中,尽量模拟正常用户的操作行为,如随机的浏览时间和操作顺序,减少被识别为恶意机器人的可能性。
- 问题发现时效性提升
- 分阶段测试 :对于活跃分支,先进行小规模、快速的测试,及时发现和解决紧急问题。然后再进行大规模的长周期测试,确保全面覆盖。
- 实时监控和反馈 :建立实时监控系统,及时发现测试过程中的问题,并将结果反馈给开发团队,以便快速响应。

7. 测试框架的未来展望

随着网页技术的不断发展和浏览器功能的日益复杂,百万网页测试框架也需要不断进化和完善。未来,可能会朝着以下几个方向发展:
- 更强大的自动化功能 :进一步提高测试的自动化程度,实现更多的自动化操作和分析。例如,自动识别和分类问题,提供更详细的问题报告和解决方案建议。
- 与新兴技术的融合 :结合人工智能、机器学习等新兴技术,对测试数据进行更深入的分析和挖掘,发现潜在的问题和趋势。
- 支持更多浏览器和平台 :除了Firefox,还将支持更多的浏览器和操作系统,以满足不同用户的需求。
- 更好的用户体验 :优化工具的界面和操作流程,使其更加易用和友好,降低用户的使用门槛。

8. 总结

网页应用测试是确保网页质量和用户体验的重要环节。Windmill作为一款功能丰富的网页应用测试工具,为开发者提供了便捷的调试和测试手段。而百万网页测试框架则通过不断的创新和发展,实现了大规模网页的自动化测试,能够帮助发现浏览器在处理各种网页时的性能和稳定性问题。

虽然这两个工具都面临着一些挑战,但通过合理的优化和不断的改进,它们将在未来的网页测试中发挥更加重要的作用。开发者可以根据具体的需求选择合适的工具和测试策略,以提高网页应用的质量和可靠性。

总之,无论是Windmill还是百万网页测试框架,都是网页测试领域的有力工具,它们的发展和应用将有助于推动网页技术的不断进步和提升用户的上网体验。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值