Autotest
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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:日志系统。