Chromium OS Autotest 客户端测试(Client side test)
概述
背景
Autotest是一个用来测试Linux内核的开源项目。Autotest作为一个分布式系统,通过集成web接口、数据库、服务器和客户机本身
负责管理多个客户机的状态。Autotest查找client/tests和client/site_tests中的所有目录,查找以“control.”开头的简单python文件。
这些文件包含变量列表和对job.run_test()的调用。control文件中的变量告诉文件何时调度测试用例,对run_test()的调用告诉autotest
如何调用测试用例。每个测试用例都是作业(job)的一部分。Autotest创建此作业(job)对象并fork一个子进程去执行其control文件。
测试用例在的你Linux环境下的一个重要的位置,并且映射到被测设备的相似的目录位置:
<cros_checkout>/src/third_party/autotest/files/client/site_tests/
:autotest的客户端测试用例- 对应到被测设备(DUT)上的目录是
/usr/local/autotest/tests
- 对应到被测设备(DUT)上的目录是
先决条件
- chroot环境
- python知识
在客户端运行一个测试用例
当你有了Autotest后你将有两种方法运行测试用例,要么用你的chroot环境作为server要么直接在被测机器上直接运行。直接在被测机器
上运行的速度会更快,但至少需要先从服务器运行一次。
在chroot环境下使用test_that
test_that
是在Chromium OS设备上运行autotest用例的命令,它替换了以前的旧命令run_remote_tests
。
test_that.py usage:
[-h] [-w WEB] [-x MAX_RUNTIME_MINS] [--oldrpc] [--fast]
[--args ARGS] [--results_dir RESULTS_DIR] [--pretend]
[--no-experimental] [--enforce-deps] [--debug]
[--iterations ITERATIONS] [--ssh_verbosity {0,1,2,3}]
[--ssh_options SSH_OPTIONS] [-b BOARD] [-m MODEL]
[-i BUILD] [-p POOL] [--autotest_dir AUTOTEST_DIR]
[--no-quickmerge] [--whitelist-chrome-crashes]
[--ssh_private_key SSH_PRIVATE_KEY]
REMOTE TEST [TEST ...]
使用 test_that(常用用法):
在指定host地址和board板卡信息的机器上运行testName的测试用例:
test_that -b board dut_ip[:port] TEST
-
运行一个名为
audio_Aplay
的测试用例:$ test_that -b ${BOARD} 172.18.92.102 audio_Aplay
-
运行一个套件
suite:audio
,确保套件在/src/third_party/autotest/files/site_utils/attribute_whitelist.txt
文件中$ test_that -b ${BOARD} 172.18.92.102 suite:audio
-
运行名称与正则表达式匹配的所有测试
^login_.*$
$ test_that -b ${board} ${host} e:login_.*
-
运行控制文件filename与正则表达式匹配的所有测试
^.*control.dummy$
$ test_that -b ${board} ${host} f:.*control.dummy
可以使用CTRL-C
向目标机发送一个SIGINT信号,停止自动测试。
在Chromium OS被测机器(DUT)上
在Chromium OS的机器上需要使用autotest,首先需要在chroot环境下以sever运行一次autotest,这将会将autotest的测试用例推
送到Chromium OS的机器上,否则/usr/local/autotest
可能不存在于设备上,之后在Chromium OS的机器上运行如下命令:
$/usr/local/autotest/bin/autotest_client /usr/local/autotest/tests/*testName*/control
以client的形式运行名为testName的autotest用例。
编辑一个测试用例
对于只做了python上的修改,test_that使用autotest_quickmerge
复制你的python修改到sysroot上。因此不需要运行rcp/scp
去将更改推送到你的被测设备上。
最快速的修改方法是直接在客户机上修改测试例程。但如果您发现Chromium OS设备上的文本编辑器用起来不爽,则可以在
本地编辑好该文件,然后使用rcp / scp之类的复制工具将其发送到DUT。方法如下:
-
首先增加修改到一个测试用例的python脚本文件中
-
之后将其复制到被测机器的
/usr/local/autotest/tests
目录下rcp path/to/test_name.p