前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浅析mysql-test框架

浅析mysql-test框架

作者头像
腾讯数据库技术
发布2020-01-03 14:11:08
2.1K0
发布2020-01-03 14:11:08
举报

1 综述

MTR框架分为两部分:perl脚本(mysql-test-run.pl)和c++二进制(mysqltest)。perl脚本负责控制流程,包括启停、识别执行哪些用例、创建文件夹、收集结果等等,mysqltest负责执行测试用例,包括读文件,解析特定语法,执行用例。用例的特殊语法(比如,--source,--replace_column等)都在command_names和enum_commands两个枚举结构体中。

MTR框架时序图如下所示:

2 Perl脚本控制框架

如上图所示,mysql-test-run.pl框架运行流程如下:

1、初始化(Initialization)。确定用例执行范围(collect_test_cases),包括运行哪些suite,skip哪些用例,在本阶段根据disabled.def文件--skipXXX命令(比如skip-rpl)等确定执行用例。将所有用例组织到一个大的内存结构中,包括用例启动参数,用例

同时,初始化数据库(initialize_servers()->mysql_install_db()),后面运行用例启动数据库时,不需要每次初始化,只需从这里的目录中拷贝启动

2、运行用例(run test)。主线程根据参数--parallel,默认是1)启动一个或者多个用例执行线程(run_worker()),各线程有自己独立的client port,data dir等。启动的run_worker与主线程之间是server-client模式,主线程是server,run_worker()是client。主线程与run_worker是一问一答模式,主线程向run_worker发送运行用例的文件路径、配置文件参数等各种参数信息,run_worker向主线程返回运行结果,直到所有在collection中的用例都运行完毕,主线程close各run_worker,进行收尾工作

主线程先读取各run_worker返回值,对上一个用例进行收尾工作。之后,读取collection中的用例,通过本地socket发送到run_worker线程,run_worker线程接收到主线程命令,运行进去本次用例执行函数(run_testcase()),run_worker()的run_testcase()主要负责3件事:启动mysqld、启动并监控mysqltest,处理执行结果

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

启动并监控mysqltest:用例在mysqltest中执行,run_worker线程会监控mysqltest的运行状态,监测其是否运行超时或者运行结束。

处理执行结果:mysqltest执行结束会留下执行日志,框架根据执行日志判断执行是否通过,如果没通过是否需要重试等

3 C++执行框架

执行框架都集中在mysqltest.cc中,mysqltest读取用例文件(*.test),根据预定义的命令(比如--source,--replace_column, shutdown_server等)执行相应的操作。mysql根据run_worker传入的运行参数(args)获得用例文件路径等信息,然后读取文件逐行执行语句,语句分为两种,一种是可以直接执行的SQL语句,一种是控制语句,控制语句用来控制mysqlclient的特殊行为,比如shutdown mysqld等,这些命令预定义在command_names中


腾讯数据库技术团队对内支持QQ空间、微信红包、腾讯广告、腾讯音乐、腾讯新闻等公司自研业务,对外在腾讯云上支持TencentDB相关产品,如CynosDB、CDB、CTSDB、CMongo等。腾讯数据库技术团队专注于持续优化数据库内核和架构能力,提升数据库性能和稳定性,为腾讯自研业务和腾讯云客户提供“省心、放心”的数据库服务。此公众号和广大数据库技术爱好者一起,推广和分享数据库领域专业知识,希望对大家有所帮助。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯数据库技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档