Testing 在验收测试中检查数据库的状态是一种好的做法吗?

Testing 在验收测试中检查数据库的状态是一种好的做法吗?,testing,language-agnostic,acceptance-testing,Testing,Language Agnostic,Acceptance Testing,考虑一下,应该为电子商务系统编写自动验收测试。例如,您希望检查当客户完成结账操作时,他是否在系统中注册了一个新订单,该订单链接到他的帐户。当然,现在您可以检查的一件事是,有一些UI消息显示为“Order completed Successfully”。但是,这并不能保证命令实际上是持久存在于数据库中的。我的问题是,是否可以通过查询数据库来进一步验证订单是否确实保存了。或者,我是否应该在其他验收测试中,例如通过检查订单列表(成功完成检查操作后,订单列表不应为空)事先执行检查操作,来验证该情况 您可

考虑一下,应该为电子商务系统编写自动验收测试。例如,您希望检查当客户完成结账操作时,他是否在系统中注册了一个新订单,该订单链接到他的帐户。当然,现在您可以检查的一件事是,有一些UI消息显示为“Order completed Successfully”。但是,这并不能保证命令实际上是持久存在于数据库中的。我的问题是,是否可以通过查询数据库来进一步验证订单是否确实保存了。或者,我是否应该在其他验收测试中,例如通过检查订单列表(成功完成检查操作后,订单列表不应为空)事先执行检查操作,来验证该情况

您可以检查是否显示一些UI消息,如“订单已成功完成”。但是,这并不能保证命令实际上是持久存在于数据库中的

实际上要看情况。如果我们正在讨论,他们确实建议进行这样的数据库验证:

另一种常见的测试类型是将UI中的数据与AUT数据库中实际存储的数据进行比较。由于您也可以从编程语言执行数据库查询,假设您有数据库支持功能,您可以使用它们检索数据,然后使用数据验证AUT显示的内容是否正确

然而,只有在验收标准足够明确后,才应进行验收标准测试。如果没有此类特定的E2E要求,则不应在这些测试中包含此DB检查。您可以将它们放在功能和集成级别,SUT体系结构允许这种方法。如果我们简化典型的(UI后端数据库),您的黑盒将是中间件-从UI输入,[跳过所有之间],输出以DB为单位

这当然会引入更多的复杂性,您的测试将变得脆弱(对于UI测试尤其如此)。此外,您还应该考虑昂贵的对象,并妥善保存/处置它们(例如,每个套件运行的DB连接)

我想你应该在自动测试中涵盖所有这些:

还可以通过查询数据库来验证订单是否已保存。或者,我是否应该在其他验收测试中,例如通过检查订单列表(成功完成检查操作后,订单列表不应为空)事先执行检查操作,来进行不明原因的验证

唯一的问题是把它们放在哪里