Avocado自动化测试框架的安装和使用
关于安装
源码安装
-
获取源码(Git)
git clone git://github.com/avocado-framework/avocado.git
-
源码下载需要Python2.7.x,下载Python2.7.x安装包。
-
将源码和Python2.7.x安装包上传到服务器(通过Xftp)
-
Python2.7.x安装过程:
-
解压安装包:
tar xvf Python-2.7.9.tgz
-
配置并且要指定安装的路径:
cd Python-2.7.9 ./configure --prefix=/usr/local/python2.7#这里prefix的含义是,安装之后的python路径放在/usr/local/python2.7目录里。
-
编译和安装:
make & make install
-
创建链接
-
-
安装Avocado:
cd avocado sudo make requirements sudo python2.7 setup.py install 可能出现报错信息:Traceback (most recent call last): File "setup.py", line 20, in <module>from setuptools import setup, find_packages ImportError: No module named setuptools 解决办法:https://blog.csdn.net/newjueqi/article/details/47446965?locationNum=9&fps=1
从PYPI安装
最简单的安装方法是通过pip。在大多数具有Python 3.4(或更高版本)并pip可用的POSIX系统上,可以使用单个命令执行安装:
$ pip3 install --user avocado-framework
这将从PyPI存储库中获取Avocado软件包(以及可能的某些依赖项),并将尝试将其安装在用户的主目录中(通常位于~/.local)。
如果要执行系统范围的安装,请放下–user 开关。
过程可能报错pip版本需要升级,pip3 install --upgrade pip升级后再进行下载应该就ok了。
注:同上安装所需Python对应版本。
安装包安装
进入Python官网下载所需的avocado版本(我下载的是V74.0)
下载后进行解压安装
使用
运行avocado打印可接的参数
{assets,config,diff,distro,exec-path,list,multiplex,nlist,nrun,plugins,run,runnable-run,runnable-run-recipe,sysinfo,task-run,task-run-recipe,variants,vmimage}
run
avocado run /bin/true 运行测试
list
avocado list /bin 后面接目标目录的路径
diff
avocado diff jobId1 jobId2 后接两个job的id
config
avocado config 显示avocado配制键
distro
avocado distro 显示检测到的Linux发行版
exec-path
avocado exec-path 返回avocado bash库的路径并退出。
multiplex
avocado multiplex命令被avocado variants命令所取代。
分析和可视化测试变量和参数的工具
plugins
avocado plugins 显示插件信息
sysinfo
avocado sysinfo 收集系统信息
运行测试
简单运行
可以运行avocado加 run子命令,后面跟一个测试 。 把/bin/true作为一个测试运行,并记录了测试过程。
$ avocado run /bin/true
注意: 尽管可以通过 avocao run (test1 KaTeX parse error: Can't use function '\)' in math mode at position 53: … avocodo run --\̲)̲argument1 --argument2 – $test1 $test2. 后面所有内容都会当做位置参数。
远端运行
avocado提供了一个通过ssh连接远端运行的用例的机制。
avocado run --remote-hostname 192.168.122.30 --remote-username root examples/tests/sleeptest.py examples/tests/failtest.py
运行较复杂的测试
可以以任意顺序执行任意数量的测试,而且可以混合不同类型的测试:
$ avocado run failtest.py sleeptest.py synctest.py failtest.py synctest.py /tmp/simple_test.sh
出现fail后中断测试
Avocado run命令包含 --failfast on 参数,当出现错误是会退出测试
$ avocado run --failfast on /bin/true /bin/false /bin/true /bin/true
通过外部Runner 运行测试
大部软件都存在自己的测试集。通常包括一个定制的runner,它可以找到并运行自己的测试。
Avocado能支持运行这些测试,而且可以支持生成不同格式的结果,收集系统信息以及这些测试(Avocado的sysinfo功能)等等。
$avocado run --external -runner=/path/to/external_runner foo bar baz
这个例子,avocado会产生foo bar baz的测试结果。实际结果将来源于执行 /path/to/external_runner foo /path/to/external_runner bar和/path/to/external_runner baz
另一种方式展示这一特性,就是思考“外部runner"可以是解释器和可以解释执行任何测试。UNIXshell,/bin/sh就可以被当做外部执行引擎,而且shell脚本就可以当成它的测试:
$ echo "exit 0" > /tmp/pass
$ echo "exit 1" > /tmp/fail
$ avocado run --external-runner=/bin/sh /tmp/pass /tmp/fail
这个例子很明显,可以通过给/tmp/pass和/tmp/fail ,shell“shebangs”(#!/ bin / sh)来实现,使它们可执行(chmod + x / tmp / pass / tmp / ,并将其作为“简单”测试运行。
$ avocado run --external-runner=/bin/curl http://local-avocado-server:9405/jobs/ \
http://remote-avocado-server:9405/jobs/
这个例子是把”/bin/curl“当做"external test runner"
列出测试项
有两种方式覆盖这些测试。
-
可以通过–dry-run 参数模拟:
avocado run /bin/true --dry-run JOB ID : 0000000000000000000000000000000000000000 JOB LOG : /tmp/avocado-dry-runSeWniM/job-2015-10-16T15.46-0000000/job.log TESTS : 1 (1/1) /bin/true: SKIP RESULTS : PASS 0 | ERROR 0 | FAIL 0 | SKIP 1 | WARN 0 | INTERRUPT 0 TESTS TIME : 0.00 s JOB HTML : /tmp/avocado-dry-runSeWniM/job-2015-10-16T15.46-0000000/html/results.html
-
使用list参数列出支持的测试参数。
$ avocado list INSTRUMENTED /usr/share/avocado/tests/abort.py INSTRUMENTED /usr/share/avocado/tests/datadir.py INSTRUMENTED /usr/share/avocado/tests/doublefail.py INSTRUMENTED /usr/share/avocado/tests/doublefree.py INSTRUMENTED /usr/share/avocado/tests/errortest.py INSTRUMENTED /usr/share/avocado/tests/failtest.py ... 这些测试文件被Avocodo视为包含在INSTRUMENTED测试。
可以只列出可执行shell脚本:
$ avocado list | grep ^SIMPLE SIMPLE /usr/share/avocado/tests/env_variables.sh SIMPLE /usr/share/avocado/tests/output_check.sh SIMPLE /usr/share/avocado/tests/simplewarning.sh SIMPLE /usr/share/avocado/tests/failtest.sh SIMPLE /usr/share/avocado/tests/passtest.sh
SIMPLE表示这些文件是一些简单的可执行的测试。 可以通过**–verbose 或 -V,列出avocado**中不是测试的文件。
$ avocado list examples/gdb-prerun-scripts/ -V
编写测试
simple测试的简单实例
$ echo '#!/bin/bash' > /tmp/simple_test.sh
$ echo 'exit 0 ' >> /tmp/simple_test.sh
$ chmod +x /tmp/simple_test.sh
注意,我们给这个文件增加了执行权限,它会被avocado当做一个simple test.
配置文件说明
avocado config查看.config/avocado/avocado.conf
jobs tests概念说明
avocado run test.py这个运行相当于产生一个job,可以理解为一组测试套 。
avocado可以实现的功能说明
-
批量执行测试用例
命令行执行意味着可以很方便的和jenkins等CI工具进行结合
-
每个测试用例在单独的进程中执行
avocado测试框架中,每个测试会在独立的进程中执行,测试执行进程是runner进程的子进程
至于子进程和父进程的关系,就要看具体在什么操作系统上了 -
信号处理
发送到avocado主进程的信号会按照如下方式处理
Ctrl+Z 会让执行用例的子进程暂停
Ctrl+C 会让正在执行的子进程中止 -
保存测试日志方便定位
avocado会在job-result目录下保存测试日志,出现问题可以通过查看日志方式进行定位
/User/lichsh/avocado/job-results/latest/的索引
-
通过插件生成html格式测试报告
测试调试
当开发一个新的测试时,经常做的就是查看一个测试job的运行日志。 为了实现这个目的, 可以通过 avocado --show test run … 或 avocado run --show-job-log …
$avocado --show test run examples/tests/sleeptest.py