C# 具有添加、更新和删除功能的selenium测试的最佳实践
我刚刚开始使用MSTests为我的asp.net应用程序编写selenium测试(我使用了NUnit,但我没有看到它和ms之间的任何区别…),到目前为止,我很喜欢它们,除了测试随机启动的部分 现在我得到的部分是,测试不应该依赖于其他测试(!!!),但是如果您的测试随机启动,并且它们彼此不依赖,您将如何测试添加、更新、删除功能 我只能看到两种编写此类测试的方法:C# 具有添加、更新和删除功能的selenium测试的最佳实践,c#,testing,selenium,nunit,mstest,C#,Testing,Selenium,Nunit,Mstest,我刚刚开始使用MSTests为我的asp.net应用程序编写selenium测试(我使用了NUnit,但我没有看到它和ms之间的任何区别…),到目前为止,我很喜欢它们,除了测试随机启动的部分 现在我得到的部分是,测试不应该依赖于其他测试(!!!),但是如果您的测试随机启动,并且它们彼此不依赖,您将如何测试添加、更新、删除功能 我只能看到两种编写此类测试的方法: 使用OrderedTests,这是我不喜欢的 写一个大的测试,做所有这些事情,但我有一个测试,做3件事 编辑:我忘了提我不嘲笑。我希望我
编辑:我忘了提我不嘲笑。我希望我的测试与我的测试数据库一起工作。有序测试不是一个好主意,因为在多核处理器中,我们可以同时运行多个测试。这在构建服务器的情况下非常有用,并有助于快速高效地运行测试。有序的测试用例无论如何都会失败,这不是一个好主意 选项2是首选方法,但我不会称之为“大”。因为除了要测试的类/功能之外,还应该对其进行模拟。如果你是在嘲笑他们,并且写得很好,他们只会被包含
现在,你可以继续选择2。但是,如果您想要一个更好的单元测试套件,您仍然需要考虑使用mock,并将对数据库的依赖从单元测试中分离出来,这在将来将是一个问题。您仍然可以做的是,您可以在更高的级别编写集成测试,使20%单独用于集成,其余80%集中于单元测试。通过这种方式,您将得到覆盖大多数功能的更快的测试用例,并且更易于维护。您可以在剩下的20%上做出妥协,这是更大的集成测试,维护成本更高 我知道这违背了一般惯例,但我发现在测试的默认顺序方面存在依赖关系没有什么问题 在现实世界中,如果您正在进行端到端测试,用例几乎总是遵循添加->编辑->删除的顺序。用户可能至少有90%的时间会经历此用户旅程。我发现以同样的方式自动化测试以覆盖这些可能性没有问题
另一种选择是用足够的对象填充数据库,以便测试可以彼此独立运行。测试不应该依赖于其他测试,它们应该是独立的。最重要的原因是测试线束的稳定性,以及测试失败时您应该/将如何反应。您不想开始调试以发现“更新”测试失败是因为其他测试失败了 就像@Phil建议的那样,这个数据库可能是一个前进的方向。当然,这也可能是错误的根源 另一种方法是为测试代码提供“管理”方法/端点,例如,可以创建帐户(或系统处理的资源),并使它们处于实际测试的正确状态。当然,还有一些“管理”功能也会导致错误
良好稳定的硒测试并不容易。祝你好运 在测试数据库项目时,我发现以下几点是有效的:
- 每个测试都有一个设置。类似的测试可以共享此功能,但每个测试都应该为所创建的数据具有唯一的标识符。因此,对于TestBalanceShopCashUp,创建一个名为BalanceShopCashUp、BalanceShopCashupUptill01、BalanceShopCashupUptill02等的商店
- 具有传递唯一标识符的通用拆卸,该标识符删除所有测试数据。无论测试成功与否,都会在每个测试结束时运行此操作。我的数据库中有几个存储过程来执行此操作。它们还删除引用我的已标识数据的数据
- 使用调试器中的断点等工具检查关键点的程序状态,使用SQL Server Profiler检查传递到数据库的值
- 我总是在与数据库交互时使用存储过程。没有直接绑定到输入字段