MO-Tester 规范要求

编写测试用例规范 - case

规范详情
文件命名
1. 以 .sql.test 作为后缀。

2. 文件名称有实际含义。例如,需要编写测试索引用例,可以将测试索引用例命名为 index.sql 或者index_xxxx.sql
测试用例
1. 测试用例,即 case 内的具体示例内容,所有的空行在测试时都自动忽略,你可以通过添加空行来使整个文件内容更易读。

2. 每条 SQL 语句只写一行,如果必须要多行书写,那么每行必须顶格书写,且 SQL 结尾不能有空格,否则将造成 case 文件 和 result 文件中 SQL 不能完全匹配。

3. 添加注释,注明当前所写测试用例的目的。

4. 为需要增加 Tag 标签测试用例添加 Tag。

测试用例注解说明 - Tag

注解起始结束说明
— @bvt:issue— @bvt:issue#{issueNO.}]— @bvt:issue带有此注解标记的 SQL 将不会被执行
— @sessio— @session:id=X{— @session}带有此主键标记的所有 SQL 将在 id=X 的新会话中执行
— @separator//指定 SQL 语句在解析其 result 以及生成 result 文件的时候,使用的列分隔符,有两个取值
— @separator:table//表示结果中列分隔符为制表符 \t
— @separator:space//表示结果中列分隔符为 4 个空格
— @sortkey— @sortkey:1,2,3/表示该 SQL 语句的结果是有序的,排序键为第 1,2,3 列(从 0 开始);正常情况下,被测试系统返回的结果顺序是不固定的,所以工具在比对的时候,会把实际结果和预期结果都进行排序后比对,但是对于某些 SQL,其预期的结果就应该是有序的,比如存在 order by 的 SQL 语句,那么需要把类似这种 SQL 添加上这样的 Tag,工具在比对的时候,不会对 sortkey 中的这些列进行重新排序

编写测试结果规范 - result

规范详情
普通测试用例生成测试结果
1. 如果新增了测试 case 文件,首先确保所有 SQL 都调试通过,使用 MO-Tester 工具自动生成测试结果。

2. 如果是在已有的 case 内新增一些 SQL,首先确保所有 SQL 都调试通过,使用 MO-Tester 工具自动生成测试结果。
含有 Tag 的测试用例生成测试结果
1. 如果新增测试 case 文件,且 case 文件内含有带 —bvt:issue 标签 SQL,使用 MO-Tester 工具自动生成测试结果,带 —bvt:issue 标签 SQL 在所生成的 result 文件中结果为 unknown result because it is related to issue#XXX”

2. 如果是已有测试 case 文件,已通过 MO-Tester 工具自动生成测试结果,再次使用 MO-Tester 工具自动生成测试结果时,带 —bvt:issue 标签 SQL 在所生成的 result 文件中结果将保留原有值,不再更新。
手动编写测试结果
1. 如果是手动编写 result,不可有空行,否则结果将产生解析错误。

2. 如果预期某条 SQL 的执行结果中,存在制表符或者超过连续的 4 个空格,则在测试 case 文件中对应的 SQL 语句,必须增加 Tag 标签 — @separator:,否则将解析失败。例如,若 case 文件中对应的 SQL 语句含连续 4 个空格,则需要指定 Tag 标签 — @separator:space;若含含有制表符,则指定 Tag 标签 — @separator:table

在测试用例脚本中设置标记

有时,为了达到特定的目的,如暂停或创建新连接,您可以向脚本文件添加特殊的标记。Mo tester 提供以下标签供使用:

标签说明
— @skip:issue#{IssueNo.}设置后,整个脚本文件将被跳过,并且不再执行 issue{IssueNo.}
— @bvt:issue#{IssueNo.}
— @bvt:issue
不执行 issue{IssueNo.} 这两个标记之间的 sql 语句。
— @sleep:{time}mo-tester 将等待时长{time}
— @session:id=2&user=root&password=111
— @session
mo tester 将创建一个新的连接来执行这两个标记之间的 sql 语句。
id 默认值为 1,最大值为 10。
mo.yml 中配置了用户和密码的默认值。
— @sortkey:设置此标记,表示对结果进行排序。例如:
——@sortkey:0,1:表示排序键是第一列和第二列。