具有添加,更新,删除功能的硒测试的最佳实践

时间:2015-03-26 10:02:37

标签: c# testing selenium nunit mstest

我刚刚开始使用MSTests为我的asp.net应用程序编写selenium测试(我使用了NUnit,但我没有看到它和ms之间有任何区别......)我喜欢它们所以远,除了随机试射的部分。

现在我得到了测试不应该依赖于其他测试的部分(!!!),但是如果你的测试随机发射并且他们不依赖于彼此,你将如何测试添加,更新,删除功能?

我只能看到两种方法来编写这样的测试:

  1. 使用OrderedTests,我不喜欢。
  2. 编写一个完成所有这些工作的BIG测试,但接下来我做了3个测试的测试!
  3. 编辑:我忘了提及我不要嘲笑。我希望我的测试能够与我的测试数据库一起使用。

4 个答案:

答案 0 :(得分:0)

有序测试不是一个好主意,因为在多核处理器中我们可以同时运行多个测试。这在构建服务器的情况下非常有用,并且可以帮助测试快速有效地运行。订购的测试用例无论如何都会破坏而不是一个好主意。

选项2是首选方法,但我不会称它们为大。因为除了您正在测试的类/功能之外,应该进行模拟。如果你正在嘲笑它们并且写得正确,它们只会包含

  1. 启用/产生测试条件
  2. 断言的逻辑
  3. 我的意思是,如果所有依赖项都被正确模拟,那么每个测试用例都会很小并且可以在半秒内执行。

    简而言之,您的单元测试将由3个部分组成,它们应该相互独立。

    1. 将进入初始化/模拟的常见内容
    2. 每个测试用例开始时的测试方法特定条件
    3. 断言。
    4. 修改

      我很遗憾地说,如果您使用的是测试数据库,则会失去单元测试的目的。单元测试是无状态的,应该是模块化的。您应该只能测试应用程序功能的一小部分,而不依赖于其他模块。您应该从应用程序逻辑中单独测试DAL层/数据库访问代码。数据库是有状态的,如果您将单元测试绑定到依赖于数据库,那么您正在集成两个不同的组件,并使其成为一种集成测试,这将使执行更长,更大,这可能是长期运行中的问题。

      现在你可以继续使用选项2.但是如果你想要一个更好的单元测试套件,你仍然需要考虑使用模拟并将数据库的依赖性与单元测试分开,这将是未来的问题。您仍然可以做的是您可以在更高级别编写集成测试,仅在集成上进行20%的编写,其余80%专注于单元测试。这样,您将获得更快的测试用例,涵盖大多数功能并且更易于维护。您可以在剩余的20%上进行妥协,这些更大的集成测试和更昂贵的维护。

答案 1 :(得分:0)

我知道这违反了一般做法,但我发现在测试的默认顺序方面存在依赖关系。

在现实世界中,如果您要进行端到端测试,用例几乎总是按照添加顺序 - >编辑 - >删除。用户可能至少90%的时间都会经历此用户旅程。我发现以同样的方式自动化测试以覆盖这些类型的赔率没有问题。

另一种替代方法是使用足够的对象填充数据库,以便测试可以彼此独立运行。

答案 2 :(得分:0)

测试不应该依赖于其他测试,它们应该是独立的。最重要的原因是测试工具的稳定性以及测试失败时您应该/将如何反应。您不想开始调试以发现“更新”测试失败,因为其他一些测试失败了......!

与@Phil建议人口一样,数据库可能是一种前进的方式。当然,这也可能是错误的来源。

另一种方法是为您的测试代码提供“管理”方法/端点,例如可以创建帐户(或您的系统处理的资源)并使它们处于正确的状态以进行实际测试。当然,“管理”功能也会成为错误的来源。

确保良好稳定的Selenuim测试并不容易。祝你好运!

答案 3 :(得分:0)

我发现以下内容在测试数据库项目时有效:

  • 为每个测试设置一个设置。类似的测试可以共享此功能,但每个测试应该具有所创建数据的唯一标识符。因此,对于TestBalanceShopCashUp,创建一个名为BalanceShopCashUp,BalanceShopCashUpTill01,BalanceShopCashUpTill02等的商店。
  • 有一个通用的拆解,传递唯一标识符,删除所有测试数据。无论测试成功还是失败,都会在每次测试结束时运行。我在我的数据库中有几个存储过程来执行此操作。他们还会删除引用我所识别数据的数据。
  • 使用调试器中的断点等工具检查关键点的程序状态,并使用SQL Server Profiler检查传递给数据库的值。
  • 在与数据库交互时,我总是使用存储过程。没有直接绑定到输入字段。