Autotest是一个开源的自动化测试框架.设计目的是为了测试Linux内核,同样可以用来检查新的硬件,虚拟化测试以及linux平台用户空间程序.它遵循GPL协议,并有大量的开发组织成员,其中包括像谷歌,IBM,红帽等. Avocado,是Autotest开发组,开发的下一代的自动化测试框架.详细信息参考Avocado,后续有时间会再对Avocado进行介绍. 本专题主要介绍以下内容:

* 基本信息
* 客户端介绍
* 服务端介绍
* 前端介绍
* 系统管理
* 调度模块
* 如何开发

本文主要介绍关于Autotest的一些基本信息.主要内容:

* Autotest主要结构

Autotest项目主页:Autotest

Github: Github

Autotest主要结构

下图是Autotest框架简化图:

Web接口和命令行接口

Web接口和命令行接口是相辅相成的方式去连接Autotest并创建job.这两则具有相同的功能,意在方便用户.你可以用这些接口做以下事情:

* 管理jobs,如创建,监控,中止等
* 管理客户端
* 查看测试结果

前端会通过向mysql数据库中创建记录的方式将jobs插入服务端.

服务端

服务端主要包括3个部分:

  • 一个Mysql数据库,该数据库保存了所有的job,客户端(测试物理机),用户,测试项目等信息
  • 调度程序(monitor_db),从数据库中选择jobs 运行.它对数据库的操作,主要是为了启动autoserv进程去调用服务请求.
    • 通常一台测试机一个调度进程
    • 客户机端的jobs是异步的(设置客户端机变为可用)
    • 服务器端的jobs是同步的(它启动前要等待所有客户端机)
  • Autoserv: 服务端通过autoserv程序管理客户端,每个运行的job都会有一个autoserv进程.每个autoserv进程:
    • 控制和监控一个或多个客户端
    • 确认客户端是否工作正常,如果确认失败,会尝试修复.
    • 管理job的执行
    • 在开始测试前,更新客户端的autotest程序.(如新增了测试项)

另外,mysql数据库可用部署在不同的机器上进行调度,虽然有一定的调度负载,但每个可用管理几千个客户端.所以没必要部署在不同机器上.

客户端

启动一个job后,client端做了大部分的工作.它的调用方式有:

手动执行:通过client/autotest-local <control_file_name>命令启动
通过服务端调用

一个典型的工作流程如下:

简要说明

用户创建job(可以通过web端或命令行)或自动事件触发;将job信息记录插入前端数据库;调度器(monitor_db)将job匹配到空闲机器;调度器创建autoserv进程启动job;Autoserv确认客户端或修复;Autoserv在测试机器上安装或更新autotest客户端;Autoserv监控客户端状态,监视问题; 客户机器触发autotest客户端执行测试(已开发测试项目)-运行control文件-log模块记录测试信息-setup-执行测试-测试结果文件由autoserv回收;分析机器新的job;log结果信息处理;

结果目录:按照一定格式结果目录

结果数据库:一个简单的数据库保存每个测试的job信息 测试结果 性能指标等

随着前面的介绍,下图是更容易理解的基本框架图:

简要说明: Autotest通过 Web 前端或者命令行工具提交测试任务, Autotest Server 通过调度器将任务分发到不同的 Client(测试机), Client 端任务执行完之后,再将结果返回到结果分析后端,Web 前端与命令行接口即可查看测试结果 . 主要构成部分:

  • Local:在测试机Client上执行测试的引擎
  • Remote:从Server端推送测试代码到客户测试机,触发测试执行,监控测试状态,并且把测试结果从测试机反馈到服务器。
  • Scheduler:根据用户输入分配测试任务,为每个任务创建服务进程,存储结果到测试数据库
  • Frontends:允许用户运行作业并且方便地使测试结果可视化。

Top^

下一篇Autotest:Autotest-Local>>>

by 李鹏