编码的UI测试

时间:2015-03-12 15:50:31

标签: c# visual-studio unit-testing testing functional-testing

我想使用编码的ui测试自动化一些测试。我的一些测试涉及针对我想要断言的数据库进行事务处理。但是运行这些自动化测试会引入自己的问题,每次测试运行时都可以修改(添加,更新或删除记录)数据库的状态。在修改数据库时是否有一些一般指导如何创建编码的ui测试?我想添加模拟存储库吗?我是否要创建一个具有数据库服务器的测试环境,该服务器可以在每次测试运行时恢复为快照?如果编码的ui测试不涉及从数据库事务中断言值,而只是断言单击了一个按钮并让单元测试断言数据库事务?

3 个答案:

答案 0 :(得分:3)

恕我直言,这个问题适用于您编写的任何测试 - 不仅仅适用于CodedUI测试。

您的测试可能会在数据库进程中查询/执行NonQuery。因此,在测试运行结束时,DB将从状态A移动到状态B.因此,确保在测试运行开始时运行某些数据库刷新脚本是很好的,这样您就可以确保在运行之前将数据库带入状态A,而不管其当前状态如何。

可能需要注意的是,当您在相同的测试数据上运行相同的测试时,在测试运行开始时DB状态保持不变,您每次都执行完全相同的测试,并且机会是应用程序在测试中已经对这些测试产生了免疫力,测试运行最终会随着时间的推移而收益递减。因此,随机化测试工作的测试数据可能是一个好主意。

答案 1 :(得分:0)

它可以像你想要的那样简单或复杂。

最简单的方法是在每次运行时完全重置数据。这可能意味着每次使用一些模式创建脚本从头开始创建数据库。

更复杂的解决方案是仅重置模式的某些部分(即:某些表,具体取决于测试的性质)。相关表格等。

无论你做什么 - 期望测试以特定顺序运行是不好的做法。如果您的套件中有50个测试,则这些测试必须能够以任何顺序运行,并根据测试人员运行 - 他们可能决定运行1个或所有测试。

这是高级别的东西。在实际实现方面,您可以找到使用属性标记测试的有趣方法,并且您可以定义要初始化的值的值(这可能是要清除的表名,或者如果您使用ORM可能是1个实体,并从那里动态确定相关的表格。并动态地运行清理。

答案 2 :(得分:-1)

是的,UI测试应该对测试数据进行断言,可以在暂存环境中运行。

我发现遵循测试完成后清理工作并使数据库保持先前状态的做法很有用。它需要更干净的测试用例设计,但是在测试维护期间会有所回报。另外,您可以在测试运行之前/之后重新导入数据库转储。

如果您研究用于自动化的UI工具,我会推荐Anwendo [1],这是我开发的用于Web应用程序的UI测试工具。

[1] https://anwendo.com