加速依赖Oracle DB的集成测试

时间:2009-12-16 19:28:03

标签: oracle continuous-integration integration-testing

我们有一个专门用于运行的单元测试的Oracle数据库服务器。有没有办法专门针对这种目的调整Oracle?由于数据不断丢弃(因为它只是测试数据)。我想知道是否有办法在内存中安装Oracle数据库,并且在没有TCP / IP堆栈的情况下连接可能会加速这些测试。

有什么建议吗?

6 个答案:

答案 0 :(得分:6)

答案可能是肯定的,但在测试期间将数据库环境从生产配置更改为集成配置会带来测试会产生错误结果的风险。

答案 1 :(得分:2)

如果挂断是数据库清理/重置阶段,并且您有Enterprise Edition,请查看FLASHBACK DATABASE(可能)将数据库重置为固定点的更快方法。

最糟糕的是,您不需要浪费时间来构建清理/重置脚本。

答案 2 :(得分:1)

TCP / IP堆栈不太可能增加您的开销。但是,您可以在与测试用例相同的服务器上运行Oracle实例,并通过ORACLE_SID(我认为使用操作系统级进程间通信)进行访问。

然而,在检查对Oracle的更改之前,我将了解在持续集成服务器上运行的测试。如果你还没有这样做,这意味着要从单元测试中拆分集成测试(需要后端),然后在不同的时间表上运行它们。很少有理由为每次更改运行一整套集成测试。

下一步:您使用任何类型的对象关系映射器来访问您的数据库吗?如果是,并且您不依赖于任何特定的Oracle怪癖,您可以将Oracle替换为内存数据库(您没有说明您正在使用的语言,因此这可能是也可能不是选项)。 / p>

最后,考虑使用Oracle导入/导出工具为每次集成测试运行完全重建数据库。它可能更快,并且肯定比尝试删除您创建的任何行更稳定(这假设您的集成测试以预先填充的数据开始;如果没有,只需删除并重建模式)。

答案 3 :(得分:0)

对于您提到的方案,您可以对Oracle实例执行许多操作,例如使用正确的锁定策略/隔离级别,禁用各种撤消日志等。您应该查阅一本优秀的Oracle调优书。那(我喜欢Mark Gurry的那个,但我不确定它是如何更新的。)

还有一件事可能很重要:如果您不断添加和删除数据库中的数据(我的意思是“完全清空数据库”),请确保正确设置每个表的存储参数。如果您有空间,请考虑为测试用例分配一个等于最大大小的初始范围。 (在db创建脚本中,或者定义一次,然后只使用重用存储选项转换表。)然后,当您运行测试用例时,db不必分配额外的存储空间。

答案 4 :(得分:0)

我遇到了类似的问题,我通过将重做日志,撤消和用户表空间移动到RAM磁盘来加速单元测试。有一个free version ramdisk软件供您试用。定期备份文件的Commercial versions也非常便宜。
在我的情况下,单元测试仅验证数据完整性,因此即使不复制生产设置,该策略也是低风险的。我们有一个单独的规模和性能测试网格。

答案 5 :(得分:-2)

您可以将表索引的重建作为测试运行的一部分进行合并。选择在运行之前或运行之后花费时间重建索引。你会吃掉相同的总时间,但是如果你在测试运行后重建它们,你就会“感觉”它减少了。

   ALTER INDEX index_name REBUILD

将重建索引而不删除并重新创建它们。