Bil*_*ill 20 testing oracle unit-testing plsql isolation
在Java项目中,JUnit测试执行设置,测试和拆卸.即使在使用内存数据库模拟真实数据库时,通常也会回滚事务或从内存中删除数据库并在每次测试之间重新创建数据库.这为您提供了测试隔离,因为一次测试不会在可能影响下一次测试的环境中留下工件.每个测试都以已知状态开始,不能渗透到另一个测试中.
现在我有了一个Oracle数据库构建,可以创建1100个表和400K代码 - 很多pl/sql包.我想不仅测试分贝安装(全 - 从头开始,部分制作 - 从以前的数据库升级,等等),并确保所有的表格和其他对象是在安装后,我期望的状态,同时也在pl/sql上运行测试(我不确定我怎么做前者 - 建议?).
我希望这一切都从Jenkins运行CI,以便通过回归测试捕获开发错误.
首先,我必须使用企业版而不是XE,因为XE不支持Java SP并且依赖于Oracle Web Flow.即使我消除了这些依赖关系,构建通常需要1.5小时才能加载(完整版本).
那么如何在这种环境下实现测试隔离呢?为每个测试使用事务并将其回滚?好的,那些提交的pl/sql程序怎么样?
我考虑过备份和恢复以在每次测试后重置数据库,或者在每次测试之间重新创建整个数据库(过于激烈).两者都不切实际,因为安装它需要一个多小时.每次测试都这样做是过度和疯狂.
有没有办法在db模式中绘制一条线,然后将其回滚到那个时间点?Sorta就像一个很大的"撤消"功能.除了expdp/impdp或rman之外的东西.也许整个方法都没有了.建议?别人怎么做到这一点?
对于CI或小型生产升级窗口,该测试套件必须在合理的时间内运行(30分钟是理想的).
是否有产品可能有助于实现这种"撤销"能力?
APC*_*APC 11
Kevin McCormack在The Server Labs Blog上发表了一篇关于使用Maven和Hudson对PL/SQL进行持续集成测试的文章. 看看吧.测试组件的关键组成部分是Steven Feuerstein的utPlsql框架,它是PL/SQL中JUnit概念的实现.
重置我们的测试夹具的需求是PL/SQL测试的一个重大问题.有一点有助于观察良好实践并避免在存储过程中提交:事务控制应仅限于调用堆栈的最外层部分.对于那些只需要发出提交的程序(可能是因为它们执行DDL而隐式),总会有一个测试夹具发出DELETE语句.处理关系完整性使代码非常棘手.
另一种方法是使用数据泵.您似乎放弃了impdp,但Oracle还为它提供了PL/SQL API,DBMS_DATAPUMP.我在这里建议它,因为它提供了在运行导入之前删除任何现有数据的功能.所以我们可以将导出的数据集作为我们的测试夹具; 执行SetUp是运行数据泵作业的问题.你不需要在TearDown中做任何事情,因为整理是在SetUp开始时进行的.
在Oracle中,您可以使用闪回技术将服务恢复到某个时间点.
http://download.oracle.com/docs/cd/B28359_01/backup.111/b28270/rcmflash.htm
归档时间: |
|
查看次数: |
4091 次 |
最近记录: |