我有一种情况我希望你能提供一些见解。我正在考虑一个经历各个处理阶段的系统的测试自动化(JAVA),并且在其核心有一个大型Oracle数据库(1000多个表)。
E.g。 进程1 - 运行Process1 - >查找包含客户详细信息的文件 - >将详细信息加载到数据库中的登台表。 流程2 - 审核客户详细信息 - >运行Process2 - >登台表中的客户详细信息将移至正确的表格中。
现在从自动化的角度来看,我需要在每次运行测试之前重新初始化数据库状态,但问题是数据库实例将由其他一些人共享。没有了解我们没有单独的数据库实例的原因,有谁知道如何包含状态?因此,例如想象一个包含表Customer的数据库,其中包含FirstName列。
在试运行之前:FirstName包含数据'Peter','Paul',
试运行后:FirstName包含数据'Peter','Paul','Jack','Amy'
在下一次测试运行之前:将数据库状态恢复到最后一次测试运行之前的状态的有效方法是什么,即包含的数据应该是'Peter','Paul'。
我见过DBUnit但我的理解是,虽然您可以在测试运行之前使用自己的数据初始化状态,但它也会在测试运行之前清除所有数据。问题是我不希望在测试运行之前清除所有数据,而只是在上次测试运行时引入的数据。
我希望很清楚:)谢谢!
答案 0 :(得分:1)
在每次测试之前和之后,请参阅DatabaseOperation类[0]以了解dbUnit操作选择。附加说明位于“组件”页面[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
答案 1 :(得分:0)
对于此类测试,您无法与其他用户共享该实例,否则您的测试将无法可靠。
首先,您需要隔离数据库实例,并且您的测试需要对其进行完全且独占的控制。
其次,测试都是关于选择努力x资源x结果之间的权衡。如果由于某种原因执行测试不可行,那么您必须评估哪些内容有效,哪些内容不起作用,并在必要时将其上报给项目经理。
对于大量数据,DBUnit很可能在IMO中不是一个好选择。在每次测试之前,您可能需要一些导入/导出工具来重置数据库状态。