關於Oracle預存程序測試

來源:互聯網
上載者:User

 來源:網路/責編:編程入門 作者:不詳

  常規方式儲存測試資訊

  建立相關資料表

  建立資料表TestInfoLog,和序號SEQ_TestInfoLog

  參考目前的目錄下的 TestInfoLog.sql ,運行這部分指令碼。

  建立測試資訊儲存包

  建立一個測試資訊儲存的 Package

  參考目前的目錄下的 PKG_Test_Info.pck,編譯這個包。

  具體例子

  例子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 ,把相關資訊儲存到測試資料表。---www.bianceng.cn

  可以從後台擷取一些運行環境資訊,比如採取下面的類似方式擷取一些資訊

  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的應用中關於測試資料的產生部分,並且做到據根據業務需要,測試測試數的產生可以帶有隨機性。或者按照關鍵用例為主來產生測試資料。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.