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