您如何使用单元测试Web UI?

时间:2008-08-11 00:05:37

标签: unit-testing user-interface selenium

我目前正在工作的公司正在使用Selenium进行统一测试我们的用户界面。您使用什么来对Web UI进行单元测试以及如何有效地进行测试?

15 个答案:

答案 0 :(得分:17)

我是Selenium的忠实粉丝。一些评论提到,说'单位测试你的网络ui'并不准确。但是,我确实发现Selenium对于在UI上执行那些接受和健全性测试非常有用。

入门的好方法是使用Selenium IDE作为开发的一部分。即,在开发过程中打开IDE并编写测试,以减少开发时间。 (而不是必须手动浏览用户界面才能测试你正在测试的任何东西,只需按一下按钮,Selenium IDE就会为你处理这个问题。这是一个非常节省时间!)< / p>

我的大多数主要用例场景都有Selenium RC测试来支持它们。您不能将它们视为xUnit框架的单元测试,但它们是针对特定功能的测试。他们写得很快(特别是如果你实现登录或设置测试用例等常用方法),快速运行,并提供非常紧凑的反馈循环。在那些意义上,Selenium RC测试与单元测试非常相似。

我认为,就像其他任何事情一样,如果你努力学习一个测试工具(例如,Selenium),你的努力将会得到回报。您提到您的公司已经使用Selenium进行UI测试。这很棒。使用它。如果您发现Selenium难以使用或令人困惑,请坚持使用。一旦你学习了一点API,学习曲线就不会那么陡峭了。

如果我正在开发一个网络应用程序,我很少编写大量代码而不用Selenium RC测试来备份它。这就是我找到Selenium的有效方法。 :)(希望这会回答你的问题......)

答案 1 :(得分:10)

我们在我的工作地点使用Watin,我们是.net商店,所以这个解决方案很有意义。我们实际上是从Watir(最初的ruby实现)开始并在之后切换。到目前为止,这对我们来说是一个非常好的解决方案

答案 2 :(得分:6)

好吧,如果您正确设计了应用程序,那么无论如何都不会在UI中包含大量逻辑。将完成的实际工作分成与UI分开的单元,然后测试它们会更有意义。

如果你这样做,那么UI中唯一的代码就是调用后端的代码,所以简单地测试后端就足够了。

我过去曾经使用过NUnit ASP(在我的工作中),如果你坚持对UI进行单元测试,我强烈建议你使用ANYTHING而不是NUnit ASP。使用起来非常痛苦,即使最小的UI更改(即使测试的主题实际上没有改变),测试也会失效(需要修改)。

答案 3 :(得分:4)

我们正在使用QuickTestPro。到目前为止它是有效的,但浏览器的选择是有限的。最好的部分是能够记录浏览器的活动,并将其转换为可编写脚本的步骤集。还有一个很好的.Net插件,所以如果你需要为测试的不同阶段做任何验证代码,你可以在程序集中编写方法并从脚本中调用它们。

答案 4 :(得分:4)

我们已经使用JSunit一段时间来进行单元测试......它可能与您所讨论的测试类型不同,但它确保您的JavaScript按预期工作。 / p>

您可以在浏览器中运行它,并且可以在Ant构建中设置它以远程地在一堆平台上针对一堆浏览器自动运行(因此您可以确保您的代码是跨浏览器以及确保逻辑是正确的。)

我不认为它取代了Selenium,但它很好地补充了它。

答案 5 :(得分:4)

我们使用Visual Studio 2008 Tester Edition。

<强>优点: 非常擅长捕获用户交互

捕获Ajax调用

将用户输入映射到数据库,XML或CSV文件

非常容易

捕获的测试可以转换为C#以获得更多控制

相同的测试可用于负载测试和代码覆盖

<强>缺点:

VS2008测试版是来自普通开发者版的单独SKU,这意味着额外的费用

您可能对Microsoft过敏; - )

我们在项目上非常有效地使用它,但是为了使测试保持最新,需要付出很多努力,每次更换屏幕时都需要重新录制测试

我们倾向于保持测试的简短和清晰,做一件事而不是在一次测试中记录10分钟的点击。

我们有一些标准的UI测试类型:

菜单测试:以特定用户(或用户类型/角色)身份登录,并确保所有必需的菜单项均可用

验证测试:打开页面并单击“保存”而不输入任何数据,确保显示所有验证警告。一次完成一个必填字段,并检查警告消息是否应该消失。

搜索测试:使用数据库或数据文件中的数据进行搜索,并确保搜索返回正确的数据

数据输入测试:从数据文件创建新的记录,清理数据库以允许多次运行测试

UI测试非常耗时,但是在发布新版本之前,几百次测试通过时的舒适感是无价的。

答案 6 :(得分:3)

我们使用Selenium Core,但逐渐转向Selenium RC,它更好,更易于管理。我们编写了大量自定义代码,以便在我们的持续集成服务器上运行测试,其中一些在并行套件中运行得更快。

你会发现有一件事是Selenium似乎为每个测试重新启动浏览器(你可以设置它不要这样做,但是当我们这样做时我们遇到了内存问题)。这在Firefox中可能很慢,但在IE中并不算太糟糕(有一次我感谢比尔盖茨的OS整合)。

答案 7 :(得分:3)

结帐Canoo Web Test。它是开源的,建立在ANT框架之上。

我花了一些时间研究软件质量保证的研究生课程,它似乎是一个非常强大的测试工具。

答案 8 :(得分:3)

Selenium Grid可以并行运行多台计算机上的Web测试,这可以加快Web测试过程

答案 9 :(得分:3)

我主要使用CubicTest,这是一个eclipse插件,可让您以图形方式定义测试。它可以通过几个库导出/运行测试,包括watir和selenium。大多数人只是使用Selenium跑步者。

完全披露:我是开发人员之一,所以我有点偏颇:)

仔细看看:cubictest.openqa.org

-Erlend

答案 10 :(得分:3)

我使用了WATIR,这非常好。我喜欢它,因为它是Ruby,允许测试交互性,可用元素和源代码解析。我暂时没有使用它,但我认为它变得更好了。

它应该被移植到Firefox和Safari,但现在已经发生了一段时间。

答案 11 :(得分:2)

Selenium用于集成测试,而不是单元测试。这是一个微妙但重要的区别。我通常看到的用法是用于检查构建的完整性。即,进行测试登录,测试(例如)提交故事,发表评论等。

您的想法是在部署之前测试整个系统是否在一起工作,而不是让用户发现您的网站已损坏。

答案 12 :(得分:1)

我们目前使用Silk4J - 一种以Java为中心的方法来测试Web UI。它可以测试Flash,Flex,AIR,Silver Light,Win32,HTML和其他一些应用程序。

由于Silk4J可以控制Win32应用程序,它可以直接控制浏览器对话框,这比Selenium可以控制的步骤更高,对下载提示特别有用。

答案 13 :(得分:0)

我们使用WatiN进行系统测试,使用QUnit进行JavaScript单元测试。

答案 14 :(得分:0)

Molybdenum构建于Selenium之上,并具有一些其他功能。