SQLScript 中最终用户测试框架的入口点是内置过程 SYS.SQLSCRIPT_RUN_TESTS_ON_ORIGINAL_DATA。 备注如过程名称所示,将对系统中的现有数据运行测试。在写入在系统中更改或删除对象或数据的测试时,您需要格外注意,因为其他人可能会受到这些更改的影响。测试本身也可能受到在同一系统上并行运行的其他测试的影响。
缺省情况下,用户没有内置过程 SYS.SQLSCRIPT_RUN_TESTS_ON_ORIGINAL_DATA 的 EXECUTE 特权。您需要获得授予此权限(例如,由 SYSTEM 用户授予)。
要在 SQLScript 测试框架中调用最终用户测试,必须执行以下 CALL 语句。
CALL SYS.SQLSCRIPT_RUN_TESTS_ON_ORIGINAL_DATA('', ?, ?, ?) SYS.SQLSCRIPT_RUN_TESTS_ON_ORIGINAL_DATA 的第一个参数指定要执行的测试计划,必须以 JSON 格式提供。测试计划指定应运行哪些测试和哪些配置。它还包含有关测试框架要执行的测试库的信息。 备注通配符可用于指定 JSON 字符串中的值('*' 表示多个通配符,'?'仅针对一个通配符)。
CALL SYS.SQLSCRIPT_RUN_TESTS_ON_ORIGINAL_DATA('{"schema":"MY_SCHEMA","library":"*"}', ?, ?, ?)
CALL SYS.SQLSCRIPT_RUN_TESTS_ON_ORIGINAL_DATA('{"schema":"MY_SCHEMA","library":"LIB*TEST"}', ?, ?, ?)
CALL SYS.SQLSCRIPT_RUN_TESTS_ON_ORIGINAL_DATA('[{"schema":"MY_SCHEMA","library":"SOME_PREFIX_*"},{"schema":"OTHER_SCHEMA","library":"*_SOME_SUFFIX"}]', ?, ?, ?)
对 SYS.SQLSCRIPT_RUN_TESTS_ON_ORIGINAL_DATA 的第一次调用将在模式 MY_SCHEMA 中运行语言类型为 SQLSCRIPT TEST 的所有库的所有测试(分别在其所有配置中)。第二次调用会执行相同的操作,但会将过滤器应用于要执行的库。在此,测试框架将只执行名称以 'LIB' 开头且以 'TEST' 结尾的 SQLSCRIPT TEST 库。对于第三个调用,还将执行模式 OTHER_SCHEMA 中语言类型为 SQLSCRIPT TEST 的库,但其名称必须以 '_SOME_SUFFIX' 结尾。
以下描述了可在测试计划的 JSON 字符串中提供的内容的完整定义。
::= ||
::= '[' [',' ] ']'
::= '{' ["schema":"' '",] "library":"' '"' [', "classifications":' ] [', "exclude-classifications":' ] [', "run":' ] '}'
::= '[' [',' ] ']'
::= '{' [','
::= [ '"tests":[' ']' || '"configurations":[' ']' || '"exclude-tests":[' ']' || '"exclude-configurations":[' ']' ]
::= '"' '"' [', "' '"']
::= letter_or_digit_or_asterisk+
备注
备注
可以在多个级别指定分类,并且还需要在多个级别执行基于分类的过滤。
对于排除分类,这意味着以下内容:
对于分类,这意味着以下内容:
考虑以下示例: 示例代码CREATE LIBRARY LIB_TEST LANGUAGE SQLSCRIPT TEST AS BEGIN@TestClassification('clas0') @TestSetUpLibrary() PUBLIC PROCEDURE SETUPLIB AS BEGIN END; @TestClassification('clas1') @TestSetUpConfig('A') PUBLIC PROCEDURE SETUPCONFIGA AS BEGIN END;@TestSetUpConfig('B')PUBLIC PROCEDURE SETUPCONFIGB AS BEGIN END;@TestClassification('clas2')PUBLIC PROCEDURE TESTA AS BEGIN END;PUBLIC PROCEDURE TESTB AS BEGIN END;END
如果包括分类 'clas0',则将执行所有操作。如果包括分类 'clas1',则将执行配置 'A' 中的所有内容。如果包括分类 'clas2',则仅执行 'TESTA',但在两个配置('A' 和 'B' 中)。
如果包括分类 'clas0' 并排除 'clas1',将仅执行配置 'B'(通过两个测试)。如果包括分类 'clas0' 并排除 'clas2',则仅执行 'TESTB',但在两个配置中 - 'A' 和 'B'。如果包括分类 'clas1' 并排除 'clas2',则仅执行配置 'A' 中的 'TESTB'。
如果包括分类 'clas2' 并排除 'clas0',则不会执行任何操作。如果包括分类 'clas2' 并排除 'clas1',则仅执行 'TESTA' 且仅在配置 'B' 中执行。如果包括分类 'clas1' 并排除 'clas0',则不会执行任何操作。
SYS.SQLSCRIPT_RUN_TESTS_ON_ORIGINAL_DATA 的三个输出参数具有以下表结构。
列名称类型描述SCHEMA_NAMENVARCHAR(256)模式名称LIBRARY_NAMENVARCHAR(256)库名称CONFIGURATION_NAMENVARCHAR(256)配置名称TEST_NAMENVARCHAR(256)测试名称TEST_EXECUTION_IDBIGINT在详细信息输出表中查找的唯一标识符TEST_EXECUTION_TIMEBIGINT持续时间(微秒)TEST_EXECUTION_MEMORY_SIZEBIGINT测试执行期间使用的内存大小(请参阅M_ACTIVE_PROCEDURES)TEST_EXECUTION_RESULT_STATEVARCHAR(16)测试结果通过 | 失败 | 错误 | 已跳过 | 已取消TEST_COMMENTSNVARCHAR(5000)为测试库中的相应成员定义的用户定义注释
列名称类型描述TEST_EXECUTION_IDBIGINT特定测试运行的标识符RESULT_DETAIL_IDBIGINT调用堆栈输出表中查找的唯一标识符RESULT_DETAILNCLOB长文本描述测试运行期间失败/发生的错误
列名称类型描述RESULT_DETAIL_IDBIGINT特定调用堆栈的标识符FRAME_LEVEL整数调用堆栈框架的级别DATABASE_NAMENVARCHAR(256)数据库名称SCHEMA_NAMENVARCHAR(256)模式名称OBJECT_NAMENVARCHAR(256)对象名称MEMBER_NAMENVARCHAR(256)库成员名称LINE整数SQL 行号柱状图整数SQL 列值职位整数SQL 位置值