如何轻松和安全地构建的满足合规要求的智能产品,实现业务需求?4月26日,告诉你答案! 了解详情
写点什么

.NET 平台下 Web 测试工具横向比较

  • 2009 年 4 月 13 日
  • 本文字数:1853 字

    阅读完需:约 6 分钟

在浏览器中打开页面并加以判断,无疑是测试一个 Web 应用程序最直接的方式。借助一款合适的自动测试工具或框架,测试人员就可以在一定程度上从繁重的手动测试工作中解放出来。Ruby 平台下的 Watir 无疑是这方面的姣姣者,因此被大量用于 Web 应用程序的回归测试或验收测试。不过对于使用.NET Framework 的技术团队来说,Watir 不一定是最好的选择。目前社区中已经出现了几款.NET 平台下的 Web 测试框架,测试人员现在就可以使用自己最熟悉的语言来实现同样的功能,并与自己的开发环境无缝集成。

WatiN

WatiN 是 Watir 的“应对之作”,使用 C#语言开发,不过能够使用任意.NET 语言编写测试代码。WatiN 1.0 只支持 IE 浏览器,不过从 2.0 版本开始也能自动操作 FireFox(需安装插件)浏览器了。其最新版本是 2 月 19 日发布的 2.0 CTP3 ,对面向 FireFox 的相关功能进行了增强并修改了一些 bug。其附属项目 WatiN Test Recorder 支持对浏览器操作的捕获,并自动生成测试代码。WatiN Test Recorder 目前刚发布了 alpha 版本,您可以从它的主页上跟进其最新消息。WatiN 是一个开源项目,使用 Apache License 2.0 协议发布。

Selenium

严格说来, Selenium 是一套完整的 Web 应用程序测试系统,它包含了测试的录制( Selenium IDE )、编写及运行( Selenium Remote Control )和测试的并行处理( Selenium Grid )。Selenium 的核心 Selenium Core 基于 JsUnit ,完全由 JavaScript 编写,因此可运行于任何支持 JavaScript 的浏览器上。Selenium Core 由一种指定格式的 HTML 文件驱动,在一定程度上增强了测试套件(Test Suite)的可读性。Selenium Remote Control 允许测试人员使用常见的语言(自然包括C#等.NET 语言)编写测试代码,并支持不同操作系统下的各种主流浏览器。Selenium Grid 的作用是将测试分发至多台机器,这样便可大大加快测试速度。与WatiN 相同,Selenium 也是一款同样使用Apache License 2.0 协议发布的开源框架。

LTAF

Lightweight Test Automation Framework for ASP.NET (轻量级 ASP.NET 自动测试框架,下文简称为 LTAF)是一款由 ASP.NET QA 团队开发的框架,并用于产品的回归测试。测试人员能够使用任意.NET 代码编写测试,并使用内置的 API 操作 DOM 元素。LTAF 最近发布了 April Update 并包含了框架代码,它的 Release Note 记录了框架的使用方式。赵劼最近在博客中谈到了利用 LTAF 对 ASP.NET MVC 应用程序中的视图作独立的单元测试,他在文章中对 LTAF 有这样的评价:

……虽然在某些方面(例如 DOM 元素的选取)不如其“竞争对手”,但是 LTAF 自有其独到之处:

  • 由于直接在浏览器中运行,它天生便支持现有的——以及未来可能出现的任意浏览器。
  • 由于直接部署在被测试的网站中,因此测试代码和网站页面是在同一个进程中。

第一点优势自不必说,而第二点更是关键。试想 WaitN 和 Selenium,都是通过编写代码在浏览器中打开页面。这意味着我们的在测试代码和被测试的网页分别在不同的进程中。在这个前提下,如果我们要将测试代码中定义的数据传递给被测试的网页(也就是视图对象),我们就必须进行跨进程的通信。而无论怎么实现,都逃不过“序列化”一途,这无疑增加了复杂度。而使用 LTAF 之后,这个问题瞬间烟消云散了,因为我们可以直接在内存中“传递”测试数据,一切都只是个引用而已。

不过任何事物都具有两面性,LTAF 也有一些难以天生的,而且是永远无法弥补的缺点。例如:

  • 由于 LTAF 将待测试的页面放置在 Frame 中,因此该页面上的 window.top 等基于浏览器 frame 结构的属性会被改变。
  • 由于 LTAF 的本质是使用 JavaScript 来操作 DOM,这意味着任何会阻塞程序进行的操作(例如 alert)都不能使用,否则将阻塞整个测试过程。

幸运的是,这两点都不会成为严重的问题。对于第一种情况,我们只需要编写一个自定的 getTop 方法来替换直接访问 windows.top 的做法即可。而第二种情况——老赵从来不喜欢 alert 或 confirm 这种“纯浏览器功能”,因为它们会带来很差的用户体验,更何况现在的 JavaScript 类库 / 框架都能很轻松的做出这种效果,您觉得呢?

比较

虽然老赵推荐使用 LTAF,不过究竟哪款测试框架最适合您的项目,还需要读者根据需要自己的需要做出判断。以下表格列出了他们的横向比较:

框架 WatiN Selenium LTAF 浏览器支持 IE / FireFox IE / FireFox / Opera / Safari 任意 自动生成代码 有,但目前不支持 FireFox 浏览器 有 无 开源协议 Apache Licence 2.0 Apache Licence 2.0 不开源,但发布代码 其他 / 可将测试分布于多台机器执行,加快速度 测试代码与网站在同一进程中。

2009 年 4 月 13 日 07:237388
用户头像

发布了 157 篇内容, 共 47.0 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

想法

BerryMew

2021你好 | 一名五道口程序员的年终总结

herongwei

程序员 职场 自媒体 年终总结 新年

上地七街

潇潇雨歇

在 Emit 代码中如何await一个异步方法

八苦-瞿昙

架構師訓練營 大作業一

ilake

RocketMQ避坑指南:你部署的RocketMQ集群真的是高可用?

中间件兴趣圈

架构 RocketMQ 故障分析 消息队列

第一周架构方法-练习-食堂就餐卡系统设计

潘涛

架构师训练营 4 期

【计算机内功修炼】一:看完这篇还不懂线程与线程池你来打我

码农的荒岛求生

高并发 线程池 进程 高性能 线程’

架构师大作业

_

大作业 架构师训练营第 1 期

架构师训练营第十一周笔记

李日盛

笔记

第九周 作业1

Mr_No爱学习

数据爬虫

RainGod

爬虫

「架构师训练营 4 期」 第一周 - 1001

凯迪

架构师训练营—大作业(一)

Geek_shu1988

架构师训练营—第十三周学习总结

Geek_shu1988

【计算机内功修炼】二:读取文件时,程序经历了什么

码农的荒岛求生

后端 文件 操作系统 进程 线程’

数字版权资源价值日益凸显

CECBC

版权保护

区块链游戏开发注意事项

CECBC

区块链 区块链游戏

架构师训练营第十一周作业

丁乐洪

微信气质

池建强

微信

架构入门感悟之十一

笑春风

从考研失败到最具成长力员工,这个2020就像过山车一样

Java鱼仔

程序员 面试 程序人生 考研

意想不到,这个神奇的bug让我加班到深夜

码农的荒岛求生

bug修复

架构师训练营第十一周作业

李日盛

一次线上cpu过高问题

kcnf

「架构师训练营 4 期」 第一周 - 001002

凯迪

架构师训练营—第十三周作业

Geek_shu1988

交报告 | 2020年读完的50本书

浪亦有道

探讨典型互联网系统使用的技术方案

andy

时间戳——区块链不可篡改特性的重中之重

CECBC

区块链

LeetCode题解:264. 丑数 II,暴力法,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

.NET平台下Web测试工具横向比较_.NET_赵劼_InfoQ精选文章