11.1.2 QA测试

RD提测新版本后,进入QA测试阶段。QA首先快速执行一次快速测试,如果快速测试失败,则通知RD修复问题后重新提测。否则,进入后续的接口、功能、容灾、压力测试。如果系统设计变化较大,还需要执行专门的兼容性测试。需要注意的是,OceanBase开发模式逐步走向敏捷化,QA往往在正式提测前就已经完成了一部分测试用例的执行。

1.接口、功能、容灾测试

(1)接口测试

使用者通过JDBC/MySQL C客户端库访问OceanBase。由于OceanBase访问协议兼容MySQL协议,因此,直接将MySQL数据库的官方测试工具和部分官方测试用例移植过来测试OceanBase。

(2)功能、容灾测试

OceanBase包含很多功能,例如每日合并、负载均衡、新机器上线、主备同步、主UpdateServer选举等。功能测试会构造场景触发这些功能,并引入各种异常,如阻塞网络、杀死服务器进程、模拟磁盘故障等来验证系统的容灾能力。

OceanBase的接口、功能、容灾用例都实现了自动化和文本化。自动化的好处在于无须人工介入,文本化的好处在于方便添加和维护测试用例,从而适应系统快速开发的需要。下面是UpdateServer其中一个主备切换测试用例:


部署一个OceanBase集群

deploy ob1=OBI(cluster=1211);

deploy ob1.reboot;

sleep 10;

连接到其中一台MergeServer(ms0)

deploy ob1.connect conn1 ms0 admin admin test;

connection conn1;

执行DDL(建表)以及DML语句(insert/update/delete)

create table t1(pk int primary key,c1 varchar);

insert into t1 values(2,'2_abc'),(3,'3_abc'),(4,'4_abc'),(5,'5_abc');

update t1 set c1='5_UPDATE'where pk=5;

delete from t1 where pk=2;

读取表格内容

select*from t1;

获取原有的主UpdateServer的地址并记录为$a

let$a=deploy_get_value(ob1.get_master_ups);

关闭主UpdateServer并等待30秒

deploy ob1.stop_master_ups;

sleep 30;

获取新的主UpdateServer的地址记录为$b

let$b=deploy_get_value(ob1.get_master_ups);

读取表格内容

select*from t1;

比较$a和$b,看二者是否不同

if($a!=$b)

{

—echo success

}

deploy ob1.stop;


执行步骤如下:

1)部署一个OceanBase集群,集群名称为ob1。

2)连接到其中一台MergeServer(ms0)。

3)执行DDL(建表)以及DML语句(insert/update/delete)。create_table语句创建了一个包含两列的表格t1,其中,pk列为主键。DML语句对表格t1执行增、删、改操作。

4)读取表格t1中的内容;获取原有的主UpdateServer的地址并记录为$a。

5)关闭主UpdateServer并等待30秒。正常情况下,OceanBase将自动发生主备切换,主UpdateServer的地址会发生变化,且仍然能够正常读取表格t1中的内容。

6)再次读取表格t1中的内容;获取新的主UpdateServer的地址并记录为$b。

7)比较主备切换前后的主UpdateServer地址,看二者是否不同。

每个测试用例对应一个预期结果文件,OceanBase的测试框架将执行该测试用例并生成一个运行结果文件。如果运行结果文件和预期结果文件完全相同,则测试用例通过;否则,测试用例不通过,测试框架将输出预期结果文件和运行结果文件的差异。

2.压力测试

分布式存储系统中很多问题只有在高并发或者大数据量的情况下才会出现。OceanBase压力测试的原理是持续不断地写入数据,并在这个过程使用大量客户端读取并验证数据。假设线上的数据量为2TB,查询次数为每秒10000次,那么,只要测试环境的数据量为4~10TB(线上数据量的2~5倍),测试环境的读压力为每秒20000~50000次(线上读压力的2~5倍),那么,基本可以认为系统是稳定的。

QA压力测试工具融合了11.1.1节中提到的RD压力测试工具的测试用例,且支持自动持续回归和测试用例文本化,从而降低维护成本。另外,QA压力测试工具还支持容灾操作,例如杀死某个服务器进程,发起主备切换,等等。

3.Benchmark测试

Benchmark测试是具有代表性的SQL语句,例如读写一行数据,读写一批数据但不排序,读写一批数据且排序,计算count/sum/distinct,等值连接,等等。测试团队定期发布Benchmark测试报告,如果发现系统性能相比前一次有明显提升或者下降,需要开发团队说明其中的原因。另外,每个版本正式发布时需要提供一份Benchmark测试报告。

4.兼容性测试

OceanBase开发过程中保证兼容应用以前使用的接口,如果系统做了较大的设计重构,需要执行兼容性测试确保使用过的接口不会出现问题。

另外,OceanBase支持主备两个集群,系统升级时往往先升级备集群,如果没有发现问题,才会升级主集群。升级过程中两个集群会部署不同版本的程序,兼容性测试需要确保这种部署方式能够正常工作,且新版本出现问题时,需要能够回滚到老版本。