• Avocado 安装和简单测试


    1.Avocado 安装

    1.1 通过包安装

    Fedora可以通过rpm包进行安装,其他通过RPM管理的发行版需要自己制作相关包。Avocado同样支持DEP包的安装可以在contrib/packages/debian找到。

    Fedora

    首先通过下面的命令获取仓库配置文件。

    sudo curl https://repos-avocadoproject.rhcloud.com/static/avocado-fedora.repo -o /etc/yum.repos.d/avocado.repo
    

    检查是否有了Avocodo和Avocado-lts的仓库配置:

    sudo dnf repolist avocado avocado-lts 
    ...
    repo id      repo name                          status
    avocado      Avocado                            50
    avocado-lts  Avocado LTS (Long Term Stability)  disabled
    

    Avocao了解更多的LTS信息,参考Avocado Long Term Stability

    接下来,可以进行avocado安装啦:

     sudo dnf install avocado
    

    另外还有两个包需要安装:

    • avocado-examples: 包含测试例子和示例文件
    • avocado-plugins-output-html: HTML job 报告的插件

    RHEL7

    如果要运行在红帽商业版或CentOS上,需要进行下面设置:

    # If not already, enable epel (for RHEL7 it's following cmd)
    sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
    # Add avocado repository and install avocado
    sudo curl https://repos-avocadoproject.rhcloud.com/static/avocado-el.repo -o /etc/yum.repos.d/avocado.repo
    sudo yum install avocado
    

    同fedora一样,需要安装以下包:

    • avocado-examples: 包含测试例子和示例文件
    • avocado-plugins-output-html: HTML job 报告的插件

    OpenSUSE

    Avocado同样支持,执行运行以下命令即可:

    sudo zypper install avocado
    

    1.2 源码安装

    首先确保系统有基本的编译环境,如fedora:

    sudo yum install -y git gcc python-devel python-pip libvirt-devel libyaml-devel redhat-rpm-config xz-devel
    

    然后,获取源码:

    git clone git://github.com/avocado-framework/avocado.git
    cd avocado
    sudo make requirements
    sudo python setup.py install
    

    注意,python和pip需要2.7.x版本。如果安装出现问题,需要指明python2.7 和 pip2.7.

    Avocodo可能需要一些插件:

    cd optional_plugins/html
    sudo python setup.py install
    

    安装python依赖工具

    avocado可以通过pip安装。

    pip install avocado-framework
    

    注意:只有基本的avocado基本的test runner安装,导入插件时可能会失败,需要根据不同的系统安装不同的依赖。

    如果想安装全部插件,需要执行以下命令:

    pip install -r https://raw.githubusercontent.com/avocado-framework/avocado/master/requirements.txt
    

    2. Avocado使用

    首先要使用命令行工具test runner,用来运行你的测试和收集测试结果。

    2.1 运行测试

    可以运行avocado加 run子命令,后面跟一个测试,例如:

    $ avocado run /bin/true
    JOB ID    : 381b849a62784228d2fd208d929cc49f310412dc
    JOB LOG   : $HOME/avocado/job-results/job-2014-08-12T15.39-381b849a/job.log
    TESTS     : 1
    (1/1) /bin/true: PASS (0.01 s)
    RESULTS    : PASS 1 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0
    TESTS TIME : 0.01 s
    JOB HTML  : $HOME/avocado/job-results/job-2014-08-12T15.39-381b849a/html/results.html
    

    可以看到,我们把/bin/true作为一个测试运行,并记录了测试过程。这是一个简单的例子,这是支持测试的一种类型。Test Types了解更多的测试类型。

    注意: 尽管可以通过 avocao run (test1 $test3... 运行多个测试,但可以导致崩溃。一个安全的方式为: avocodo run --)argument1 --$argument2 -- $test1 $test2. 后面所有内容都会当做位置参数。

    2.2 列出测试项

    有两种方式覆盖这些测试。可以通过--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
    INSTRUMENTED /usr/share/avocado/tests/fiotest.py
    INSTRUMENTED /usr/share/avocado/tests/gdbtest.py
    INSTRUMENTED /usr/share/avocado/tests/gendata.py
    INSTRUMENTED /usr/share/avocado/tests/linuxbuild.py
    INSTRUMENTED /usr/share/avocado/tests/multiplextest.py 
    INSTRUMENTED /usr/share/avocado/tests/passtest.py
    INSTRUMENTED /usr/share/avocado/tests/sleeptenmin.py
    INSTRUMENTED /usr/share/avocado/tests/sleeptest.py
    INSTRUMENTED /usr/share/avocado/tests/synctest.py
    INSTRUMENTED /usr/share/avocado/tests/timeouttest.py
    INSTRUMENTED /usr/share/avocado/tests/trinity.py
    INSTRUMENTED /usr/share/avocado/tests/warntest.py 
    INSTRUMENTED /usr/share/avocado/tests/whiteboard.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
    Type       file
    NOT_A_TEST examples/gdb-prerun-scripts/README
    NOT_A_TEST examples/gdb-prerun-scripts/pass-sigusr1
    
    SIMPLE: 0
    INSTRUMENTED: 0
    MISSING: 0
    NOT_A_TEST: 2
    

    3.编写一个简单的测试

    下面是一个simple测试的简单示例:

    $ echo '#!/bin/bash' > /tmp/simple_test.sh
    $ echo 'exit 0 ' >> /tmp/simple_test.sh
    $ chmod +x /tmp/simple_test.sh
    

    注意,我们给这个文件增加了执行权限,它会被avocado当做一个simple test.

    4.运行一个较复杂的测试

    可以以任意顺序执行任意数量的测试,而且可以混合不同类型的测试:

    $ avocado run failtest.py sleeptest.py synctest.py failtest.py synctest.py /tmp/simple_test.sh
    JOB ID    : 86911e49b5f2c36caeea41307cee4fecdcdfa121
    JOB LOG   : $HOME/avocado/job-results/job-2014-08-12T15.42-86911e49/job.log
    TESTS     : 6
     (1/6) failtest.py:FailTest.test: FAIL (0.00 s)
     (2/6) sleeptest.py:SleepTest.test: PASS (1.00 s)
     (3/6) synctest.py:SyncTest.test: PASS (2.43 s)
     (4/6) failtest.py:FailTest.test: FAIL (0.00 s)
     (5/6) synctest.py:SyncTest.test: PASS (2.44 s)
     (6/6) /bin/true: PASS (0.00 s)
     (6/6) /tmp/simple_test.sh.1: PASS (0.02 s)
    RESULTS    : PASS 2 | ERROR 2 | FAIL 2 | SKIP 0 | WARN 0 | INTERRUPT 0
    TESTS TIME : 5.88 s
    JOB HTML  : $HOME/avocado/job-results/job-2014-08-12T15.42-86911e49/html/results.html
    

    5.出现fail后中断测试

    Avocado run命令包含 --failfast on 参数,当出现错误是会退出测试:

    $ avocado run --failfast on /bin/true /bin/false /bin/true /bin/true
    JOB ID     : eaf51b8c7d6be966bdf5562c9611b1ec2db3f68a
    JOB LOG    : $HOME/avocado/job-results/job-2016-07-19T09.43-eaf51b8/job.log
    TESTS      : 4
     (1/4) /bin/true: PASS (0.01 s)
     (2/4) /bin/false: FAIL (0.01 s)
     Interrupting job (failfast).
     RESULTS    : PASS 1 | ERROR 0 | FAIL 1 | SKIP 2 | WARN 0 | INTERRUPT 0
     TESTS TIME : 0.02 s
     JOB HTML   : /home/apahim/avocado/job-results/job-2016-07-19T09.43-eaf51b8/html/results.html
    

    6.通过外部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
    JOB ID     : 4a2a1d259690cc7b226e33facdde4f628ab30741
    JOB LOG    : /home/<user>/avocado/job-results/job-<date>-<shortid>/job.log
    TESTS      : 2
     (1/2) /tmp/pass: PASS (0.01 s)
     (2/2) /tmp/fail: FAIL (0.01 s)
    RESULTS    : PASS 1 | ERROR 0 | FAIL 1 | SKIP 0 | WARN 0 | INTERRUPT 0
    TESTS TIME : 0.01 s
    JOB HTML   : /home/<user>/avocado/job-results/job-<date>-<shortid>/html/results.html
    

    这个例子很明显,可以通过给/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/
    JOB ID     : 56016a1ffffaba02492fdbd5662ac0b958f51e11
    JOB LOG    : /home/<user>/avocado/job-results/job-<date>-<shortid>/job.log
    TESTS      : 2
    (1/2) http://local-avocado-server:9405/jobs/: PASS (0.02 s)
    (2/2) http://remote-avocado-server:9405/jobs/: FAIL (3.02 s)
    RESULTS    : PASS 1 | ERROR 0 | FAIL 1 | SKIP 0 | WARN 0 | INTERRUPT 0
    TESTS TIME : 3.04 s
    JOB HTML   : /home/<user>/avocado/job-results/job-<date>-<shortid>/html/results.html
    

    这个例子是把”/bin/curl“当做"external test runner".

    7. 测试调试

    开发一个新的测试时,经常做的就是查看一个测试job的运行日志。 为了实现这个目的, 可以通过 avocado --show test run ... 或 avocado run --show-job-log ...

    例如:

    $avocado --show test run examples/tests/sleeptest.py
    ...
    Job ID: f9ea1742134e5352dec82335af584d1f151d4b85
    
    START 1-sleeptest.py:SleepTest.test
    
    PARAMS (key=timeout, path=*, default=None) => None
    PARAMS (key=sleep_length, path=*, default=1) => 1
    Sleeping for 1.00 seconds
    PASS 1-sleeptest.py:SleepTest.test
    
    Test results available in $HOME/avocado/job-results/job-2015-06-02T10.45-f9ea174
    
    UI输出被抑制,只显示作业日志,这使得它成为测试开发和调试的有用功能。
    
    
    详细的文档访问:https://avocado-framework.readthedocs.io/en/latest/WritingTests.html
  • 相关阅读:
    arm-linux-gcc-4.5.1的安装…
    OK6410之tftp下载内核,nfs…
    非常详细的ok6410的linux系统移植…
    2009-2010网络最热的&nbsp;嵌入式…
    Vue-基础(二)
    【SpringBoot】Springboot1.5.9整合WebSocket
    Hadoop本地环境安装
    Vue-基础(一)
    【Jwt】JSON Web Token
    【JDK8】Java8 新增BASE64加解密API
  • 原文地址:https://www.cnblogs.com/weikunzz/p/6857974.html
Copyright © 2020-2023  润新知