写点什么

openGauss 开源自动化测试框架 Yat,增强社区测试能力

作者:openGauss
  • 2021 年 11 月 23 日
  • 本文字数:2109 字

    阅读完需:约 7 分钟

openGauss开源自动化测试框架Yat,增强社区测试能力

Yat(Yat Another Test Framework)框架是基于 python3 的自动化测试框架,核心由 Kotlin 语言实现,通过 python 在外层进行封装和粘合对外提供命令行接口,总体框架如图一所示。Yat 框架在持续演进中,以探索更高效、更先进的自动化测试框架。


openGauss 数据库规格看护使用的自动化测试框架就是 Yat,openGauss 2.1.0 除了将 Yat 开源,还一并贡献了 3W+自动化用例,旨在增强 openGauss 社区的测试能力,丰富 openGauss 生态,吸引更多的开发者参与社区建设。


图片图 1 Yat 总体框架


产品优势


  1. 对数据库测试友好,用户可以直接写 SQL 代码并组织成测试套进行测试,无需额外配置,用例通过 JDBC 接口执行,可以适配各种数据库。

  2. 支持多语言并可扩展


当前支持 Sql、Shell、Python(unittes)、Groovy(Junit/Spock)等语言,并且可以通过 adapter 灵活扩展增加新语言和框架支持。其中 yat 支持的 sql,是标准 SQL 的超集,即在标准 SQL 的基础上进行了扩充,用户可以在 SQL 脚本中执行 shell 命令、连接控制、循环、SQL 绑定执行、多 session 控制、并发执行等,例如:


@conn user/passwd@127.0.0.1:9090; -- 用新的用户重新链接数据库 drop table if exists tbl_x; -- 执行 sql


create table tbl_x (id int, age int, xb int);


insert into tbl_x values(1, 2, 4);insert into tbl_x values(3, 4, 5);


-- 绑定执行 insert into tbl_x values(?, ?, ?);@bind {int 3int 5int 7}-- 批量绑定执行 insert into tbl_x values(?, ?, ?);@batch {int 3 int 4 int 0int 3 int 4 int 9int 3 int 4 int 8int 3 int 4 int 7}-- 执行 shell 命令 @sh zctl.py -t stop;@sh zctl.py -t start;


-- 定义多 session@session(name: s1){@set autocommit false;update table tbl_x set par1 = 2 par2 = 2;insert into tbl_x values(1, 3, 4);commit;}


@session(name: s2, user: abc, password: 'gauss@123'){@set autocommit false;update table tbl_x set par1 = 2 par2 = 2;insert into tbl_x values(1, 3, 4);@step{select * from tbl_x for update;}commit;}-- 执行多 session 中的 sql@steps s1.0 s2.0 s1.1 s1.2 s2.2 s2.1;-- 循环执行 @for (count: 10){insert into abc values(1,1,3,4);}-- 并发执行 @parallel {@session {select * from abc for update;commit;}


@session {    select * from abc for update;    commit;}
复制代码


}Python 语言测试脚本必须是一个 unittest 测试脚本,yat 额外提供了一套公共库用来方便在 python unittest 测试脚本中进行数据库和远程 ssh 操作,例如:


class TestPrimaryStandby(TestCase):node = Nonenode_standby = None


test_table_drop = 'drop table if exists tbl_test';test_table_create = '''create table tbl_test (    id int,    name char(20),    address varchar(1024))'''
@classmethoddef setUpClass(cls):# 初始化连接对象 cls.node = Node(node='primary') cls.node_standby = Node(node='standby') cls.node.sql(cls.test_table_drop) cls.node.sql(cls.test_table_create)
@classmethoddef tearDownClass(cls) -> None: cls.node.close() cls.node_standby.close() # 关闭连接对象
def test_abc_001(self): # 通过ssh执行shell,并判断结果 self.node.sh('echo "success"').expect('success')
# 执行sql并判断结果 self.node.sql('select * from tbl_test').expect( (1, 'xxx', 'xxxxxxxxxxxxxxxxxxx'), (2, 'xxx', 'xxxxxxxxxxxxxxxxxxx'))
def test_abc_003(self): # 执行shel命令,并通过正则匹配判断结果 self.node.sh('cm ctl query').regex(r'.*success.*')
复制代码


Groovy 脚本可以写 Junit 用例也可以写 Spock 用例,这方面不过多介绍,更多细节可以去官网和搜索网站进行学习


  1. 定义了一套标准的测试用例书写规范、测试执行流程和测试报告呈现方式


首先通过命令(yat init)创建测试套模板,执行完 yat init 命令后,修改指定的测试套目录下的相关内容,之后,安装 JDBC 驱动,在测试套根目录添加 lib 目录,将驱动拷贝到此目录,最后通过命令 yat suite run 执行测试套,可添加不同的参数设置是否打印报告以及报告的格式。测试套目录结果如图二所示。执行测试套前配置以下目录:


conf 目录,节点配置文件


except 目录,测试用例的期待文件


schedule 目录,调度文件


testcase 目录,测试用例文件


图片图 2 测试套目录结构


  1. 多测试套调度(multi-suite schedule)


Yat Schedule 是 Yat 提供的一种同时调度多个 Yat 测试套的调度器,用户通过制定调度文件来进行多个 Yat 测试套的并行或串行的调度。在有大量测试套情况下,用户需要决定测试套的组合和顺序问题,Yat 提供了便捷的方法,如下用例,用户可以将多个测试套组织为一个大测试套:

文件名:all.ys

serial { # 串行执行测试套或测试套的集合 suite '../suite1';suite '../suite2';...


parallel { # 并行执行测试套或测试套的集合    suite 'parallel/suite1';    suite 'parallel/suite2';    ...        serial { ... }}
suite 'suite3';...
复制代码


}通过如下命令可以一键执行所有测试套


yat schedule -s all.ysYat 代码仓 gitee 地址:https://gitee.com/opengauss/Yat


欢迎大家访问,交流。

用户头像

openGauss

关注

还未添加个人签名 2020.11.13 加入

openGauss是一款高性能、高安全、高可靠的企业级开源关系型数据库。

评论

发布
暂无评论
openGauss开源自动化测试框架Yat,增强社区测试能力