在Java项目中,JUnit测试执行安装,测试和拆卸。即使在使用内存数据库嘲笑真正的数据库时,通常也会回滚事务或从内存中删除数据库,并在每次测试之间重新创建数据库。由于一个测试不会在可能影响下一个测试的环境中留下工件,因此可以为您提供测试隔离。每个测试都以已知的状态开始,不能流入另一个测试。如何实现测试隔离测试Oracle PL/SQL?
现在我已经有了一个Oracle数据库构建,可以创建1100个表和400K的代码 - 很多pl/sql包。我想不仅测试数据库安装(完全 - 从头开始创建,部分 - 从以前的数据库升级等),并确保所有的表和其他对象处于安装后我期望的状态,但也是在pl/sql上运行测试(我不确定我会怎么做前者 - 建议?)。
我想这一切都从詹金斯运行CI,以便通过回归测试捕捉开发错误。
首先,我必须使用企业版本而不是XE,因为XE不支持Java SP和对Oracle Web Flow的依赖。即使我消除了这些依赖关系,构建通常需要1.5小时才能加载(完整构建)。
那么如何在这种环境下实现测试隔离呢?为每个测试使用交易并将其回滚?好的,那些提交它们的pl/sql程序呢?
我想过备份和恢复以在每次测试之后重置数据库,或者在每次测试之间重新创建整个数据库(过于剧烈)。两者都不切实际,因为它需要花费一个多小时才能安装。这样做每个测试是过度杀伤和疯狂。
有没有一种方法可以在数据库模式中在沙中绘制一条线,然后将其滚回到该时间点? Sorta就像一个大的“撤消”功能。除了expdp/impdp或rman之外的东西。也许整个方法都关闭了。建议?其他人如何做到这一点?
对于CI或小型生产升级窗口,最终测试套件必须在合理的时间内运行(30分钟将是理想的)。
是否有产品可能有助于实现这种“撤消”能力?
你可以捕捉的DB(道路的克隆速度比好处exp/imp或rman),然后在克隆上运行测试。 (询问您的系统管理员) – tbone 2011-06-14 15:29:54