ceph自动化测试用例编写

1.1  应用需求

由于官方对于teuthology和ceph-qa-suite没有任何的文档介绍。在这篇文档中将介绍ceph-qa-suite中case的测试内容以及如何简单修改增加case。

1.2  相关模块

整个自动化环境需要依赖如下三份python代码,关注最多的就是ceph-qa-suite和ceph/qa。

Teuthology:用来调度case ,选择机器,安装ceph等基础环境以及管理整个测试过程。   

ceph-qa-suite:为集群增加配置,设置拓扑,以及测试case的设计。

ceph/qa/:自动化测试最终调用的shell脚本。

1.3  代码目录

目前搭建了两个可以进行推送测试任务的服务器。如果要登录机器上增加用例或推送任务,希望大家配置172.16.101.* /16的小网网段或者使用自己的16位掩码小网ip。(自动化测试都是100网段,防止与自动化的冲突)

目前搭建了两个teuthology的服务器,172.16.100.7 和172.16.100.4 (同时支持Jewel版本)。不测试B02的话,建议大家使用172.16.100.7的服务器。

ceph-qa-suite yaml文件所在目录:增加yaml文件在 /repo/ceph-qa-suite_基线版本,其中版本为需要测试的基线版本,hammer版本为空,jewel版本就为/repo/ceph-qa-suite_jewel

ceph-qa-suitetask所在目录:增加tasks文件在 teuthworker用户的src/ceph-qa-suite_基线版本下,hammer和master版本为ceph-qa-suite_master, jewel版本为ceph-qa-suite_jewel。

qa目录: /root/ceph/qa 但是测试用的qa是从172.16.100.9上git下来的,在这里修改代码以后需要pushroot@172.16.100.9:/git/ceph.git远端自己搭建的git服务器上,注意push到自己需要测试的分支上。

简单用例编写

2.1  配置yaml文件

Yaml文件类似于对集群的配置,我们可以单独写一个yaml文件,也可以写多个yaml文件组合在一起。在yaml文件中, 我们必须指明如下几点:

(1)roles

该项配置的目的是指明需要搭建的集群的拓扑。Mon数据,osd数据,以及客户端节点。例如:

- [mon.0, osd.0, osd.1, client.0]  //指明搭建一个单节点,一个mon,两个osd,该节点自身作为client0的集群

也可以用另一种方式写:

roles:

- - mon.a

  -osd.0

  -osd.1

  -osd.2

  -client.0

- - osd.3

  -osd.4

  -osd.5                   //两节点的集群,每个节点三个osd。总共一个monitor

 

另外,tasks为给case增加测试内容:

(2)tasks

在该配置下面主要为了增加测试case,我们可以在该下面指明需要执行的任务,一般情况下,首先就是安装ceph ,然后再并行的进行多个测试脚本。

例如:

tasks:

- install:             //安装ceph

- ceph:             //搭建集群以及增加相应配置

   log-whitelist:

    -wrongly marked me down

    -objects unfound and apparently lost

   conf:

     osd:

       osd debug reject backfill probability: .3

       osd max backfills: 1

       osd scrub min interval: 60

       osd scrub max interval: 120

- thrashosds:            //进行对osd的异常操作

   timeout: 1200

   chance_pgnum_grow: 1

chance_pgpnum_fix: 1

 

   

(3)overrides

在overrides下,可以增加高优先级的ceph配置,但overrides部分不是必须要增加。例如:

overrides:

 ceph:

   conf:

     mon:

       debug mon: 20

       debug ms: 1

       debug paxos: 20

       mon warn on legacy crush tunables: false

       mon min osdmap epochs: 3

     osd:

        debug filestore: 20

       debug journal: 20

       debug ms: 1

       debug osd: 20

   log-whitelist:

    -osd_map_cache_size

- slow request

如上的配置中mon ,和osd即为在ceph.conf中对集群的配置。log-whitelist的目的是过滤掉在log中你希望过滤的警告和错误。因为teuthology在测试过程中,如果log中出现了ceph集群的警告或者错误信息,这个测试case就认为失败,然后执行下一个测试case。

2.2  使用方法

见用例篇

2.3  参数介绍

-      install:  //安装ceph

-      ceph:  //给ceph增加配置信息,同时也可以过滤一些警告或error,例如:

-      exec: //在特定某个客户端执行具体命令,可以在exec下写希望执行的命令

-      thrashosd:      // 启动一个线程进行随机down osd,out osd ,revive osd,修改primary_affinity,,reweight_osd,修改pg_num,测试backfill等等

-      mon_thrash: //启动线程进行kill mon,等待quorum,revive mon,等待 quorum ,如此循环…

-      radosbench:   //在节点上运行radosbench增加业务

-      admin_socket: //从指定路径获取脚本进行测试

-      rados: // 启动线程进行所有rados 部分读,写,删除,快照,回滚,拷贝等操作,并且可以指定各项测试的权重。实际运行的是 ceph/src/test/osd/TestRados.cc。也可以指定操作次数和object大小,是否使用纠删码,以及配置纠删码的erasure_code_profile

-      workunit: //获取ceph/qa/workunits 整个目录,并运行指定的shell脚本。大部分脚本最终运行的是ceph/src/test/*.cc测试文件

-      mon_clock_skew_check: //进行时钟不同步测试

上面是最常用的在yaml文件中配置的task接口。当然,我们也可以指定某个具体的函数,例如:

ceph_manager.create_pool:

  args: ['toremove']

 kwargs:

     pg_num: 4096

在yaml文件中配置如上信息即为创建一个名为toremove,pg_num为4096的pool。其他的接口都可以在/ceph_qa_suite/tasks目录下的.py文件中查看。

tasks部分为最重要的配置,在下面介绍一下yaml文件中tasks可以配置的参数。

2.4  配置文件增加

测试过程中经常会需要改变一下ceph.conf中的配置信息。目前有两种方式更改这些配置信息。

1、  在原有的tasks列下修改或增加,例如:

如图,可以在osd下增加osd的配置,当然也可以使用global,mon等增加其他的配置。图中的log-whitelist也是非常重要的。因为teuthology在测试过程中只要ceph的log里出现了error或者warning就会出错导致测试失败,所以我们可以在log-whitelist里增加相应的字段过滤认为不影响测试的error或者warning。

2、  使用overrides增加配置

另外一种方式是使用overrides的配置,给集群增加优先级更高的配置。例如:

个人建议使用这种方式增加配置,因为我们可以自己新建一个yaml文件,在该文件中写入overrides配置选项,测试过程中再把该文件列入yaml文件列表就可以了。这种方式可以在不修改基础测试用例代码的前提下增加配置,非常灵活。

2.5  测试task

在yaml文件里,实际每个tasks下的配置项都对应一个python文件,每个python文件的命名比较与yaml文件下的配置项名相同,才会被调用。对应在tasks目录下已经存在的python文件,可以直接在yaml文件里调用。如果需要新增测试task,可以在tasks目录下增加python文件。例如:

如上就是一个简单的python文件,最基础的就是需要定义一个名为task的函数。执行过程中teuthology代码会来调用。其中的参数config为调用该tasks时写入的参数。而在ctx中可以获取到所有需要的接口,包括获取整个测试case的配置,测试目录,调用创建pool的接口等等。

其中的remote函数调用的是teuthology代码里的接口,作用是远程登录到某一个client上,执行相应的命令。上例中remote远程登录到client上创建一个pool,同时运行radosbench,之后等待进程退出的同时运行下一个tasks。

这里要注意的是不仅仅是以python文件名的tasks接口可以被调用,ceph_manager里提供了另外一种调用方式。

这样,我们可以直接在yaml文件中执行一个具体任务进行测试,比如可以在tasks下使用ceph_manager.kill_osd,ceph_manager_create_pool等。其中也可以改使用args和kwargs指定相应的config。

总之,tasks是ceph-qa-suite里最重要的部分,其中使用最多的就是rados.py,thrash_osd.py,mon_thrash.py等。

-rados: 进行所有读,写,快照,回滚,纠删码,克隆等基本内部单元测试。实际会调用ceph/src/test下面的osd/TestRados.cc。

-thrash_osd:随机对osd进行down,out,reweight,改变pg数,使用ceph-objectstore-tool进行数据导入导出等一系统测试。

-mon_thrash:多次将mon进行down up测试,同时会伴随着其他各种操作。甚至会用到9个等更多个mon进行测试。

2.6  单元测试用例增加

tasks里的workunits配置项是非常有用的,可以直接从自己搭建的git服务器中获取到ceph/qa/下的shell脚本,之后在所选的client上执行对应的shell测试脚本。

如上就是直接在client.0的任务机上运行ceph/qa/workunits/rados/test.sh的测试脚本。shell测试脚本一般分两种类型:

1、  命令行的测试

这种测试相当于是把所有要执行的命令组合在一个shell脚本里,其中当然也会写一些需要用到的函数,之后自动会在某个任务机上直接执行。如果需要增加这部分测试用例,只需要写好自己的shell脚本,将他放到ceph/qa/workunits目录下(这部分代码存放在自动化环境的一个git服务器上,需要提交到该git服务器上),然后在自己的yaml文件中在workunit配置项中指定自己写的shell脚本就Ok了。之后只需要切换到teuthology用户下使用teuthology-suite测试该yaml文件。

2、  对应的代码测试

另外一种测试是在shell脚本里运行某一命令,但该命令最终会调用到ceph/src/test/目录下的某个.cc测试文件。上面的rados/test.sh就是其中的一种。如果需要增加这部分单元测试用例,首先需要写一个测试模块的.cc测试代码,并且在test/Makefile-client.am里同样的增加。之后的步骤就和上面的一样了。

 

2.7  使用限制

1、  teuthology上所有的任务机都是ubuntu14.04.3的版本,所以无法测试到与cas相关的情况

2、  teuthology中做不到网络异常相关的测试例,所有任务机都是一个网卡,而且管理这些任务机是通过ssh远程登录的方式自动管理,如果网络异常就无法测试

3、  无法进行增删主机的测试,因为每个测试case的拓扑状况都是由teuthology代码管理和搭建,并且在测试前就限制住。但是teuthology会分别测试到相同用例,不同副本等不同环境配置的情况

4、  无法进行大业务量,大存储量的测试。因为任务机使用的都是虚拟机,每个虚拟机的硬盘只有60G,一旦数据量大就会把硬盘写满导致测试失败

应用实例

3.1  增加单个用例

现在已有的tasks 任务接口可以实现大多数的测试。所以我们可以调用这些接口,只增加yaml配置文件进行测试。例如:

 

如上我们需要在ceph-qa-suites目录下新建一个自己的目录,例如test(目的是不修改原有的用例)。在test目录下创建一个yaml文件,写入自己的需要的roles,以及测试任务tasks(overrides看自己需要)。以下几点需要特别注意:

(1)       yaml文件的编写格式。roles中每使用一次两个“- -”就代表一个新的任务节点,上例中就代表测试使用两个任务节点,一个mon,每个节点三个osd。其中第一个节点为client.0(后续在tasks中会用到)。

(2)       tasks中必须首先先install和ceph,目的是安装ceph,搭建集群。后续的每一个 “–”都代表一个任务,任务之间都是顺序执行,但是一般会在python代码里让任务之间能达到多线程并行的执行。

(3)       所有的yaml文件里都必须使用空格,不能使用Tab键。否则会导致读取失败

(4)       每个“:”后必须有空格,并且每个需要运行的任务或命令前都必须加“-”。配置文件前不需要增加。

增加完配置以后,就可以切换到teuthology用户下,su  - teuthology,直接运行新加的case

teuthology-suite--filter 'test.yaml' --suite-dir /repo/ceph-qa-suite  --machine-type net --distro ubuntu --ownertest --suite test

3.2  增加组合用例

    ceph-qa-suites上原有的测试用例基本都是组合用例。例如:

看过之前相关teuthology的介绍应该知道目录前面的%的意思。测试该目录下的case时可以直接指定这个目录,不必指定某个yaml文件。可以按照类似于如下目录结构进行创建:

这种方式的好处:

(1)       可以简单设计不同的副本模式测试相同的任务,覆盖创建更广

(2)       设计不同的文件类型进行测试

(3)       改变配置文件进行相同的测试,比较配置文件的影响

(4)       测试不同的case

3.3  增加新任务用例

          如上面2.5所述,在ceph-qa-suites下的tasks目录下增加一个python文件,增加import模块和tasks函数。在tasks函数中写入你希望的整个测试过程以及如何判断测试失败的情况。就好比增加一个2.5上的python文件。然后同样需要在suites目录下创建test目录并且新建一个yaml文件,

      在yaml文件中的tasks项配置新的任务接口就可以使用teuthology-suite命令运行了,运行方式见使用手册(一)。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值