如何实现测试隔离测试Oracle PL/SQL?

前端之家收集整理的这篇文章主要介绍了如何实现测试隔离测试Oracle PL/SQL?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在Java项目中,JUnit测试执行设置,测试,拆卸。即使使用内存数据库嘲笑实际的数据库,通常也可以回滚事务,或者从内存中删除数据库,并在每个测试之间重新创建它。这样可以测试隔离,因为一个测试不会在可能影响下一个测试的环境中留下工件。每个测试以已知状态开始,不能流血到另一个。

现在我有一个Oracle数据库构建,它创建了1100个表和400K的代码 – 很多pl / sql包。我不仅要测试数据库安装(从头创建,从前一个数据库部分升级等),并确保所有的表和其他对象处于安装后期望的状态,但是ALSO在pl / sql上运行测试(我不知道我会如何做到这一点 – 建议?)。

我想这一切都从jenkins运行,以便开发错误通过回归测试来捕获。

首先,我必须使用企业版本而不是XE,因为XE不支持Java SP和依赖于Oracle Web Flow。即使我消除了这些依赖关系,构建通常需要1.5个小时才能加载(完整版)。

那么在这种环境下,你如何实现测试隔离呢?使用每个测试的交易并将其回滚?好的,那些在其中提交的pl / sql程序呢?

我考虑了备份和恢复,以便在每次测试后重置数据库,或者在每个测试之间重新创建整个数据库(太剧烈)。两者都是不切实际的,因为安装它需要一个小时。对于每个测试都这样做是过分的和疯狂的。

有没有办法在数据库架构的沙中画一条线,然后将其回滚到那个时间点? Sorta像一个大的“撤消”功能。除了expdp / impdp或rman之外的东西。也许整个方法关闭的。建议?其他人如何做到这一点?

对于CI或小型生产升级窗口,whold测试套件必须在合理的时间内运行(30分钟是理想的)。

有没有可能有助于实现这种“撤销”能力的产品?

Kevin McCormack发表了关于服务器实验室博客的关于使用Maven和Hudson的PL / sql的持续集成测试的文章Check it out.测试组件的关键因素是 Steven Feuerstein’s utPlsql框架,这是JUnit在PL / sql中的概念的实现。

需要重新设置测试夹具是PL / sql测试的一个重大问题。有助于遵守良好做法并避免存储过程中的提交:事务控制应仅限于调用堆栈的最外层部分。对于那些只需要发出提交(也许是因为执行DDL)的程序,总是有一个测试夹具发出DELETE语句。处理关系完整性使得编码变得相当棘手。

另一种方法是使用数据泵。您似乎放弃了impdp,但是Oracle也为其提供了PL / sql API DBMS_DATAPUMP.我建议在这里,因为它提供了在运行导入之前垃圾桶所有现有数据的能力。所以我们可以有一个导出的数据集作为我们的测试夹具;执行SetUp是运行Data Pump作业的一个问题。您不需要在TearDown中执行任何操作,因为在SetUp开始时会进行整理。

猜你在找的Oracle相关文章