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

roman · 2021-11-20 17:00:07 · 热度: 27

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

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

总体框架

产品优势

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 3
    int 5
    int 7
}
-- 批量绑定执行
insert into tbl_x values(?, ?, ?);
@batch {
    int 3 int 4 int 0
    int 3 int 4 int 9
    int 3 int 4 int 8
    int 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 = None
    node_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)
    )
    '''

    @classmethod
    def 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)

    @classmethod
    def 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用例,这方面不过多介绍,更多细节可以去官网和搜索网站进行学习

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

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

测试套目录结果如图二所示。执行测试套前配置以下目录:

  • conf目录,节点配置文件
  • except目录,测试用例的期待文件
  • schedule目录,调度文件
  • testcase目录,测试用例文件

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

4. 多测试套调度(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.ys

 

Yat 代码仓 gitee 地址:https://gitee.com/opengauss/Yat ,欢迎大家访问、交流。

猜你喜欢:
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册