测试模块开发

测试模块必需是独立的单元,包含测试需要的所有内容(除了调用测试框架的)

测试模块需要:

  • 可以跨多硬件架构
  • 可以支持不同的发行版
  • 至少一个维护者
  • 提供一个默认的简单例子
  • 对自己目录外的东西不做修改

添加测试项

增加一个测试项,可能是最容易的开发工作了.

每一个测试项都有一个自己的子目录(client 端的是client/tests,server端的是server/tests),一个标准的目录包括 一个control 文件(tests/mytest/control) 一个测试包装脚本(tests/mytest/mytest.py) * 如果不仅仅是python脚本中实现的,还需要补充测试源码

可以查看已有的测试,比如tests/dbench.首先包括测试目录tests/dbench,测试控制脚本dbench.py, 包括其中命名为dbench的类.这些这新开发的测试中 也必须要有.

control文件至少是:

job.run_test('dbench')

这个例子只包含了基本的参数,通过这个去了解一些新测试项的基本的设置,随后可以自己扩展其他的东西.

目录下同样有个测试工具源码包dbench-3.04.tar.gz,随后会解压源码在src/ 大多要执行的测试都包括在python脚本.可以看一下dbench.py.你会看到继承至test类,并且定义版本.你可以看到4个功能: initialize() -这个是每个测试前执行的,而且每次都要执行. setup()- 这个会在第一次测试时执行,并且会进行源码的编译 run_once()- 可以调用job.run_test N 次,其中N是通过run_test的iterations参数指定的.它同时也会启动分析器,如果你已经使能了一些分析器 postprocess_iteration() -此处理由测试迭代产生的任何结果,并写出来变成KEYVAL。 它一般不要求的分析迭代.

测试结果输出一个PASS,你可以抛出一个异常,当一个测试失败,警告,或error.绝大数出错时,python都会抛出一个异常.所以不必担心这个,你可以处理之外的一些事情.下面说一下这些funtions的细节. setup 一次测试需要执行一次的setup.除非版本变动,不然只允许一次.在本文的例子中,解压dbench-3.04.tar.gz至src/,并且进行编译.

#http://samba.org/ftp/tridge/dbench/dbench-3.04.tar.gz
def setup(self, tarball='dbench-3.04.tar.gz'):
    tarball = utils.unmap_url(self.bindir, tarball, self.tmpdir)

注释告诉我们测试程序源码的下载地址.函数开头定义了源码包的名字(你可以通过不同control文件采用不同源码版本)最后,采用unmap_url(重写的url),它会下载源码,并返回localpath.

utils.extract_taball_to_dir(tarball, self.srcdir)
os.chdir(self.srcdir)
utils.system('./configure')
utils.system('make')

解压源码到指定目录self.srcdir.然后切换目录src.然后运行./configure; make 去建立测试环境; 我们使用了本地的system(),而不是os.system

如果返回值不是0,会自动抛出一个异常. 除了编译源码包外,你可以通过software_manager模块去进行系统依赖包的安装. 如何使用?

from autotest.client.shared import software_manager
backend=software_manager.SoftwareManager()
backend.install('package_name')

run_once 它是实际执行测试的.核心只是:

self.results.append(utils.system_output(cmd))

运行dbench,输出到self.results。 需要记录测试记录,以便以后进行结果处理.

postprocess_iteration 对于性能基准,我们希望产生一个键值文件key=value ,来描述运行的情况.key只是一个字符,值是整点或浮点值.比如dbench 只有两个参数,"throughout","nprocs".这个函数,每次iteration调用一次.最后会出现一个文件结果:

throughout = 217
nprocs = 4
throughout =220
nprocs = 4

其他方法

这些方法没有用在dbench,但是可以进行添加 warmup 在正式性能测试前,可以进行一次验证测试,确保结果有效;可以在设置之后,进行调用job.run_test来执行一次测试. cleanup 测试后的清理工作

execute 通过调用warmup, run_once,postprocess用于测试.提供的基本的test类已实现了支持使能分析器和并行运行.如果需要支持自定义行为,就需要重写.

添加自己的测试

只需创建测试下一个新的子目录,并添加自己的控制文件,源代码和包装。 比较简单的做法是,复制dbench.py ​​为mytest.py ,然后对它进行编辑.

Top^

上一篇Autotest:Autotest-Control file specification>>> 下一篇Autotest:Using and developing job profilers>>>

by 李鹏