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测试套加载

avocado自动化测试框架相关推荐

  1. 软件自动测试框架,软件自动化测试框架的研究和实现

    摘要: 软件自动化测试是软件工程领域的一项重要课题.随着软件工程理论的不断发展,软件自动化测试在理论上也不断达到新的高度.目前最为成熟的软件自动化测试技术是使用自动测试框架来指导自动化测试的实现.迄今 ...

  2. 转:一个简单的基于WEB的QTP自动化测试框架-SAFFRON

    来源: http://www.itestware.com/ctest/index.php?option=com_content&view=article&id=62:webqtp-sa ...

  3. 2021年需要学习Python的自动化测试框架有哪些?你知道吗?

    从某种程度来讲,自动化测试是未来的发展趋势,它可以很好地节省时间成本和人力成本,提高工作效率.那么Python自动化测试框架有哪些?相信很多人都不太了解,我们一起来看看吧. 一.Robot Frame ...

  4. 我在兰亭这三年之AutoDiff自动化测试框架

    不知不觉已经写了8个关于我在兰亭这三年的主题,其实在刚开始起草的时候就已经想好了写哪些内容,预告一下总共有10个主题,这是倒数第二个.我在前面也讲过两则关于自动化的主题,其实之前的实践还远远不止这些, ...

  5. 给接口自动化测试框架增色,实现企业微信测试报告

    作者在新项目中搭建了python+requests+unittest+HTMLTestRunner接口自动化测试框架,通过修改配置文件实现环境隔离,一份脚本即可在不同的环境执行接口测试用例. 但是没有 ...

  6. 自动化测试框架的隐藏小细节,你都知道么

    辅助平台 除了自动化测试框架本身,一些跟持续集成相关的辅助平台也会对自动化测试有很大的帮助.比如CI可以进行交付件部署.测试调度:源代码平台可管理产品和测试脚本的代码:依赖管理器一般是针对某种语言类库 ...

  7. 从理论到工具 - 带你全面了解自动化测试框架

    什么是自动化测试框架 01 什么是框架 框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法.它规定了应用的体系结构,阐明了整个设计.协作构件之间的依赖关系.责任分配和控制流程, ...

  8. 自动化测试系列-自动化测试框架那些事儿

    无论是在自动化测试实践,还是日常交流中,经常听到一个词:框架.很多小伙伴一直对"框架"这个词知其然不知其所以然.今天咱就聊聊自动化框架的那些事儿吧... 一.什么是框架 框架(fr ...

  9. 超硬核,整理的这10个自动化测试框架,使用后简直如有神助

    软件行业正朝着独立.快速和高效的未来发展.为了跟上这个快速发展的生态系统,我们必须加快应用程序的交付时间,但不能以牺牲质量为代价.快速实现质量是必要的,因此质量保证受到了很多关注.为了满足卓越质量和更 ...

最新文章

  1. 在IT技术圈混,怎么能不知道这几个公众号
  2. 破解世界性技术难题! GTS让分布式事务简单高效
  3. C++调用Python函数
  4. vue中created钩子函数与mounted钩子函数的使用区别
  5. [svc]mousedos网络批量部署xp
  6. 无线AP网络覆盖两种组网方式
  7. eclipse字体大小怎么设置
  8. 信息化与计算机基础课课堂融合,高等学校计算机基础课程多元教学系列教材:网页设计与制作...
  9. 日立hgp电梯mcub03主板原理图
  10. sql server 2000 sp3 补丁
  11. 高效学习工作方法PDCA让你变成心中有梦眼里有光的幸运儿
  12. DO-218AB封装,SM8T系列,SM8S系列加强版,汽车级TVS二极管
  13. 智慧水利整体解决方案2022(ppt可编辑)
  14. 43.自动获取汉子笔画
  15. 大数据趣味学习探讨(二):我是怎么坚持学习的
  16. 惠普光影精灵2加装固态硬盘与内存后重装正版win10与office
  17. 计院生活--第一章 卧薪尝胆
  18. 如何做好IT战略规划与IT咨询!
  19. redhat 7.3 ppc64le环境安装Keepalived及遇到问题
  20. 算法与数据结构全阶班-左程云版(二)基础阶段之3.归并排序和快速排序

热门文章

  1. 【AI视野·今日CV 计算机视觉论文速览 第205期】
  2. 【算法学习】图相关算法编程实现-深度优先遍历和广度优先遍历
  3. Properties的使用
  4. java封装 1210 速记
  5. css 背景属性 0302
  6. Mysql Group Replication(MGR)搭建
  7. RT-Thread--线程管理
  8. android防止内存溢出浅析
  9. python之字符编码(二)
  10. 在Eclipse中调试Maven项目