MySQL自动测试框架是一个以MySQL框架和内部引擎为测试对象的工具,主要执行脚本在发布路径的mysql-test目录下。自动测试框架的主要测试步骤,是通过执行一个case,将该case的输出结果,与标准的输出结果作diff。输入文件都在t目录下,输出文件在r目录下。对应的输入输出文件仅后缀名不同,分别为 *.test 和 *.result。
执行方式:在mysql-test/ 目录下执行 ./mtr testname,只需要指明测试case的前缀即可,当然也可以执行./mtr testname.test,效果相同。
批量执行命令的方式:
1、 ./mtr
该命令会执行所有的case。包括t/目录下所有以.test为后缀的文件,也包括 suits目录下的所有以.test为后缀的文件。
注意:只要任何一个case执行失败(包括内部执行失败和与result校验失败)都会导致整个执行计划退出。因此 --force 很常用,加入这个参数后,mtr会忽略错误并继续执行下一个case直到所有的case执行结束。
2、./mtr --suite=funcs_1
Suits目录下有多个目录,是一些测试的套餐。此命令单独执行 suits/funcs_1目录下的所有case。(其他目录不执行)
t/目录下的所有文件组成了默认的套餐main。 因此 ./mtr --suite=main则只执行t/*.test.
3、 ./mtr --do-test=events
执行所有以 events为前缀的case(搜索范围为t/和所有的suite)。
–do-test的参数支持正则表达式,上述命令等效于./mtr --do-test=events.*
所以如果想测试所有的包括innodb的case,可以用 ./mtr --do-test=.*innodb.*
执行结果出错的处理办法:
1、执行case失败有很多种可能,比如中间执行了某个非法的语句,这个例子中的失败,指代的是执行结果与预期结果不同。
2、出错case的执行结果会保存在r/filename.reject中。如果filename.reject中的结果才是正确的结果,可以用filename.reject将filename.result覆盖掉,这样正确的标准测试case就完成了。
注:可以直接使用 ./mtr filename --record命令生成filename.result。
3、 注意mtr在作diff的时候是直接文本比较,因此如果case中出现了多次执行结果可能不同的情况(比如时间相关),这不是一个好的case。
注意事项:
默认情况下, r/testname.result中会包含原语句和执行结果,若不想输出原语句,需要在t/restname.test文件头使用 --disable_query_log。
官网链接:https://dev.mysql.com/doc/dev/mysql-server/latest/PAGE_MYSQL_TEST_RUN.html
文章来源参考链接:https://blog.csdn.net/iteye_621/article/details/81959655,如有侵权,请联系删除。
网友评论