【问题标题】:How to build dependent tests for regression testing如何为回归测试构建依赖测试
【发布时间】:2012-04-03 10:47:46
【问题描述】:

我有一个 ASP.Net MVC 项目,我认为我可以使用 MS Test 或 NUnit 之类的工具来执行从控制器层到数据库的回归测试,但是我遇到了一个问题,即测试不是为了在其中运行而设计的order (你可以在 MS Test 中使用有序测试,但测试仍然并发运行),另一个问题是如何让从一个测试创建的数据可以访问另一个测试?

我看过 Selenium 和 WatiN,但我只是想写一些不依赖于 UI 层的东西,这很可能会增加维护测试的工作量。

有什么建议吗?它只是适合这项工作的错误工具吗?我应该只使用 Selenium/WatiN 吗?

【问题讨论】:

标签: asp.net-mvc msbuild nunit regression-testing


【解决方案1】:

测试应该始终相互独立,因此运行顺序无关紧要。如果您的测试依赖于其他测试,您将失去对测试内容的控制。

【讨论】:

  • 我理解这是单元测试的普遍共识,但实际上,就我的目的而言,测试依赖是一件好事,因为这意味着测试相互测试。例如,我可以为函数 A 编写测试 A,为函数 B 编写测试 B。如果测试 A 和 B 是独立的,则它们都可能通过,但如果它们相互依赖并且测试 A 创建的数据对测试 B 无效,则测试B 会失败,所以测试 B 正在测试测试 A 的结果。你可能会说,但这意味着测试 A 不完整,是的,但是有人会声称有没有错误的测试吗?如果我可以,为什么没有无错误的代码?
  • 在那种情况下,我会说您有测试 A 和测试 B,然后您有测试 C,即测试 A + 测试 B,以及测试 D,即测试 B + 测试 A。(使用 common代码,C和D应该直接写)。随机运行测试肯定会测试各种不同的特性如何相互交互,但它会产生不一致的结果、不必要的测试用例(例如两个不相关的特性相互运行),并且会使追踪问题变得更加困难
  • 更不用说大多数测试框架都是根据测试相互独立的概念设计的,因此使它们相互依赖需要更多的工作。
  • 如果我扩展该逻辑,如果我有测试 A、测试 B ... 测试 N 和测试 N 可能取决于任何先前测试的结果,那么我应该有一个测试包括所有前面的测试。这就是我的问题的答案,创建一个包含所有相关测试用例的测试。
  • 抱歉,我正在标记您的回复,因为我相信它只与单元测试有关,而我的问题与回归测试有关。回归的独立测试毫无意义。这就像测试汽车的所有单独组件,但不测试组装后的汽车启动和行驶。
【解决方案2】:

WatiN,我假设 Selenium 不会解决您的订购问题。我使用 WatiN 和 NUnit 进行 UI 自动化,并且无法保证运行顺序,这最初与您所看到的问题相似。

按照 dskh 的回答,您需要独立测试,我已经通过两种方式完成了集成/回归黑盒测试。

首先:在您的测试设置中,设置任何前置条件数据值,以便您处于已知的“良好状态”。对于系统回归测试自动化,我有许多数据库脚本被调用以将数据重置为已知状态;这会增加一些依赖项,因此请注意设计。注意:在直接单元测试中,考虑使用模拟对象来消除依赖关系并使您的测试“测试一件事”。如果可以的话,模拟对象、存根方法调用等是可行的方法,这听起来很可能。

第二:对于某些必须以某种方式设置的情况,并且编写脚本来测试设置会增加大量必要的系统内部知识(例如:所有用户设置 + 所有权限设置 + 等等等等)在它们自己的命名空间中设置了少量“引导”测试,以便通过 NUnit 轻松运行,以引导系统。保持少量测试并确保测试非常稳定至关重要。现在,在全新安装时,引导测试首先运行并用作高级冒烟测试;如果任何引导测试失败,则不会运行进一步的测试。它在某些方面很笨拙,但替代方案更笨拙或更多时间/资源/任何消耗。

【讨论】:

    【解决方案3】:

    更新 下面的链接(我假设该项目)已失效。 最好的选择可能是使用 Selenium 和页面对象模型。 见这里:http://code.tutsplus.com/articles/maintainable-automated-ui-tests--net-35089

    旧答案 我发现的最简单的解决方案是 Rob Conery 的 Qixote:

    https://github.com/robconery/Quixote

    它通过触发 http 请求并使用响应来工作。 易于设置和使用,并提供集成测试。该工具还允许执行一系列测试以创建测试依赖项。

    【讨论】:

    • 是的,看起来 Rob 已经放弃了这个项目。看起来有一些很好的工具可以与 Selenium 结合并公开页面对象模型来创建可维护的回归测试。看看这里code.tutsplus.com/articles/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    相关资源
    最近更新 更多