常规方式保存测试信息
创建相关数据表
创建数据表TestInfoLog,和序列号SEQ_TestInfoLog
参考当前目录下的 TestInfoLog.sql ,运行这部分脚本。
创建测试信息保存包
创建一个测试信息保存的 Package
|
|
|||
具体例子
例子1
在一个PL/SQL块中使用测试包来保存测试信息,参考当前目录下的 example1.sql
-- 简单使用的一个例子,结果查询 select * from TESTINFOLOG
declare
i integer :=1;
begin
PKG_Test_Info.clearAllLogInfo;
PKG_Test_Info.setLogContext('匿名块测试','无',1);
PKG_Test_Info.logInfo('i=1');
PKG_Test_Info.logInfo('当前日期='||To_char(sysdate,'yyyy-mm-dd'));
end;
例子2
在一个存储过程中保存测试信息
参考当前目录下的Test_PKG_Test_Info.prc
---在存储过程中保存测试信息,结果查询 select * from TESTINFOLOG
create or replace procedure Test_PKG_Test_Info(p_Param1 int,
p_Param2 int,
p_保存日志信息 int default 1) is
begin
if(p_保存日志信息)=1 then
PKG_Test_Info.clearAllLogInfo;
PKG_Test_Info.setLogContext('存储过程测试', 'Test_PKG_Test_Info', 1);
PKG_Test_Info.logInfo('p_Param1='||to_char(p_Param1)||',p_Param2='
||to_char(p_Param2));
end if;
end ;
卸载脚本
参考 uninsall.sql ,如果需要卸载运行这个脚本
其它的方式保存测试信息
Log4plsql的介绍
Log4plsql是一个open source的工具,是一个在Oralce PL/SQL 下实现的LOG框架。
Log4plsql 是基于log4J 演化得来的。
相关站点
http://log4plsql.sourceforge.net/
http://sourceforge.net/projects/log4plsql/
Log4plsql来做测试。
1.触发器的测试信息保存
1个触发器的例子,在触发器中记录相关信息
代码位于当前文件所在目录的 LOG_DML.sql
CREATE OR REPLACE TRIGGER LOG_DML BEFORE
INSERT OR UPDATE OR DELETE
ON T_ESSAIS FOR EACH ROW
BEGIN
IF DELETING OR UPDATING THEN
PLOG.INFO('T_ESSAIS:OLD:'||USER||':'||ld.data);
END IF;
IF INSERTING OR UPDATING THEN
PLOG.INFO('T_ESSAIS:NEW:'||USER||':'||:new.data);
END IF;
end;
2.存储过程中测试信息保存
在存储过程中进行日志操作,把相关存储过城的参数信息记录到日志数据表
代码位于当前文件所在目录的 testAssert.sql
create or replace procedure testAssert(p_Param1 int,p_Param2 varchar2)
IS
pCTX PLOG.LOG_CTX;
BEGIN
--如果 p_Param1<=1,那相关信息就将写入日志
PLOG.ASSERT(pCTX, p_Param1>1, 'p_Param1>1 always false');
--如果 p_Param2<>'man',那相关信息就将写入日志
PLOG.ASSERT(p_Param2 = 'man', 'p_Param2<> man ');
PLOG.ASSERT(1 is null, '1 is null always false');
PLOG.ASSERT(NOT 1>1, 'NOT 1>1 never false');
PLOG.ASSERT(1>2, '1>2 always false', -20001,
pRaiseExceptionIfFALSE=>TRUE ,
pLogErrorReplaceError=>FALSE);
PLOG.ASSERT(1>3, 'Never test there is a raise in previous assert');
END;
3.实现了树型目录的日志例子
代码位于当前文件所在目录的 testAssert2.sql
/**
* <p> purpose:这是一个在存储过程过程通过日志方式进行记录测试信息的例子,实现了树型目录的日志记录方式
* </p>
* <p>
* 使用方式
* <LI>编译该存储过程</LI>
* <LI>
* 删除TLOG表中的日志信息: delete from TLOG
* </LI>
* <LI>测试该存储过程
* begin testassert2(10,'wdz123@hotmailcom');end;
* </LI>
* <LI>察看结果 select from tlog </LI>
*</p>
* @param p_Param1 是一个入口参数 ,它的值将被记录进入 日志中
* @param p_Param2 是另外一个入口参数 ,它的值将被记录进入 日志中
***/
create or replace procedure testAssert2(p_Param1 int, p_Param2 varchar2) IS
v_CTX PLOG.LOG_CTX;
v_Year varchar2(4);
BEGIN
---设置日志信息的根结点名称
v_CTX := PLOG.init('测试信息');
---构造树型日志的第2级
PLOG.setBeginSection(v_CTX, 'procedure_testAssert2_测试信息');
PLOG.setBeginSection(v_CTX, '检测入口参数');
--如果 p_Param1<=1,那相关信息就将写入日志
PLOG.ASSERT(v_CTX, p_Param1 > 1, 'p_Param1>1 always false');
--如果 p_Param2<>'man',那相关信息就将写入日志
PLOG.ASSERT(p_Param2 = 'man', 'p_Param2 <> man ');
---关闭树型日志的第2级目录
PLOG.setEndSection(v_CTX, '检测入口参数');
---下面是根据实际业务需要进行一序列处理
null; ---这里是一些业务处理代码
---end 相关实际业务处理
---检查业务处理结果
--构造又一个2级树型日志目录
PLOG.setBeginSection(v_CTX, '检查业务处理结果');
---这里是根据实际需要,对相关处理结果的检查代码
select to_char(sysdate, 'YYYY') into v_Year from dual;
PLOG.assert(v_CTX,
v_Year = '2003',
'当前年份应该是=2003,实际是=' || v_Year);
---end 这里是根据实际需要,对相关处理结果的检查代码
--关闭当前的树型日志的第2级目录
PLOG.setEndSection(v_CTX, '检查业务处理结果');
PLOG.setEndSection(v_CTX, 'procedure_testAssert2_测试信息');
END;
Log4plsql的应用
由于PLOG 提供了assert的处理,因此可以考虑在存储过程和包中进行一些测试结果的检查,根据需要把测试结果保存下来,对于一些基于算法的存储过程的测试,可以考虑使用一些脚本来做一些自动化的回归测试。
应用例子
1.说明:
这个例子可能不能应用起来(没有相关的数据库环境,缺少相应的包),但是可以open一些脚本出来,来说明相关的表达意思。如果是公司内部,可以在福州项目数据库下可以运行起来。
2.参考文档
参考 带申请的业主整合算法的测试,有申请,没有产权阁楼,没有产权分摊,不存在人口安置。
相关存储过程/包
PKG_ConDebugInfo.Normal_OwnerReq_Recursive
PLOG包
相关文档
参考《测试__带申请的业主整合算法的测试.doc》
测试数据的输入,采用手工的方式输入,根据需要也可以全部脚本生成。
参考文档《测试__带申请的业主整合算法的测试.doc》列出的测试数据要求。
测试数据的动态修改/生成,根据测试用例,动态改变/生成测试数据。
参考 PKG_ConDebugInfo.Normal_Owner_UpdateData3
测试结果的检查
参考 PKG_ConDebugInfo.Normal_Owner_Check_Data3
扩展
为了基于pl/sql的测试信息做的更好。可以从以下几个方面来做。
1.可以考虑自己去修改 Log4plsql提供的PLOG包,
1.1修改数据表TLOG,增加一些字段保存其他信息(比如:可以保存客户端IP)。
修改存储过程PLOG.addRow ,把相关信息保存到测试数据表。
可以从后台获取一些运行环境信息,比如采取下面的类似方式获取一些信息
SYS_CONTEXT('USERENV','CURRENT_USER')
SYS_CONTEXT('userenv', 'ip_address')
1.2增加其他一些方法
根据实际需要可以往PLOG包增加其他一些方法,比如日志的删除之类的。
最好还是另外包装1层,象上面的Oracle包PKG_ConDebug一样,定义1个包来做一些相关包装。
2.修改视图 VLOG,按照具体要求来现显示一些测试结果信息。
例如:创建下面的视图。
create or replace view vlog2 as
select
LUSER 数据库用户,
plog.getLevelInText(llevel) as 测试信息等级,
LSECTION 日志目录,
LTEXTE 错误信息,
LDATE 产生错误时间
from tlog a
3.算法测试的自动化
可以根据需要,增强上面Log4plsql的应用中关于测试数据的生成部分,并且做到据根据业务需要,测试测试数的生成可以带有随机性。或者按照关键用例为主来生成测试数据。
相关图文阅读
频道图文推荐
相关专题
·详细介绍oracle数据库字符集 (0次浏览)
·使用一条SQL语句删除表中重复记录 (0次浏览)
·Oracle开发(一).Windows下配置使用ProC (0次浏览)
·Oracle数据库开发(二).Linux下配置使用ProC (0次浏览)
·关于oracle存储过程的若干问题备忘 (0次浏览)
·讲解Oracle里抽取随机数的多种方法 (0次浏览)
·在数据字典中直接修改表列的名称和顺序 (0次浏览)
·数据库中如何使用SQL查询连续号码段 (0次浏览)
·如何使用分析函数进行行列转换 (0次浏览)
·改变非归档模式的Oracle数据库 (0次浏览)
·使用一条SQL语句删除表中重复记录 (0次浏览)
·Oracle开发(一).Windows下配置使用ProC (0次浏览)
·Oracle数据库开发(二).Linux下配置使用ProC (0次浏览)
·关于oracle存储过程的若干问题备忘 (0次浏览)
·讲解Oracle里抽取随机数的多种方法 (0次浏览)
·在数据字典中直接修改表列的名称和顺序 (0次浏览)
·数据库中如何使用SQL查询连续号码段 (0次浏览)
·如何使用分析函数进行行列转换 (0次浏览)
·改变非归档模式的Oracle数据库 (0次浏览)
·如何使用Logmnr方法分析数据库日志 (18次浏览)
·Oracle-Decode()函数和CASE语句的比较 (18次浏览)
·Oracle数据库如何查询记录时给记录加锁 (12次浏览)
·保持Oracle数据优良性能的若干诀窍 (10次浏览)
·Oracle体系框架及SQL语句性能探讨 (9次浏览)
·如何利用QCTO开发可重复使用的测试库 (8次浏览)
·理解物化视图刷新过程中出现的约束冲突 (8次浏览)
·Oracle数据库删除两表中相同数据的方法 (8次浏览)
·Oracle是波音747还是MySQL丰田汽车呢? (7次浏览)
·利用多个转储文件导出大量Oracle数据 (6次浏览)
·Oracle-Decode()函数和CASE语句的比较 (18次浏览)
·Oracle数据库如何查询记录时给记录加锁 (12次浏览)
·保持Oracle数据优良性能的若干诀窍 (10次浏览)
·Oracle体系框架及SQL语句性能探讨 (9次浏览)
·如何利用QCTO开发可重复使用的测试库 (8次浏览)
·理解物化视图刷新过程中出现的约束冲突 (8次浏览)
·Oracle数据库删除两表中相同数据的方法 (8次浏览)
·Oracle是波音747还是MySQL丰田汽车呢? (7次浏览)
·利用多个转储文件导出大量Oracle数据 (6次浏览)
·Oracle DBA数据库日常维护完全手册 (294次浏览)
·Oracle体系结构:内存结构和进程结构 (248次浏览)
·开启企业殿堂的钥匙 Oracle服务器的安装 (185次浏览)
·将Oracle的数据导入EXCEL中的方法 (167次浏览)
·简单冷备份恢复操作步骤 (130次浏览)
·oracle下导出某用户所有表的方法 (128次浏览)
·ORACLE的客户端如何连接到数据库 (127次浏览)
·详细讲述 Oracle 密码丢失解决方法 (112次浏览)
·Oracle数据库在线备份原理 (103次浏览)
·八个学习点帮助你全面认识Oracle数据库 (91次浏览)
·Oracle体系结构:内存结构和进程结构 (248次浏览)
·开启企业殿堂的钥匙 Oracle服务器的安装 (185次浏览)
·将Oracle的数据导入EXCEL中的方法 (167次浏览)
·简单冷备份恢复操作步骤 (130次浏览)
·oracle下导出某用户所有表的方法 (128次浏览)
·ORACLE的客户端如何连接到数据库 (127次浏览)
·详细讲述 Oracle 密码丢失解决方法 (112次浏览)
·Oracle数据库在线备份原理 (103次浏览)
·八个学习点帮助你全面认识Oracle数据库 (91次浏览)
最新技术文档
·详细介绍ORACLE sqlplus命令 06-27
·如何禁用 oracle 的 XDB 06-27
·理解 oracle 的 “lsnrctl status” 06-27
·Oracle查询中rownum与Order by查询的关系 06-27
·实战经验为何数据库归档日志名称为空 06-26
·快速掌握Oracle数据库游标的使用方法 06-26
·Oracle Lite 10g数据库第三版正式问世 06-25
·Oracle 动态SQL返回单条结果和结果集 06-25
·Oracle多行记录字符串综合操作几种方法 06-24
·如何通过实例配置Oracle监听器 06-24
·如何禁用 oracle 的 XDB 06-27
·理解 oracle 的 “lsnrctl status” 06-27
·Oracle查询中rownum与Order by查询的关系 06-27
·实战经验为何数据库归档日志名称为空 06-26
·快速掌握Oracle数据库游标的使用方法 06-26
·Oracle Lite 10g数据库第三版正式问世 06-25
·Oracle 动态SQL返回单条结果和结果集 06-25
·Oracle多行记录字符串综合操作几种方法 06-24
·如何通过实例配置Oracle监听器 06-24
站内各频道最新更新文档
站内最新制作专题
|
|||||
| ·Windows Vista ·邮件服务器专题 ·协议大全 ·数据恢复指南教程 ·FreeBSD使用教程 ·Linux数据库宝典 ·服务器存储专栏 ·Wlan组网----家庭专题 |
·综合布线工程案例 ·Linux服务器的安全性能 ·iSCSI应用与发展 ·电脑死机原因及解决办法 ·SOA 面向服务架构 ·Zope应用开发指南 ·XML详解 ·J2SE开发应用 |
||||
热门关键字导读
站内频道文章精选
| · AMD董事长年薪1610万美元 · 胡润富豪榜4位女老总遭勒索 · 爱立信中国区副总屠敏离职 |
· 绝对好使的电脑超级技巧 · 想不到浏览器还有这个功能 · 小技巧:宿舍里自娱自乐 |
| · DIY系统:打造移动Win XP · 杂牌摄像头也玩Vista · 在WinXP上运行Vista边栏 |
· 克隆软件Ghost初级使用教程 · [图解]Norton Partition · PowerPoint技巧大集合 |
| · 在VC++应用程序中读取文本 · 使用JBuilder2007开发Web.. · 熊猫烧香核心源码(Delphi) |
· 经验:ASP与存储过程解析 · 节选:快速进入AJAX开发 · Javascript+ASP作无刷新.. |
| · 在Linux 环境下安装 Mysql · Oracle在基于Window操作.. · 每天备份mysql数据的脚本 |
· Photoshop抠图:飘逸秀发.. · 告别雀斑!一个接近自然的 · 用Photoshop美化美女摄像头 |
搜索您感兴趣的内容




