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.pswp.cn/news/370805.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370805.shtml
英文地址,請注明出處:http://en.pswp.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…