utPLSQL:一個 Oracle PL/SQL 單元測試框架

作者: 不剪發(fā)的Tony老師
畢業(yè)于北京航空航天大學(xué),十多年數(shù)據(jù)庫管理與開發(fā)經(jīng)驗,目前在一家全球性的金融公司從事數(shù)據(jù)庫架構(gòu)設(shè)計。CSDN學(xué)院簽約講師以及GitChat專欄作者。csdn上的博客收藏于以下地址:https://tonydong.blog.csdn.net

文章目錄

        utPLSQL 簡介
        下載安裝
        相關(guān)資源

utPLSQL 簡介

utPLSQL 是一個 Oracle PL/SQL 和 SQL 單元測試框架,遵循類似于 JUnit 和 RSpec 的行業(yè)標(biāo)準(zhǔn)和現(xiàn)代化單元測試框架的最佳模式。utPLSQL 是一個開源項目,基于 Apache-2.0 協(xié)議,源代碼全部使用 PL/SQL 實現(xiàn),托管在 GitHub 上。

著名的 Toad for Oracle 工具就是基于 utPLSQL 構(gòu)建了單元測試功能, utPLSQL 支持以下代碼的自動測試:

    程序包(Package)
    函數(shù)(Function)
    過程(Procedure)
    觸發(fā)器(Trigger)
    視圖(View)
    可以在 PL/SQL 中執(zhí)行和觀測的任何其他代碼

utPLSQL 提供的關(guān)鍵功能包括:

    多種方式與匹配器(matcher)進(jìn)行數(shù)據(jù)比較;
    復(fù)雜類型(對象/集合/游標(biāo))的原生比較;
    測試失敗和錯誤的詳細(xì)且規(guī)范的報告;
    通過注解指定和配置測試用例;
    通過注解配置測試套件的層次結(jié)構(gòu);
    自動事務(wù)控制(可配置);
    內(nèi)置的測試覆蓋率報告;
    通過報告器(reporter)與 SonarQube、Coveralls、Jenkins 以及 Teamcity 進(jìn)行集成;
    插件式的報告器和匹配器體系結(jié)構(gòu);
    簡單靈活的測試調(diào)用方法;
    通過命令行運行測試并生成各種報告。

utPLSQL 目前的版本為 Version 3,支持 Oracle 11.2 以及更高版本。

使用 utPLSQL 測試 PL/SQL 代碼只需要簡單的三個步驟:

    安裝 utPLSQL 測試框架;
    創(chuàng)建單元測試用例;
    運行測試用例;

下圖是通過 SQL Developer 創(chuàng)建業(yè)務(wù)代碼、測試用例以及運行測試的一個簡單過程:

首先,我們需要安裝 utPLSQL。
下載安裝

整個項目包含了多個模塊,可以單獨進(jìn)行下載安裝:

    utPLSQL 框架,核心測試框架,點此進(jìn)行下載;
    utPLSQL-cli,運行 utPLSQL 測試的 Java 命令行客戶端,點此進(jìn)行下載;
    utPLSQL-maven-plugin,運行 utPLSQL 測試的 maven 插件,點此進(jìn)行下載;
    utPLSQL SQL Developer 插件,運行 utPLSQL 測試的 SQL Developer 插件,點此進(jìn)行下載;

我們以 utPLSQL 核心框架的安裝為例,其他模塊的安裝可以參考下文中的相關(guān)文檔。通過上面的下載鏈接,可以選擇下載 utPLSQL.zip 或者 utPLSQL.tar.gz 文件,然后解壓該文件。

[oracle@sqlhost ~]$ cd utPLSQL/source/
[oracle@sqlhost source]$ ls
api                                        create_utplsql_owner.sql           install.sql
check_object_grants.sql                    define_ut3_owner_param.sql         reporters
check_sys_grants.sql                       dummy.sql                          set_install_params.sql
core                                       expectations                       uninstall_all.sql
create_grants.sql                          install_above_12_1.sql             uninstall_coverage_tables.sql
create_synonyms_and_grants_for_public.sql  install_component.sql              uninstall_objects.sql
create_synonyms.sql                        install_ddl_trigger.sql            uninstall.sql
create_user_grants.sql                     install_headless.sql               uninstall_synonyms.sql
create_user_synonyms.sql                   install_headless_with_trigger.sql

 

source 目錄中提供了 utPLSQL 的源代碼以及各種安裝和卸載腳本,推薦使用 install_headless_with_trigger.sql 進(jìn)行安裝:

[oracle@sqlhost source]$ sqlplus / as sysdba @install_headless_with_trigger.sql

 

以上命令使用 SYSDBA 角色運行安裝腳本,該腳本會創(chuàng)建一個新的模式用戶(ut3),密碼為 XNtxj8eEgA6X6b6f;默認(rèn)使用 users 表空間;同時會將其授權(quán)給 public。

安裝完成會顯示類似以下信息:

No errors.
--------------------------------------------------------------
Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

 

No errors 表安裝成功。

可以運行以下 SQL 語句查看 utPLSQL 的版本:

select ut.version() from dual;
UT.VERSION()|
------------|
v3.1.10.3349|

 

也可以簡單運行一下測試:

SQL> set serveroutput on;
SQL> call ut.run();
Finished in .000012 seconds
0 tests, 0 failed, 0 errored, 0 disabled, 0 warning(s)

Call completed.

 

我們還沒有創(chuàng)建任何測試用例,所以上面的語句沒有執(zhí)行實際的操作,但是表明 utPLSQL 能夠正常運行。

    utPLSQL 支持其他的安裝方法和選項,可以參考官方用戶指南。

如果需要卸載 utPLSQL,可以使用 uninstall.sql 腳本,提供 utPLSQL 所在的模式名即可:

sqlplus / as sysdba @uninstall.sql ut3

 

該腳本會刪除之前安裝的對象,但是不會刪除模式用戶。

另外一種卸載方法就是直接刪除 utPLSQL 模式用戶。
相關(guān)資源

    utPLSQL 官方文檔;
    一個完整的 utPLSQL 演示項目;
    在線視頻:Oracle PL/SQL 單元測試;
    utPLSQL Cheat Sheet;
    utPLSQL-cli 說明文件;
    utPLSQL maven 插件說明文件;
    utPLSQL SQL Developer 插件說明文件;
    博客文章:在 SQL Developer 中運行 utPLSQL 測試。

定期更新數(shù)據(jù)庫領(lǐng)域相關(guān)文章,歡迎點贊??、評論??、收藏??!