---
title: openGauss开源自动化测试框架Yat，增强社区测试能力-官方技术文章-鲲鹏社区
description: 本文主要介绍openGauss开源自动化测试框架Yat的优势，以增强社区测试能力。
keywords: Gauss,Yat,开源自动化测,试框架,增强社区测试能力,官方技术文章,鲲鹏社区,初始化连接对象
url: https://www.hikunpeng.com/developer/techArticles/20230913-11?envFlag=1
section: (其他)
---

# openGauss开源自动化测试框架Yat，增强社区测试能力-官方技术文章-鲲鹏社区

URL: https://www.hikunpeng.com/developer/techArticles/20230913-11?envFlag=1
描述: 本文主要介绍openGauss开源自动化测试框架Yat的优势，以增强社区测试能力。
关键词: Gauss,Yat,开源自动化测,试框架,增强社区测试能力,官方技术文章,鲲鹏社区,初始化连接对象

官方技术文章 [了解详情](https://www.hikunpeng.com/zh/developer/techArticles)

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

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

实战经验

发表于 2021/11/19

0

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控制、并发执行等，例如：

1）用新的用户重新链接数据库

```
@conn user/passwd@127.0.0.1:9090; 
```

2）执行sql

```
drop table if exists tbl_x;

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);
```

3）绑定执行

```
insert into tbl_x values(?, ?, ?);
@bind {
int 3
int 5
int 7
}
```

4）批量绑定执行

```
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
}
```

5）执行shell命令

```
@sh zctl.py -t stop;
@sh zctl.py -t start;
```

6）定义多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;
}
```

7）执行多session中的sql

```
@steps s1.0 s2.0 s1.1 s1.2 s2.2 s2.1;
```

8）循环执行

```
@for (count: 10)
{
insert into abc values(1,1,3,4);
}
```

9）并发执行

```
@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执行测试套，可添加不同的参数设置是否打印报告以及报告的格式。测试套目录结果如图二所示。执行测试套前配置以下目录：

1）conf目录，节点配置文件

2）except目录，测试用例的期待文件

3）schedule目录，调度文件

4）testcase目录，测试用例文件

图2 测试套目录结构

（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://gitcode.com/opengauss/Yat [了解详情](https://gitcode.com/opengauss/Yat)

欢迎大家访问，交流。

欢迎访问openGauss官方网站

openGauss开源社区官方网站：

https://opengauss.org/ [了解详情](https://opengauss.org)

openGauss组织仓库：

https://gitcode.com/opengauss [了解详情](https://gitcode.com/opengauss)

openGauss镜像仓库：

https://github.com/opengauss-mirror [了解详情](https://github.com/opengauss-mirror)
