热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JavaScript开发测试工具概览

作者:NathanielT.Schutta原文:http:www.javaworld.comjavaworldjw-05-2009jw-05-javascript-tools-ov

作者:Nathaniel T. Schutta
原文:http://www.javaworld.com/javaworld/jw-05-2009/jw-05-Javascript-tools-overview.html
翻译:Tim

JS是可能很现今世界上用的最多,同时也是最被误解编程语言了。虽然JS作为Web开发的工具已经存在了很久,许多开发者仍然不喜欢使用它,因为他们早就受够了浏览器兼容性问题,受够了用alert来作为调试工具。有一阵子,程序员们甚至退出了使用JS开发,而把这个难题丢给界面设计人员。直到有一天,Jesse James Garrett叫响了Ajax这个词, 新一代的Web应用诞生了,程序员们对JS又重新燃起了热情。

如果你最近刚刚回到JS开发领域的话,你可能会发现,JS开发工具的现状已经今非昔比了。JS开发再也不是只能用一个文本编辑的时代了。这边文章里,我们将会介绍现在流行的JS开发工具包,包括IDE,调试工具,编码和UI测试工具,以及其他有用的工具。

IDE(集成开发环境)

当我们还在用CRT显示器的时代(2000年前后),最简陋的文本编辑器就是我们开发JS脚本的IDE了。那时候程序员没有任何编辑工具能实现自动完成,代码重构这些工作,工作都要全部靠程序员手工完成。今天,情况已经大有改观了。有鉴于动态编程语言的在近些年的兴起,特别是Ajax得到广发运用,今天的IDE已经能够支持一些动态语言了。

NetBeans, IntelliJ, 和 Eclipse 都已经支持Javascript,而且不仅仅是支持语法高亮。而且还支持代码自动完成(如提示你一个类库中函数有那些参数),错误高亮,调试,有的甚至还包含了代码重构。

clip_image002

图一 展示了NetBeans里的JS代码自动完成功能

当然,由于JS语言的动态特性,在JS世界里今天IDE仍然无法做到像Java里那样完善的功能,不过我们也没必如此要苛求它们。

Firebug

Firebug虽然只是一个工具,可它在JS世界里的影响力大到甚至有人用它的出现把Web开发的分为了BFB(Before FireBug出现之前的史前时代,那时候我们不得不无数次的使用alert来调试)和AFB (After FireBug)。 FireBug的出现使得Web开发效率得以大大提高。不使用FireBug来开发web应用就好像在VI里写java程序。不是不可能,只是太痛苦。

Firebug 是一个免费开源的Firefox插件,包含了一系列非常好用的工具,例如DOM的浏览器,CSS编辑器,网络监控,还包括:

一个互动JS命令行工具,你可以快速的尝试你的代码

提供了记录日志和控制台

具体的有用的错误信息(你再也不用为面对“Object not Found” 这样的毫无头绪的错误信息发愁了)

完善的JS调试和调优工具

图二,显示了Firebug的脚本页面

clip_image003

有了Firebug,JS编程终于开始从痛苦变得有趣了。

Firebug Lite

Firebug虽好,可它终究是一个Firefox插件,它没法帮你解决其他浏览器里出现的问题。现在其他的浏览器里,还没有可以和Firebug媲美的工具。这时候你可以用Firebug Lite来替代。它不仅提供了大多数的Firebug的日志功能,还提供了错误控制台(包含了JS命令行工具),HTML,CSS和DOM的查看器, 甚至还提供了一个很好用的XHR查看工具。

虽然它不能完全达到和Firebug一模一样的功能,Firebug lite已经可以解决大多数问题了。你可以把它添加到任何你需要调试的网页上;它也可以作为一个书签被随时使用。

YSlow

你是不是常觉得自己开发的网页反应有点慢 ?YSlow可以帮你解决这个问题。YSlow可以给你的页面打个分,根据是一系列Yahoo的性能团队制定的常见性能标准。它的性能报告还可以提供打印版(你可以拿去跟人家炫耀你写的页面在YSlow中得的A)

图三显示了YSlow的示例页面性能测试报告

clip_image004

除了可以图形化的展示你的页面性能指标,YSlow列出了页面上所有组件的“失效时间,大小,响应时间,是否被压缩(gzipped)。它还可以帮你更容易的使用JSLint(后面会提到),帮你的JS和CSS做一次精简和”美容”

Hammerhead

Ajax时代,随着页面当中JS代码的增加,性能问题就变得越来越重要。尽管浏览器都不断的刷新着他们的JS性能评分,你还是需要一个工具来告诉你你的页面的性能数据究竟是多少。Hammerhead 可以帮你反复的装入一个页面,并给你一个装载时间的读数,这个读数可以是基于有缓存或没有缓存的情形。你可以导出这些数据,作为不断改进页面性能的基准。在开发过程中就应该关注性能问题,否则等到产品最后发布前再去解决,性能问题就会编程一个大麻烦。

测试你的JS代码

可能有很多人还不相信,JS代码也是可以测试(单元测试)的。实际上,现在你有许多可以选用的工具来测试你的JS代码,不管你是想用测试驱动的开发模型,还是行为驱动的开发模型BDD. 我们先看一些常见的JS单元测试,然后再看UI测试怎么做。

JsUnit

代码测试已经变成了编程的一项基本专业素养。今天的程序员早就熟练掌握了各种编程语言中的xUnit框架。JsUnit就是JS语言中的JUnit,允许你在浏览器里测试你的JS代码。类似在JUnit中创建一个TestClass,你需要创建一个Test HTML页面,并在其中引入JsUnit的核心库。

接下来你就写一系列的测试方法:使用JsUnit的断言,true,false,null,equals 等等。类似的,JsUnit也提供了测试前的准备setup和结束后的清理(tear-down)等概念,特别的它还有页面级的setup。它也允许你把一组相关的测试页面一起执行,作为一组测试套件(test suite)

JsUnit提供了一个有界面的测试执行引擎,用传统的绿色和红色的横条来展现测试结果。 如下图所示

clip_image005

图4 JSUnit的测试执行界面

有了界面的测试执行引擎,那如何对JsUnit的单元测试做持续集成呢(CI)?你需要使用JsUnit服务器端,它有三个功能:

1. 运行结果的记录

2. 从ant或Junit来执行JsUnit测试

3. 在多台机器上执行JsUnit(可以是不同的操作系统和浏览器)

JsUnit的服务器端使用一个标准的ant build文件来进行配置,你可以设定需要使用的浏览器,指向你的测试套件的URL,以及那些需要运行测试的远程机器。配置好后,执行这些测试就只需要直接调用这个Ant任务就可以了。

JSSpec

JSSpec把行为驱动的开发模式引入了JS编程。跟使用传统的断言进行测试不同,在BDD中你需要先创建一些“行为说明”,使用“应该”这样的词来描述代码的行为。例如,以前你需要使用assertEquals地方,你就需要写“应该是” JSSpec使用了诸如before_each 和 an after_each的段落来存放一些常用的代码段,它也有一次性的测试环境setup和销毁teardown的概念。如果你的代码针对不同浏览器设计了分支,你的测试也可以根据不同的执行引擎来进行条件执行。

图5 显示JSSpec的执行界面

clip_image006

JSSpec不仅可以在浏览器中运行,它也可以命令行(无界面)的执行。这要归功于John Resig的和Relevance公司的一些开发者的工作。

YUI Test

YUI Test 是Yahoo!对JS测试领域的又一贡献。虽然它不是直接来自xUnit框架,它对于熟悉TDD的程序员来说仍然很容易理解。你要做的就是在一个页面里写测试代码,使用类似JsUnit的断言。YUI Test 还引入了一些新的断言, 比较对象相同,和数据类型等。 也支持setUp和tearDown,你还可以使用一个属性_should.ignore来灵活的跳过一些测试。

和JsUnitJSSpec不同,YUI Test允许你模拟一些基本的用户行为,例如鼠标和键盘事件,它还允许你暂停一个测试,来配合所需要的异步服务器请求。测试也可以被组合成测试套件,并且在一个界面的测试执行引擎中调用。现在这个执行引擎还比较简单,不过它还在不断的发展,新的功能和视觉效果将会逐步实现。

Crosscheck

浏览器的不兼容一直是JS开发者最大的痛处。 JS 程序员的一个口头禅可能是”这代码在Firefox下面是好的。” 而且维护一堆运行不同系统,不同浏览器的测试机,并且对所有这些平台进行测试往往是很困难,甚至是不可能的。前面介绍的一些测试工具都必须在浏览器中运行,而浏览器运行测试代码的往往速度很慢。Crosscheck就是一个可以帮忙解决这些问题的工具。

CrossCheck模拟各种浏览器和操作系统的组合。因为它运行在JVM上,所以它的运行速度比在浏览器里执行测试要快很多。

现在Crosscheck已经有一阵子没有更新了,不过如果你仍然挣扎于一些跨系统跨浏览器问题的话,你也许应该试试这个工具。

界面测试

JS单元测试只是第一步,当你面临复杂的Ajax交互应用,你必须在用户界面上进行测试。虽然UI测试通常速度慢,而且测试代码容易损坏,但UI测试对于保证应用的质量仍然非常必要。

Selenium

Selenium是一个由一群在ThoughtWorks的工程师开发的网页测试工具。Selenium项目分成三个部分,IDE(一个Firefox插件),远程控制,和表格。如图六所示的IDE,支持用户录制一段网页交互的测试动作脚本,并且回放。同时也可以选择将录制好的动作导出成六种不同的编程语言,因此你可以灵活的将这些测试脚本导入到你所使用的工具中去。

clip_image007

Figure 6. The Selenium IDE

Selenium的远程控制组件是一个简单的服务器,它可以启动和关闭浏览器。有了这个控制端,你可以把Selenium的测试整合到你的持续集成测试服务器当中。网格部分进一步扩展了远程控制器,它允许你把测试发布到多台不同平台的机器上,同时执行,以此来加快测试运行的速度。

Watir

Watir是另一个由ThoughtWorks出品的网页测试工具。Watir是Web App Testing in Ruby的缩写,所以它支持测试人员用Ruby脚本语言来创建测试。Watir原来只能支持 IE,现在已经有了许多插件使它也支持其他浏览器了。

YUI Test

还有前面提到过的YUITest, 虽然它主要针对代码的单元测试,它也支持部分的模拟部分的DOM和用户交互。虽然它不如Selenium和Watir功能完善,但也不失为一个选择特别是当你已经用它来做单元测试工具时。

Utilities

工具, 有许多工具不属于上面提到的开发和测试类别,但它们同样对于你开发高质量的应用大有好处。下面一节我们会概述代码审查工具,压缩工具和文档工具。

JSLint

要写好Javascript并不是一件容易的事。即使是有经验的程序员也会犯下一些无心的错误,造成功能和性能上的问题。再加上,网上也泛滥这许多写的不好的代码,许多人会常常直接复制过来使用。JSLint是一个代码检查工具,它会审查你的代码,并找出一些常见的错误和不良习惯。遵循它给出的修改建议,你的代码质量会有很大提高。使用JSLint有两种方法,一种是直接将你的代码复制到它的网站上。另一种是可以在命令行中运行JSLint。

clip_image008

Figure 7. The JSLint verifier (Click to enlarge.)
Minifiers代码压缩器

随着页面中代码量的增加,JS代码的压缩也是提升网页性能的重要手段。压缩工具有许多选择,包括Doug Crockford's 的JSMin 和 YUI Compressor。 你可以尝试各种工具来找到最适合你的代码和build系统。无论你使用什么压缩工具,记住,当你的代码上线前,进行压缩是一个必须的步骤。

Documentation tools

文档工具

为代码创建文档是让代码可以长期使用和维护的必要条件。在JS领域,我们没有像Javadoc那样的标准,不过我们也有一系列的工具。Prototype使用PDoc,而YUI则使用YUI Doc., 这些文档都工具可以被引入到你自己的开发环境中。

总结

相比过去,今天JS开发的现状已经大大改观了。JS开发者不必再纯文本编辑器和alert来开发调试JS了。我们拥有了支持代码自动完成的IDE,功能强大的调试器,和各式各样的测试工具。JS语言已经成为了Web应用开发中的主流语言。

About the author

Nathaniel T. Schutta is a senior software engineer focused on making usable applications. A proponent of polyglot programming, Nate has written two books on Ajax and speaks regularly at various No Fluff Just Stuff symposia, universities, and Java user groups. In addition to his day job, Nate is an adjunct professor at the University of Minnesota, where he teaches students to embrace dynamic languages.


推荐阅读
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • java解析json转Map前段时间在做json报文处理的时候,写了一个针对不同格式json转map的处理工具方法,总结记录如下:1、单节点单层级、单节点多层级json转mapim ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 第十九天 - 类的约束、异常处理与日志记录
    本文介绍了如何通过类的约束来确保代码的一致性,以及如何使用异常处理和日志记录来提高代码的健壮性和可维护性。具体包括抛出异常、使用抽象类和方法,以及异常处理和日志记录的详细示例。 ... [详细]
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • Silverlight 实战指南:深入解析用户提交数据的验证与捕获机制
    本文深入探讨了Silverlight中用户提交数据的验证与捕获机制,详细分析了四种主要的验证方法:基本异常处理、DataAnnotation注解、IDataErrorInfo客户端同步验证以及自定义验证策略。通过实例解析,帮助开发者更好地理解和应用这些机制,提升应用程序的数据处理能力和用户体验。 ... [详细]
  • 深入解析CAS机制:全面替代传统锁的底层原理与应用
    本文深入探讨了CAS(Compare-and-Swap)机制,分析了其作为传统锁的替代方案在并发控制中的优势与原理。CAS通过原子操作确保数据的一致性,避免了传统锁带来的性能瓶颈和死锁问题。文章详细解析了CAS的工作机制,并结合实际应用场景,展示了其在高并发环境下的高效性和可靠性。 ... [详细]
  • 本文探讨了 TypeScript 中泛型的重要性和应用场景,通过多个实例详细解析了泛型如何提升代码的复用性和类型安全性。 ... [详细]
  • 本文介绍了如何使用Flume从Linux文件系统收集日志并存储到HDFS,然后通过MapReduce清洗数据,使用Hive进行数据分析,并最终通过Sqoop将结果导出到MySQL数据库。 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • 在Windows系统中安装TensorFlow GPU版的详细指南与常见问题解决
    在Windows系统中安装TensorFlow GPU版是许多深度学习初学者面临的挑战。本文详细介绍了安装过程中的每一个步骤,并针对常见的问题提供了有效的解决方案。通过本文的指导,读者可以顺利地完成安装并避免常见的陷阱。 ... [详细]
author-avatar
嘎嘎19850820
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有