WebTest 比拼 Selenium:模拟和真实浏览器上的测试

  • Geoffrey Wiseman
  • 乔梁

2007 年 11 月 5 日

话题:敏捷测试语言 & 开发文化 & 方法

Web 应用软件的功能测试工具有很多种,但它们最根本的差异在于:某些工具可以驱动一个或多个真正的浏览器以便得到完全真实的环境,比如 Selenium,而另一些工具只是模拟 Web 浏览器的操作,比如 Canoo WebTest。Marc Guillemot这两种工具进行了对比,根据他的观点,WebTest 以 13:5 的比分获胜。

Marc 就以下方面内容对这两种工具进行了对比和评分:

Canoo WebTest

Selenium

Tied

Reports Browser Fidelity Testing Ajax
Speed Beginner Friendly

Integration into Development Process Support for Badly Formatted HTML Code

Scalability Multi-Language Support

Capture JS Errors



Documentation



Predictable Behaviour



XPath Support



Extensibility



Data-Driven Tests



Internationalization Support



Support for Non-HTML Content



Marc 认为,这些测试不够快,但“WetTest 的工作不多,所有测试都运行在 JVM 上”。他也提到 Selenium 无法捕获 Javascript 错误导致的测试失败:

只要你的单元测试通过了,你就不在意编辑错误了吗?肯定不是!但事实上,Selenium 就是这样的,因为它不能检测到你的应用程序中的 javascript 错误(除非这些测试直接导致测试失败)。

另外,他也提到 Ajax 测试(一般来说,大家都认为这是浏览器模拟器的弱点)是一种纽带:

与一般的想法相反,你并不需要在浏览器中运行你的 JavaScript 测试来测试 AJAX 功能。HtmlUnit 和 WebTest 可以完成这样的工作,甚至可以称为完全胜任这样的工作,因为它允许更好地测试页内请求,使不可预知的浏览器行为成为可预知的(参见我前一个帖子)。

另一方面,他相信 Selenium 可以支持多种语言,“Selenium RC 可以与不同的开发语言 (Java、Ruby、PHP 等等) 结合,而 WebTest 只能与 Ant 结合使用”,还支持不规范的 Html 以及真实的浏览器:

HtmlUnit 对 JavaScript 支持已经大幅改善,但还不能(且永远不可能)与真正的浏览器行为一模一样。尽管 Selenium 也更改了一些 Web 应用的 JavaScript 正常执行,但它使用真正的浏览器工作,所以已经和浏览器的标准行为相当接近啦。

作为 Canoo WebTest 和 HtmlUnit 的首席开发人员,Marc 明显倾向于他所接纳的这种形式的工具,在与他讨论之前,请一定要先读一下他的分析报告:

显然,作为 WebTest(和 HtmlUnit)的负责人,我的确是有倾向性的。但是,我也有多年开发和维护庞大的功能测试套件的经验。客观一点儿说,我可能在其它方向上过分担心了,应该相信 Selenium。当然,我将不断地修正我在 Selenium 理解上的错误。但请您在开始批评我之前,一定要读一下这篇文章。

已经总结了这些反馈。Vitaly 认为,WebTest 和 Selenium 的关系可以看作是苹果和桔子的关系。“Selenium,WebTest(HttpUnit),DBUnit,JUnit 和其它测试工具是互补的。有些事用这个工具可能完成,用另外一个工具却不成。”还有些人讨论了录制回放和脚本测试各自的优点,以及测试可维护性。Murali 推荐使用PragmaticQA Element

Christian反驳了 WebTest 对 Ajax 支持的说法,并提及在他的应用中,“由于 HtmlUnit 不能解析 Dojo 的 import 子句,即使最简单的页面也会抛出异常。”

而 Simon 认为,对浏览器保真度最重要的一点就是:

象 WebTest 这样的工具有点太理论化了,它想证明代码完全正常工作,但是只能在理想环境下,与生产环境相去甚远。真正的用户使用的是 IE 或 Firefox,而 Selenium 可以让我们在“真实的”条件下做测试,例如有内存泄漏问题的脆弱的浏览器,和不符合标准的代码。

没有客户使用 WebTest 使用的引擎,这意味着尽管我们知道它在某种环境上运行得很好,但并不意味着真的没有麻烦。相反,我们的 Selenium 测试运行在 Firefox 之上,也运行在 IE 之上,所以它会捕获跨平台使用中发生的很多问题。

最后,Kent Tong设想了结合两种方法的途径

是否可以开发这样一种中间层,即大家只写一套测试,即可以运行在 WebTest 上,又可以运行在 Selenium 之上?这样,大家就可以得到 WebTest 和 Selenium 各自带来的好处了。

你用过这些工具吗,或者其它功能测试工具?这会吸引你参与讨论下一代功能测试工具吗?更多的信息,请阅读Canoo WebTestSeleniumTesting下一代功能测试工具

英文原文链接:WebTest vs. Selenium: Real and Simulated Browser Testing
敏捷测试语言 & 开发文化 & 方法