• avocado自动化测试框架


    linux/mac下的自动化测试框架avocado简介

    根据我这几年的工作经验来看,avocado绝对算得上顶级的自动化测试引擎了,这么好用的一个工具在国内却并不流行,我认为有几个小原因,一是中文文档少,二是很多公司闷声发大财,华为云大量使用avocado测试框架,可是市面上华为人习惯了低调,很少介绍。

    avocado可以测什么?可以应用到的场景

    1. 虚拟化领域测试
    2. 接口自动化测试

    比如说现在有一个库,是用c语言写的,这个库提供给系统很多接口,我们当然可以用c语言来调用这些接口进行功能性能的测试,但是现在我们有更好的选择了,我们可以用python来调用这些接口了,要知道python和系统打交道的能力是比较简单的,所以python用来写测试脚本非常适合。有一个自动化框架avocado,它不一定是最好的,但确实是一种解决方案。

    1.什么是avocado?
    avocado就是一个开源项目,托管在gitub上,任何人都可以下载源码。

    2.怎么获取avocado源码?
    点击链接avocado-framework
    在本地的gitbash中选择目录git clone
    https://github.com/avocado-framework/avocado.git这样源码就获取了
    3.怎么安装avocado?

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

    4.怎么用avocado?
    python setup.py install

    5.怎么用avocado做测试?

    avocado run test.py [-m test.yaml ]–show-job-log
    其中[]中的内容可是视情况而添加或删减,test.py就是要测试的文件
    6.什么人适用于用avocado?
    (1)linux环境,因为avocado是部署在linux上面的
    (2)python测试语言,因为avocado主要是靠python实现的

    7.python如何测试c的动态函数库?
    此问题看似与avocado无关其实还是有关的
    如何查看linux动态库中包含哪些函数?怎么把python和c的数据类型进行转换?python如何载入动态函数库?
    我是不会告诉你linux下有一个工具叫做readelf的,我也不会告诉你python中有一个库叫做ctypes

    8.avocado支持用例的配置文件yaml
    9.avocado工具自身的配置
    http://avocado-framework.readthedocs.io/en/latest/Configuration.html
    注意和用例配置的区别
    avocado的配置文件基于INI文件,可被python的ConfigParser解读
    例子

    [datadir.paths]
    base_dir = ~/avocado
    test_dir = /$HOME/Code/avocado/examples/tests
    data_dir = /usr/share/avocado/data
    logs_dir = ~/avocado/job-results
    

    配置文件解析顺序,先解析A,在解析B,这样B中的配置就能覆盖A中的配置
    有两处配置文件A/etc/avocado/avocado.conf和 B~/.config/avocado/avocado.conf
    还有另一个配置文件目录/etc/avocado/conf.d,这个目录下面主要包含一些扩展插件的配置
    使用avocado config命令可以让你知道当前被使用的配置文件
    插件的配置文件,为了不干扰主配置文件,插件的配置以如下形式,/etc/avocado/conf.d/[pluginname].conf,而且也可以被用户自身的配置文件所覆盖
    meaning that what you set on your local config file may override what’s defined in the system wide files

    还可以配置pre和post脚本/etc/avocado/scripts/job/pre.d和/etc/avocado/scripts/job/post.d用于测试之前和之后执行

    [plugins.jobscripts]
    pre = /my/custom/directory/for/pre/job/scripts/
    

    10.运行测试三件事
    When running tests, we are frequently looking to:

    Locate tests
    Write logs to a given location
    Grab files that will be useful for tests, such as ISO files or VM disk images
    当跑测试的时候,我们在意:
    定位测试
    保留日志用来定位
    抓取有用的文件,例如输入输出,或者是虚拟机磁盘镜像,等等【其实就是为了保留复现环境】
    11.avocado怎么收集系统信息?
    sysinfo pre执行用例之前
    sysinfo post执行用例之后
    sysinfo profile
    应该是某处调用了这个类class avocado.core.sysinfo.Command,在测试pre,和post时获取到系统信息。

    【具体怎么实现的我还在研究,待续~】
    参考http://avocado-framework.readthedocs.io/en/latest/ReferenceGuide.html?highlight=post

    12.avocado怎么清理执行环境
    当一个测试结束之后,为了不干扰下一个测试,我们要清理环境。
    结合unittest的setUp, tearDown来理解。在tearDown中清理环境。

    13.avocado结果说明
    这个结果有测试的日志,有环境的信息,好处就是详细,坏处就是占空间了。我觉得这里里面job.log和sysinfo很重要,如果想要定位问题的话,这两个基本上就够了。
    avocado一个典型的测试结果的目录结构如下:
    $HOME/avocado/job-results/job-2014-08-13T00.45-4a92bc0/
    ├── id
    ├── jobdata
    │ ├── args
    │ ├── cmdline
    │ ├── config
    │ ├── multiplex
    │ ├── pwd
    │ └── urls
    ├── job.log
    ├── results.json
    ├── results.xml
    ├── sysinfo
    │ ├── post
    │ │ ├── brctl_show
    │ │ ├── cmdline
    │ │ ├── cpuinfo
    │ │ ├── current_clocksource
    │ │ ├── df_-mP
    │ │ ├── dmesg_-c
    │ │ ├── dmidecode
    │ │ ├── fdisk_-l
    │ │ ├── gcc_–version
    │ │ ├── hostname
    │ │ ├── ifconfig_-a
    │ │ ├── interrupts
    │ │ ├── ip_link
    │ │ ├── ld_–version
    │ │ ├── lscpu
    │ │ ├── lspci_-vvnn
    │ │ ├── meminfo
    │ │ ├── modules
    │ │ ├── mount
    │ │ ├── mounts
    │ │ ├── numactl_–hardware_show
    │ │ ├── partitions
    │ │ ├── scaling_governor
    │ │ ├── uname_-a
    │ │ ├── uptime
    │ │ └── version
    │ ├── pre
    │ │ ├── brctl_show
    │ │ ├── cmdline
    │ │ ├── cpuinfo
    │ │ ├── current_clocksource
    │ │ ├── df_-mP
    │ │ ├── dmesg_-c
    │ │ ├── dmidecode
    │ │ ├── fdisk_-l
    │ │ ├── gcc_–version
    │ │ ├── hostname
    │ │ ├── ifconfig_-a
    │ │ ├── interrupts
    │ │ ├── ip_link
    │ │ ├── ld_–version
    │ │ ├── lscpu
    │ │ ├── lspci_-vvnn
    │ │ ├── meminfo
    │ │ ├── modules
    │ │ ├── mount
    │ │ ├── mounts
    │ │ ├── numactl_–hardware_show
    │ │ ├── partitions
    │ │ ├── scaling_governor
    │ │ ├── uname_-a
    │ │ ├── uptime
    │ │ └── version
    │ └── profile
    └── test-results
    └── tests
    ├── sleeptest.py.1
    │ ├── data
    │ ├── debug.log
    │ └── sysinfo
    │ ├── post
    │ └── pre
    ├── sleeptest.py.2
    │ ├── data
    │ ├── debug.log
    │ └── sysinfo
    │ ├── post
    │ └── pre
    └── sleeptest.py.3
    ├── data
    ├── debug.log
    └── sysinfo
    ├── post
    └── pre

    22 directories, 65 files

    14.我如何让用例自动化运行起来?
    比如我可能写了多个用例,放在了不同的文件中,那么avocado怎么让这多个用例运行?
    Running A More Complex Test Job
    运行多个用例

    $ 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
    

    15.如何远端运行?
    avocado提供了一个通过ssh连接远端运行的用例的机制。
    such as:

    avocado run --remote-hostname 192.168.122.30 --remote-username root examples/tests/sleeptest.py examples/tests/failtest.py
    

    avocado配置文件说明

    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目录下保存测试日志,出现问题可以通过查看日志方式进行定位
    在这里插入图片描述

    通过插件生成html格式测试报告

    在这里插入图片描述

    问题

    1.测试用例是怎么执行的?

    在子进程中执行
    proc = multiprocessing.Process(target=self._run_test,args=(test_factory, queue,))
    ...
    proc.start()
                                           
    

    2.测试用例是怎么发现的?
    或者说测试用例是怎么从命令行的文本字符串变成可以执行的实例对象的
    job->suite->test

    loader测试套加载

  • 相关阅读:
    python快捷键的使用【摘抄】
    Jmeter5.1 Plugins Manager配置dummy使用jp@gc
    jmeter正则中常见的转义字符-笔记三
    测试人员问问题的技巧是什么?
    一个简单的python实现百度登录操作
    2.3 Go内置函数
    2.2 Go变量类型
    2.1Go语言特性
    1.2Go环境搭建之Mac
    1.1Go环境搭建之Linux
  • 原文地址:https://www.cnblogs.com/lineuman/p/15970969.html
Copyright © 2020-2023  润新知