Autotest

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Autotest要点
1. 概要
Autotest是Google、Redhat、IBM公司联合开发的分布式自动化测试框架,兼顾软硬件测试。

Autotest基于Python,目前该项目处于活跃的开发中,代码规模已达10万行。

和Google内部都已部署了基于Autotest的测试架构,其中后者2009年时已包含500余台服务器,用于操作系统内核冒烟测试、服务器硬件验证等。

使用Autotest有两个前提:被测机上需安装Python;测试发起机器与被测机间要建立无密码SSH信任关系。

由于Python极佳的跨平台特性及SSH的通用化,这两个前提都很容易被满足。

2. 架构
3. 组件
Autotest框架中的各组件都相对独立,之间仅有非常松的耦合关系。

3.1.被测机器(Client)
被测机除了安装Python和设置SSH信任关系外无需预装任何测试程序。

3.2.测试服务进程(Autoserv)
每一个测试任务对应一个Autoserv进程,这一进程负责通过SSH在被测机上安装autotest、编译、安装测试脚本,回收测试结果、处理测试结果等工作。

3.3.测试任务管理(Scheduler)
监控用户向前端Mysql数据库中提交的测试任务,并负责测试任务的调度。

Scheduler是Autotest中担负的任务较为杂度的部分,也是分布式部署的关键。

由于每个测试任务对应一个Autoserv进程,因此一台机器上执行很多测试任务时,该机器就很容易成为瓶颈,可引入多台远程的Drone服务器,由Scheduler发起请求,在每台Drone 服务器上执行数量适当的Autoserv进程。

此外,为了在收集测试结果时避免出现I/O瓶颈,还可设置远程服务器(Result Host)统一存储结果,也是由Scheduler负责控制。

3.4.用户交互前端(Frontend)
3.4.1. W eb(AFE)
基于Web的用户交互界面,放于frontend/afe目录下。

采用了GWT(Google Web Toolkit)进行开发,即使用Java编写界面源码,然后编译为可在浏览器运行的Javascript客户端,每次修改界面的Java源码,需重新编译客户端。

AFE是通过JSON-RPC与服务器端交互。

3.4.2. 命令行(CLI)
基于命令行的用户交互界面。

主要为cli/atest命令。

该命令有丰富的参数以完成与AFE类似的功能,具体参考相关文档。

CLI也是通过JSON-RPC与服务器端交互。

3.4.3. 前端Django RPC服务器
主要基于Apache的mod_python及Django RPC Server响应AFE和CLI发出的Json-RPC请求,读写前端Mysql数据库。

3.5.测试结果分析后端(TKO)
测试任务的通过情况都会提交入后端Mysql数据库,通过TKO,可在浏览器中直观分析测试任务执行结果。

新版的Autotest引入新的TKO,集成了GNUPlot及强大Python的绘图库MatPlotLib。

4. 测试任务的组织
4.1.测试用例
测试用例有两大类,客户端单机执行的测试,如iozone、ltp等等,放于client/tests目录下,目前预提供了79个,需服务器负责协调的多机测试,如netperf等,放于server/tests目录下。

每个测试用例为一个子目录,其中会包含:
✧一个control文件:指明测试如何执行
✧测试程序(源码压缩包、可执行程序等等)
✧Python格式的autotest脚本:指明如何在客户端解压、编译、安装测试程序,以什么参
数执行测试程序,收回的测试结果如何进行处理等等,需继承autotest预定义的测试基类。

✧……
添加新的测试用例是很容易的。

此外,借助Python强大的文本处理能力,各种测试程序生成的结果都可以较容易地处理,放于服务器端的results目录下,其中关键的测试性能数据是以键-值对的形式存储在keyvar文件中。

4.2.Profiler
Profiler用于在测试任务执行过程中监控被测机的方方面面。

Autotest已预提供了10个常见的profiler工具,如oprofile、sar等。

添加新的Profiler的方法类似与测试用例。

同时,将已有Profiler关联至测试任务,只需修改任务的control文件。

5. 实用场景示例
由于Autotest组件间的松耦合,可以非常容易的结合实际情况进行部署。

以最小的投入达到预定目标。

5.1.少量机器的测试
可不部署AFE和TKO。

在被测机上安装python,并设置好ssh信任关系后,可直接在测试控制服务器上使用autoserv脚本进行测试。

免去了手工在每台机器上安装执行测试程序,手工收集处理结果的时间。

在用例执行时,autoserv会判定机器状态是否正常,自动采取重启等措施。

5.2.操作系统核心开发per-checkin冒烟测试
部署全套autotest,在若干台机器上部署不同的核心版本,可在每次部署完成时触发测试任务自动执行。

开发和测试人员也可通过浏览器,利用AFE管理测试任务。

测试的结果可以通过浏览器查看,并进行版本间的对比分析。

5.3.大量机器的软硬件综合验证
分布式部署全套autotest,可以同步检测量产出的大量相似的机器,以确定是否每一台都达到了预定的标准,在测试人力有限的情况下,这种方式实际达到了“Test The Untestable”的目的。

6. 添加新的测试
背景知识要求:简单的Python脚本编写方法;正则表达式
Autotest既定规范:
Autotest Test API:
Debug 库:编写过程中排错
Logging:日志系统。

相关文档
最新文档