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-sigusr1SIMPLE: 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 0TESTS TIME : 0.02 sJOB 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: f9ea1742134e5352dec82335af584d1f151d4b85START 1-sleeptest.py:SleepTest.testPARAMS (key=timeout, path=*, default=None) => None
PARAMS (key=sleep_length, path=*, default=1) => 1
Sleeping for 1.00 seconds
PASS 1-sleeptest.py:SleepTest.testTest results available in $HOME/avocado/job-results/job-2015-06-02T10.45-f9ea174UI输出被抑制,只显示作业日志,这使得它成为测试开发和调试的有用功能。

详细的文档访问:https://avocado-framework.readthedocs.io/en/latest/WritingTests.html

转载于:https://www.cnblogs.com/weikunzz/p/6857974.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370805.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html文档主体的根标签,2 HTML简介标签嵌套和并列关系文档声明

HTML&#xff1a;Hyper Text Markup Language 超文本标签语言(hyper&#xff1a;精力旺盛的 markup:标记 n noun)HTML不是编程语言&#xff0c;而是一种标记语言(就是一套标记标签)&#xff0c;用于描述网页&#xff0c;是网页制作必备的。超文本是指页面内可以包含图片、链接…

深入克隆

在继续克隆概念之前&#xff0c;让我们用对象创建概念刷新基础知识。 使用new运算符创建对象时&#xff0c;对象将在堆中获取内存分配。 堆中的对象创建 在Java中&#xff0c;理想情况下仅通过引用变量修改对象&#xff0c;即仅复制对象的内存地址&#xff0c;因此原始对象中…

c# 口口乱码_c# 乱码解决方法

1 设置web.configrequestEncoding"utf-8"responseEncoding"utf-8"fileEncoding"utf-8"/>如果相应使用gb2312 &#xff0c;则html页面也要设置相同&#xff0c;解决乱码。如果为 utf-8 &#xff0c;则相应的html文件的属性要转换成utf-8保存&a…

《你的灯亮着吗?》个人总结

我要如何去解决问题 搞清楚问题是什么 问题就是我们的体验和期待的所产生的差异 * 问题的本质 * 问题的定义 * 问题的产生 * 问题的表述谁需要解决问题要多维的看待问题问题来自哪里问题的解决方法在特定的层面上去解决问题问题的解决是要交给能解决问题的人--谁能解决问题别轻…

html文档的文件头的主要作用是什么,文件头

本词条缺少概述图&#xff0c;补充相关内容使词条更完整&#xff0c;还能快速升级&#xff0c;赶紧来编辑吧&#xff01;文件头是位于文件开头的一段承担一定任务的数据&#xff0c;一般都在开头的部分。中文名文件头位 置位于文件开头任 务承担一定任务的数据类 别文…

索引和未索引执行计划的比较_详解Oracle复合索引+实例说明

复合索引复合索引顾名思义&#xff0c;区别于单列索引&#xff0c;是由两个或多个列一起构成的索引。其在B树上的数据结构是什么样&#xff1f;如下图&#xff0c;是一个包含两列的复合索引。如果你观察仔细&#xff0c;还会发现它的叶子节点是ASC递增排序的。现根据第一个值排…

Datables使用总结

本文共四部分&#xff1a;官网 | 基本使用|遇到的问题|属性表 一&#xff1a;官方网站&#xff1a;[http://www.datatables.net/] 二&#xff1a;基本使用&#xff1a;[http://www.guoxk.com/node/jquery-datatables] 1、DataTables的默认配置 $(document).ready(function() { …

python面向窗体的开发_Python高级进阶#019 pyqt5菜单menu应用,新建多窗体

知识回顾&#xff1a;1.掌握的是QCalendarWidget日历控件2.click点击事件(信号)触发3.掌握日期的格式化QDate本节知识视频教程以下开始文字讲解&#xff1a;一、案例&#xff1a;菜单1.新建第一个窗体2.一级菜单的配置3.二级菜单的配置4.利用菜单功能实现界面跳转&#xff0c;实…

用方面清理代码

在我以前的文章中&#xff0c;我描述了字母转换&#xff0c;并且提到了我们使用AspectJ解决了该任务&#xff0c;但是我没有提及AspectJ的工作原理以及一般性的方面。 因此&#xff0c;在接下来的几行中&#xff0c;我将解释&#xff1a; 什么是面向方面的编程&#xff0c;为什…

java前三章总结

Java前三章总结 第一章&#xff1a;1.Java都有什么东西&#xff1f; Jdk&#xff08;java开发工具包&#xff09;包括 Jre&#xff08;Java运行环境&#xff09;---------->jvm&#xff08;Java虚拟机&#xff09; 应用&#xff08;javac&#xff09; Java API和一些常用的j…

原型 - 实现自己的jQuery

每个第一次使用jq的开发者都感到惊叹,jq的$太神奇了,究竟是怎么做到的使用$控制dom 赞叹前人之余,探究其本源才是前端开发者应该做的事,社区常常说,不要重复造轮子, 可是啊,连轮子都造不出来,又怎么去了解在什么环境下用什么轮子,怎么样才可以造成更加优秀的轮子, 不同阶段对…

html 用svg缩放拉伸,html – 拉伸SVG以适应其父级的100%高度和宽度

如果您对另一种选择开放,您可以使用纯CSS创建形状.它不会像SVG那样整洁,但它会响应&#xff1a;* {box-sizing:border-box;}.box {margin:40px;padding:0 10px;max-width:200px;display:inline-block;vertical-align:top;border-right:2px solid green;border-left:2px solid g…

server.transfer 无法跳转页面_H5 腾讯地图无法导航

uni-app 打包H5腾讯地图无法导航前言&#xff1a;最近几天用uni-app开发安卓和iOS应用&#xff0c;打包成APP安装包后&#xff0c;APP内做地图导航没有问题&#xff0c;APP内使用的是高德地图&#xff1b;但是打包成为H5页面后&#xff0c;运行在微信内置浏览器或者运行在第三方…

打破PermGen神话

在我的最新文章中&#xff0c;我解释了可能导致java.lang.OutOfMemoryError&#xff1a;PermGen空间崩溃的原因 。 现在该讨论该问题的可能解决方案了。 或者&#xff0c;更确切地说&#xff0c;是关于互联网对可能解决方案的建议。 不幸的是&#xff0c;我只能说&#xff0c;我…

Linux获取当前年月日后缀精确到微秒,例如2017-05-06T23:57:07.713171

代码如下&#xff1a;详细见注释 #include <stdio.h> #include <string.h> #include <time.h> #include <sys/time.h>int main() {struct timeval start;struct tm *local_time NULL;static char str_time[100];char ms[16];gettimeofday( &start…

PhiloGL学习(5)——神说要有光,便有了光

前言 上一篇文章中介绍了如何创建三维对象及加载皮肤&#xff0c;本文为大家介绍如何为场景添加光源。 一、 原理分析 光在任何地方都是非常重要的&#xff0c;无论在哪里都说是要发光发热&#xff0c;光和热也是分不开的。光线分为点光源和线光源&#xff0c;所谓点光源和线光…

android 弹出弹框2秒消失_基于HTML5 Canvas 实现弹出框

前言用户鼠标移入时&#xff0c;有弹出框出现&#xff0c;这样的需求很常见。这在处理 HTML 元素实现时简单&#xff0c;但是如果是对 HTML5 Canvas 构成的图形进行处理&#xff0c;这种方法不再适用&#xff0c;因为 Canvas 使用的是另外一套机制&#xff0c;无论在 Canvas 上…

【CSS】小妙招,各种问题总结方法处理

1.实现div文字溢出自动省略号截取 overflow:hidden; /*超过部分不显示*/       text-overflow:ellipsis; /*超过部分用点点表示*/       white-space:nowrap;/*不换行*/ 2.规定行数的截取效果 text-overflow: ellipsis; /*有些示例里需要定义该属性&#xff0c…

Java2Days 2012:Java EE

Java2Days会议是东欧的主要活动&#xff0c;目的是介绍Java开发的最新趋势。 今年&#xff0c;该活动于10月25日至26日在保加利亚的索非亚举行。 我在那里&#xff0c;并有机会与一些SAP的同事一起品尝了一些最新的Java&#xff0c;云和移动内容&#xff0c;这些内容已直接发送…

html5布局总结,HTML5网页布局的总结

可以通过 和 将 html 元素组合起来。html 块元素大多数 html 元素被定义为块级元素或内联元素。编者注&#xff1a;“块级元素”译为 block level element&#xff0c;“内联元素”译为 inline element。块级元素在显示时&#xff0c;通常会以新行来开始(和结束)。例子&#x…