10bet网址
MySQL内部手册


26.5.2协议选项的变更

运行测试时,通常使用或不使用mysql-test-run.pl启动选项“——ps-protocol”。系统QA也尝试运行其他协议。

  • "——ps-protocol"选项的作用:mysqltest将运行尽可能多的SQL语句。

  • 选项“——sp-protocol”/“——cursor-protocol”/“——view-protocol”的作用:据我所知,mysqltest接受许多语句,并将它们转换成语句序列,检查相应的特性(存储过程、游标或视图)。

我们有很多运行非常相似和极其简单的SQL的测试,只是为了创建要测试的情况,检查表内容,等等。因此可以假设第n次运行简单语句的测试并没有提高覆盖率。

结论:

如果您的测试包含

  • 简单语句:防止“协议”的无价值运行。

  • 存储引擎变体:防止协议在除一个存储引擎(我认为是MyISAM)之外的所有引擎上运行。

  • “独特”和复杂的陈述:

    • ps-protocol语句=所有SQL语句

    • sp-protocol语句= DML

    • view/cursor-protocols语句=选择

不要阻止协议运行。

使用这种协议运行的另一个问题是,在某些情况下,我们会得到不同的协议内容。

例子:

脚本:

SELECT * FROM processlist…

如果运行时没有任何“——*-protocol”,则协议内容:

用户ID…命令……STATE INFO 1 root…查询准备SELECT * FROM processlist…

如果使用"——ps-protocol"运行协议内容:

用户ID…命令……STATE INFO 1 root…执行……准备SELECT * FROM processlist…

所以请检查每个新测试是否对每个协议给出相同的结果,但至少对“——ps-protocol”。如果没有,做以下事情:

  • 从执行中排除一些协议变体。

  • 禁止对有问题的语句使用协议。

  • 编写协议变体特定测试。

示例解决方案(顶层脚本中的代码):

#有预期结果的文件只适合运行没有if (' SELECT $PS_PROTOCOL + $SP_PROTOCOL + $CURSOR_PROTOCOL + $VIEW_PROTOCOL > 0 '){——skip Test require: ps-protocol/sp-protocol/cursor-protocol/view-protocol disabled}——source include/.inc

#带有预期结果的文件只适合使用“——ps-protocol”运行。if (' SELECT $SP_PROTOCOL + $CURSOR_PROTOCOL + $VIEW_PROTOCOL > 0 OR $PS_PROTOCOL = 0 '){——skip Test要求:启用ps-protocol,禁用其他协议}——source包含/<任何>.inc .