我有一种情况,希望您能提供一些见解。我正在考虑针对一个系统进行测试自动化(JAVA),该系统经历了处理的各个阶段,并具有一个大型Oracle数据库(1000多个表)。

例如。
流程1-运行流程1->查找包含客户详细信息的文件->将详细信息加载到数据库中的登台表。
流程2-审核客户详细信息->运行流程2->在登台表中找到的客户详细信息将移至适当的表。

现在,从自动化的角度来看,每次运行测试之前,我都需要重新初始化数据库状态,但是问题是数据库实例将被其他一些实例共享。不用讨论为什么我们没有单独的数据库实例,有人知道如何包含状态吗?因此,例如,假设有一个具有表Customer的数据库,该表包含一个列FirstName。

在测试运行之前:FirstName包含数据“ Peter”,“ Paul”,
经过测试运行:FirstName包含数据“ Peter”,“ Paul”,“ Jack”,“ Amy”
在下一次测试之前:将数据库状态恢复到上一次测试之前的状态的有效方法是什么,即所包含的数据应再次为“ Peter”,“ Paul”。

我已经看过DBUnit,但是我的理解是,尽管您可以在测试运行之前使用自己的数据初始化状态,但它也将在测试运行之前清除所有数据。问题是我不想在测试运行之前清除所有数据,而只是在上一次测试运行中引入的数据。

我希望这很清楚:)谢谢!

最佳答案

有关每次测试之前和之后的dbUnit操作选择,请参考DatabaseOperation类[0]。其他说明在“组件”页面[1]上。
特别是对于您的情况,请考虑UPDATE,DELETE和REFRESH。

数据库集成测试和接受/端到端测试的一个好方法是尽可能地隔离方案,包括数据集。例如。每个测试都应设置并清理自己的数据。考虑仅共享数据设置文件(在测试之前插入/更新,并在每次测试之后清除),而不考虑通过将数据保留在数据库中来共享。

最后,强烈考虑使数据库实例专用于自动化测试,因此对数据没有其他考虑和干扰。通常,如果无法分配另一个Oracle实例,请使用数据库,例如Apache Derby(使用其内存模式)。

[0] http://dbunit.sourceforge.net/apidocs/org/dbunit/operation/DatabaseOperation.html

[1] http://dbunit.sourceforge.net/components.html#DatabaseOperation

10-01 05:11
查看更多