10

在搜索 NUnit + 依赖方法 + 测试执行顺序时,我已经阅读了无数关于 SO 的答案。每一个答案都表明,强制单元测试的任何顺序都是极其邪恶的。

我正在使用 NUnit 编写 Selenium 测试。所以我正在尝试使用单元测试框架编写集成测试!!!

举一个集成测试的例子(这只是一个例子)。在进行其他测试之前,我需要创建一个有效帐户。如果创建帐户失败,那么我想中止整个测试执行。

由于我不想依赖测试的字母顺序并且本着 NUnit 的真正精神,决定在进一步测试之前创建一个帐户。尽管出于两个核心原因,它对我来说看起来不正确-

  1. 不必要的代码复制/执行
  2. 如果应用程序帐户创建不起作用怎么办,我所有的测试仍然会一次又一次地尝试创建和帐户并且失败

我倾向于认为 NUnit 可能不适用于 Selenium 测试。但如果不是 Nunit,那么我应该使用什么?

4

5 回答 5

2

如果您需要在每次测试中创建新帐户,那么我会采取的方法是将代码移到您的设置代码中。如果您的某些测试不需要登录,请将它们拆分为不同的文件。

应该删除任何重复的部分,测试代码应该像生产代码一样干净和健壮。使用不同的测试拆分文件有助于保持单一职责的理念。

于 2011-04-17T20:25:19.413 回答
2

Selenium Core 本身带有一个用 Javascript 编写的 TestRunner,您可以直接从浏览器运行测试。

有关更多信息,请参阅:

http://www.developerfusion.com/article/84484/light-up-your-development-with-selenium-tests/

除此之外,使用 Nunit 和用 C# 编写的测试更容易编写和维护。您在编写测试时是否使用了 SetUp 和 TearDown?这样可以避免代码重复。

关于您的第二点,您可以在第一次设置失败时设置一个标志并在下次跳过设置或设置本身跟踪它并在下一次快速失败。如果 Nunit 中的设置失败,则测试不会运行。

于 2011-04-17T18:53:44.887 回答
2

我一直用 NUnit 运行 Selenium。这仅取决于您如何编写测试。为了避免代码重复,我创建了一个辅助函数库,这些函数库可以做一些常见的事情,比如登录或退出我的站点,其他测试使用这些函数来访问他们需要测试的页面。(我在广义上使用术语“库”;我实际上并没有将它们拆分为自己的 C# 项目。)

您是对的,如果帐户创建功能被破坏,其他测试将失败。但就个人而言,我不认为这是一个问题,因为单元测试的目的是确保您的更改不会在项目的其他地方产生意外影响。如果帐户创建失败,显然会影响很多事情。如果我的登录帮助方法失败,则同上:如果您无法登录,则无法访问站点中的任何内容。实际上,整个站点都被破坏了。

于 2011-04-17T19:09:51.883 回答
1

你也看过PNunit吗?

请参阅此问题中的答案之一:

有没有人找到并行运行 C# Selenium RC 测试的方法?

我仍然不能 100% 确定 TestNG 如何与网格一起工作,假设您有一个 3 步注册过程,并且您将其分为 3 个测试。带有网格的 TestNG 会在这里为您提供帮助吗?我想不是,还是它会检测到测试 C 需要在同一个线程上运行测试 A 和 B?

PNunit 看起来可以提供一种将依赖测试分发到同一台机器的方法。虽然设置起来可能相当复杂。

于 2011-04-21T00:49:04.950 回答
1

两种方法可能会对您有所帮助,您将问题描述为 AutomatedTester 的答案:

首先,NUnit 2.4.4 定义了一个SuiteAttribute,它可以让你按照你想要的顺序运行测试。非常方便,但它有一个主要限制:它与TestCaseAttribute不兼容。这意味着您的所有测试只能由TestAttribute触发;如果您的目标是覆盖基于值的边界测试(因此有几个数据驱动的测试用例),这将非常烦人。有关http://www.nunit.org/index.php?p=suite&r=2.5.10的更多信息

另一种方法是为您的测试用例准备一个集成示例数据库。假设您有 15 个步骤的注册过程:创建一个学生记录并将其推送到第一步,然后另一个学生将其推送到第二步,依此类推。保存您的数据库并将其恢复为测试夹具设置。然后用不同的学生测试每个步骤。

在大多数情况下,对每个步骤的不同记录进行集成测试是完全有效的,因为它提供了相同的功能和代码覆盖率,并且它遵循集成测试的理念,因为您在数据库中的记录是真实的记录(由 UI 创建UI 附带的所有缺陷)。

当然,由于您必须存储数据库副本,它需要更多时间来运行和存储空间。如果您的系统负担不起,那么您可能需要查看第一个解决方案。

它还为您提供了即使早期步骤不稳定也能够发现后续步骤中的错误的优势:所有测试都在每个测试活动上运行,而您要求的解决方案并非如此。

于 2012-02-20T23:26:00.493 回答