现在我有一个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分钟是理想的)。
有没有可能有助于实现这种“撤销”能力的产品?
需要重新设置测试夹具是PL / sql测试的一个重大问题。有助于遵守良好做法并避免存储过程中的提交:事务控制应仅限于调用堆栈的最外层部分。对于那些只需要发出提交(也许是因为执行DDL)的程序,总是有一个测试夹具发出DELETE语句。处理关系完整性使得编码变得相当棘手。
另一种方法是使用数据泵。您似乎放弃了impdp,但是Oracle也为其提供了PL / sql API DBMS_DATAPUMP.我建议在这里,因为它提供了在运行导入之前垃圾桶所有现有数据的能力。所以我们可以有一个导出的数据集作为我们的测试夹具;执行SetUp是运行Data Pump作业的一个问题。您不需要在TearDown中执行任何操作,因为在SetUp开始时会进行整理。