我是靠谱客的博主 魔幻衬衫,最近开发中收集的这篇文章主要介绍1. MySQL Test Run(MTR)介绍以及官方包安装MySQL Test Run,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

MySQL Test Run

官方文档

MySQL Test Run 简称 mtr,称为 Mysql自动测试框架
MySQL Test 是 MySQL 发行版本中集成 all-in-one 测试框架,用于做 mysql 服务的单元,回归和一致性测试,并提供了运行单元测试和创建新单元测试的工具。框架包括一组测试用例和用于运行它们的程序:perl 脚本(mysql-test-run.pl)和 c++ 二进制(mysqltest)。perl 脚本:负责控制流程,包括启停、识别执行哪些用例、创建文件夹、收集结果等操作。
MySQL自动测试框架是一个以MySQL框架和内部引擎为测试对象的工具。主要执行脚本在发布路径的mysql-test目录下。自动测试框架的主要测试步骤,是通过执行一个case,将该case的输出结果,与标准的输出结果作diff。
这里的“标准输出结果”指代在可信任的MySQL版本上的执行结果。

主要目录介绍

include
包含.inc文件,用于测试开始时判断是否满足测试条件,在测试用通过source命令引入
如have_innodb.inc
如不满足,则会跳过需要该验证的测试。
suite
包含所有测试suite,每一个suite为一个测试用例集

安装与使用

1. 源码安装

1.1 下载源码包
下载地址
下载 mysql-boost-8.0.26.tar.gz
1.2 编译安装
安装需要的包
如果是deepin系统

sudo apt install cmake make gcc g++ libncurses5-dev

如果是centos

sudo yum -y install cmake make gcc g++ libncurses5-dev

创建一个目录

mkdir /home/great/mysql_mtr

将下载好的包解压到该目录

tar -xvf mysql-boost-8.0.26.tar.gz -C /home/great/mysql_mtr

进入该目录进行编译

cd /home/great/mysql_mtr/mysql-8.0.26
mkdir bld
cd bld
cmake ..

请注意观察cmake的结果是否有报错,如果是第一次编译,将会有boost的报错提示

You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=<directory>

将目录位置替换为 /tmp 再次cmake

cmake .. -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/tmp

出现config 完成之后就可以make

make -j 10

notes:
Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一。

1.3 使用

安装好了我们可以开始使用了。

测试用例编写的规范

  • 尽可能避免每行超过80个字符 ;
  • 用#开头,作为注释;
  • 缩进使用空格,避免使用tab;
  • SQL 语句使用相同的风格,包括关键字大写,其它变量、表名、列名等小写;
  • 增加合适的注释。特别是文件的开头,注释出测试的目的、可能的引用或者修复的bug编号;
  • 为了避免可能的冲突,习惯上表命名使用 t1、t2…视图命名使用v1、v2…;

处理预期错误
在期望有返回错误的语句前面使用error指令

--error 1690
select add_months('2000--12-1',-1e40) from dual;

mtr的位置

cd /home/mysql_mtr/mysql-8.0.26/bld

t 和 r 文件的位置

cd /home/great/mysql_mtr/mysql-8.0.26/mysql-test/

测试
在t目录创建两个xx.test 文件

cd  /home/great/mysql_mtr/mysql-8.0.26/mysql-test/t

vim a.test
select 1;

vim b.test
select 2;

在mtr目录执行测试

cd /home/great/mysql_mtr/mysql-8.0.26/bld/mysql-test
great@great-PC:~/mysql_mtr/mysql-8.0.26/bld/mysql-test$ ./mtr a.test
Logging: /home/great/mysql_mtr/mysql-8.0.26/mysql-test/mysql-test-run.pl  a.test
MySQL Version 8.0.26
Checking supported features
Using 'all' suites
Collecting tests
Checking leftover processes
Removing old var directory
Creating var directory '/home/great/mysql_mtr/mysql-8.0.26/bld/mysql-test/var'
Installing system database
Using parallel: 1

==============================================================================
                  TEST NAME                       RESULT  TIME (ms) COMMENT
------------------------------------------------------------------------------
[ 33%] main.a                                    [ fail ]
        Test ended at 2021-07-21 09:33:52

Result file '/home/great/mysql_mtr/mysql-8.0.26/mysql-test/r/a.result' doesn't exist.
Either create a result file or disable check-testcases and run the test case. Use --nocheck-testcases option to disable check-testcases.


Mysqltest client output from logfile
----------- MYSQLTEST OUTPUT START -----------

select 1;
1
1

------------ MYSQLTEST OUTPUT END -----------

 - the logfile can be found in '/home/great/mysql_mtr/mysql-8.0.26/bld/mysql-test/var/log/main.a/a.log'


Only  1  of 2 completed.
mysql-test-run: *** ERROR: Not all tests completed

此时是错误的,因为在对应的r目录,就是我们存放xx.result 文件没有 a.result文件,无法进行对比,因此是fail的。
我们执行这个命令

great@great-PC:~/mysql_mtr/mysql-8.0.26/bld/mysql-test$ ./mtr --record a.test
Logging: /home/great/mysql_mtr/mysql-8.0.26/mysql-test/mysql-test-run.pl  --record a.test
MySQL Version 8.0.26
Checking supported features
Using 'all' suites
Collecting tests
Checking leftover processes
Removing old var directory
Creating var directory '/home/great/mysql_mtr/mysql-8.0.26/bld/mysql-test/var'
Installing system database
Using parallel: 1

==============================================================================
                  TEST NAME                       RESULT  TIME (ms) COMMENT
------------------------------------------------------------------------------
[ 33%] main.a                                    [ pass ]       
[ 66%] zhangyuling.a                             [ pass ]       
[100%] shutdown_report                           [ pass ]       
------------------------------------------------------------------------------
The servers were restarted 0 times
The servers were reinitialized 0 times
Spent 0.000 of 5 seconds executing testcases

Completed: All 3 tests were successful.

会将a.result 文件自动生成到r目录,这样就不会报错了。我们去r目录检查

great@great-PC:~/mysql_mtr/mysql-8.0.26/mysql-test/r$ pwd
/home/great/mysql_mtr/mysql-8.0.26/mysql-test/r
great@great-PC:~/mysql_mtr/mysql-8.0.26/mysql-test/r$ ll a.result 
-rw-r--r-- 1 great great 14 721 09:35 a.result

mtr 命令行参数的介绍
–force
默认情况下,只要遇到一个用例出错,测试程序就会退出,在指定force的情况下,测试程序会继续执行下面的测试(但是最多发现10个错误还是会退出)
–record
假设测试产生了输出文件,此时测试的结果一定是fail的,因为判断用例是否通过是判断运行的输出与结果文件是否一致。失败后会产生一个文件 r/test_name.reject。检查reject文件的内容,如果里面是期望的输出,则将内容拷贝到.result文件中,作为以后判断运行结果是否通过的依据。Mysql-test还提供了一个参数—record实现自动生成result文件的方式
–big-test
执行标记为big的测试用例。因为用例较大、耗时较长,标记为big的用例默认不会执行。输入两遍big-test则只执行标记为big的测试用例
连接远程的数据库执行 mysql_test用例命令:

./mysql-test-run.pl --extern host=10.8.30.1 --extern port=7788 --extern user=root --extern password='uddbtest7788' 

host :远程服务器地址

port:远程服务器端口

paasswd:连接密码

user:连接用户

–suite
指定执行的测试用例套件,有时候我们要执行一套xx.test文件,这样可以在执行时候指定套件名称。

2. 安装包安装

2.1 安装环境

本次安装环境是CentOS 8.5

yum -y install perl* -y
  2.2 下载安装包并解压

本次采用的MySQL版本是8.0.28,可根据需要自行选择版本。

cd  /home/
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-test-8.0.28-linux-glibc2.12-x86_64.tar.xz
tar -xvf mysql-test-8.0.28-linux-glibc2.12-x86_64.tar.xz
mv mysql-8.0.28-linux-glibc2.12-x86_64 mysql_mtr_8.0.28
cd /home/mysql_mtr_8.0.28/
cp -r /path-to-db/* /home/mysql_mtr_8.0.28/  #将mysql安装包目录下的文件与mtr目录合并
cd /home/mysql_mtr_8.0.28/mysql-test #进入mtr目录

最后

以上就是魔幻衬衫为你收集整理的1. MySQL Test Run(MTR)介绍以及官方包安装MySQL Test Run的全部内容,希望文章能够帮你解决1. MySQL Test Run(MTR)介绍以及官方包安装MySQL Test Run所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部