海山数据库(He3DB)源码详解:海山Mysql 自动测试框架MTR

海山数据库(He3DB)源码详解:海山Mysql 自动测试框架MTR

一、MySQL自动测试框架原理

1、简介

在修改内核代码后,不仅需要测试新增功能,同时也要对原有功能做回归测试,以保证新加代码对原有功能没有影响,这就需要用到MySQL源码自带的测试框架MySQL Test Framework,简称MTR

Test Framework主要应用于MySQL等相关数据库项目开发测试,对单个功能点或者模块进行正确性和功能性测试,该工具在SQL级别对MySQL进行单元测试。Test Framework不仅仅能测试SQL语句,也能根据实际需要测试不同启动参数配置的MySQL服务器和客户端从而验证指定的功能逻辑。

2、原理实现

  • 操作步骤:
    (1)初始化参数
    (2)收集测试用例
    (3)初始化服务器
    (4)运行工作子进程
    (5)结果信息的输出保存

在这里插入图片描述

Test Framework需要初始化参数、收集测试用例、初始化服务器、运行工作子进程、结果信息的输出保存等步骤。接下来重点分析:
1)初始化服务器(initialize_servers()
 在设置读取到的命令行的选项参数(command_line_setup())以及收集完本次所需的测试用例文件(collect_test_cases())后,需要初始化mysqld服务器。
 首先创建var目录,var目录保存MySQL数据文件、日志信息、临时文件,运行期间产生的临时文件会在成功执行后删除。之后运行mysql_install_db()进行服务器的初始化。
2)运行工作子进程(run_worker()
 通过_safe_fork()创建子进程,主进程在初始化套接字后,根据并行数parallel(默认为1)启动一个或多个子进程用于执行测试用例。在子进程run_worker()中循环监听主进程发送的消息,如果接收到‘TESTCASE’类型消息,则执行测试用例run_testcase()
 在执行真正的测试用例文件之前,Test Framework会进行第一次check_testcase(),mode=”before”,并在结束后再执行一次check_testcase(),mode=”after”,每次执行都是调用mysqltest执行一遍check_testcase.test测试用例文件,并将结果保存。执行两次的目的是,检查对比前后执行的结果,防止执行真正的测试用例改变服务器中的数据,保证前后数据的一致性。
check_warnings()检查服务器的输出日志是否存在可疑的日志消息。Test Framework明确100多种通用的需要抑制的警告或者错误信息,其他的输出信息会被当做可疑日志信息,保存在后缀为.warnings的文件中。
3)主进程接收子进程的执行结果(run_test_server()
 启动的run_worker与主线程之间是server-client模式,主线程是serverrun_worker()client
 主线程与run_worker是一问一答模式,主线程向run_worker发送运行用例的文件路径、配置文件参数等各种参数信息,run_worker向主线程返回运行结果,直到所有在collection中的用例都运行完毕,主线程closerun_worker,进行收尾工作。
 主线程先读取各run_worker返回值,对上一个用例进行收尾工作。之后,读取collection中的用例,通过本地socket发送到run_worker线程,run_worker线程接收到主线程命令,运行本次用例执行函数run_testcase(),而run_testcase()主要负责3件事:启动mysqld、启动并监控mysqltest,处理执行结果。

  • 整体流程

-启动mysqld:根据参数启动一个或者多个mysqldstart_servers()),在start_servers大多数情况下会拷贝主线程初始化后的目录到run_worker的目录,作为新实例的启动目录,用

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值