1. 程式人生 > >Avocado使用手冊(1) --環境安裝部分 (For Big Cloud Enterprise Linux 7.2)

Avocado使用手冊(1) --環境安裝部分 (For Big Cloud Enterprise Linux 7.2)

1. avocado安裝

  • 可以從Avocado專案RPM儲存庫獲得Enterprise Linux的Avocado軟體包。此外,EPEL倉庫中的一些包是必需的,因此您需要先啟用它。對於EL7,執行以下命令應該這樣做:
    yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
  • 然後,您必須使用Avocado專案RHEL repo(https://avocado-project.org/data/repos/avocado-el.repo)
  • 執行以下命令應該為您提供基本的Avocado安裝準備:
    curl https://avocado-project.org/data/repos/avocado-el.repo -o /etc/yum.repos.d/avocado.repo
  • 執行安裝
    yum install python-avocado
    • 其他可用軟體包(取決於Avocado版本)可能包括:
      python-avocado-examples:包含示例測試和其他示例檔案
      python2-avocado-plugins-output-html:HTML作業報告外掛
      python2-avocado-plugins-resultsdb:將作業結果傳播到Resultsdb
      python2-avocado-plugins-runner-remote:在遠端計算機上執行作業
      python2-avocado-plugins-runner-vm:在基於libvirt的VM上執行作業
      python2-avocado-plugins-runner-docker:在Docker容器上執行作業
      python-avocado-plugins-varianter-yaml-to-mux:將YAML檔案解析為變體
      python2-avocado-plugins-varianter-pict:PICT具有組合功能的varianter
      LTS(長期穩定性)儲存庫也可用於Enterprise Linux。請參閱RFC:長期穩定性以及有關如何切換到avocado-ltsrepo的軟體包管理文件 。
      yum install -y python-avocado-examplesyum install -y python2-avocado-plugins-output-html

2. avocado使用

2.1 簡單測試

[[email protected] ~]# avocado run /bin/true 
JOB ID     : 093d3b5f608142cb230991044fc0bb9d845b32cf
JOB LOG    : /root/avocado/job-results/job-2018-09-21T03.03-093d3b5/job.log
 (1/1) /bin/true: PASS (0.03 s)
RESULTS    : PASS 1 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0 | CANCEL 0
JOB TIME   : 0.63 s

2.2 列表測試

您有兩種方法來發現測試。

  • 1.您可以使用–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
 (1/1) /bin/true: SKIP
RESULTS    : PASS 0 | ERROR 0 | FAIL 0 | SKIP 1 | WARN 0 | INTERRUPT 0
JOB TIME   : 0.10 s
JOB HTML   : /tmp/avocado-dry-runSeWniM/job-2015-10-16T15.46-0000000/html/results.html
  • 2.另一種方法是使用list列出已發現測試的子命令如果沒有提供引數,Avocado會為每個外掛列出“預設”測試。輸出可能如下所示:
$ avocado list
INSTRUMENTED /usr/share/doc/avocado/tests/abort.py
INSTRUMENTED /usr/share/doc/avocado/tests/datadir.py
INSTRUMENTED /usr/share/doc/avocado/tests/doublefail.py
INSTRUMENTED /usr/share/doc/avocado/tests/doublefree.py
INSTRUMENTED /usr/share/doc/avocado/tests/errortest.py
INSTRUMENTED /usr/share/doc/avocado/tests/failtest.py
INSTRUMENTED /usr/share/doc/avocado/tests/fiotest.py
INSTRUMENTED /usr/share/doc/avocado/tests/gdbtest.py
INSTRUMENTED /usr/share/doc/avocado/tests/gendata.py
INSTRUMENTED /usr/share/doc/avocado/tests/linuxbuild.py
INSTRUMENTED /usr/share/doc/avocado/tests/multiplextest.py
INSTRUMENTED /usr/share/doc/avocado/tests/passtest.py
INSTRUMENTED /usr/share/doc/avocado/tests/sleeptenmin.py
INSTRUMENTED /usr/share/doc/avocado/tests/sleeptest.py
INSTRUMENTED /usr/share/doc/avocado/tests/synctest.py
INSTRUMENTED /usr/share/doc/avocado/tests/timeouttest.py
INSTRUMENTED /usr/share/doc/avocado/tests/warntest.py
INSTRUMENTED /usr/share/doc/avocado/tests/whiteboard.py
...

2.3 複雜測試

您可以按任意順序執行任意數量的測試,以及混合和匹配檢測和簡單測試:

$ 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
 (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) /tmp/simple_test.sh.1: PASS (0.02 s)
RESULTS    : PASS 4 | ERROR 0 | FAIL 2 | SKIP 0 | WARN 0 | INTERRUPT 0
JOB TIME   : 5.98 s
JOB HTML  : $HOME/avocado/job-results/job-2014-08-12T15.42-86911e49/html/results.html
  • 在第一次失敗的測試中中斷作業(failfast)
    –failfast on
[[email protected] ~]# avocado run failtest.py sleeptest.py synctest.py failtest.py synctest.py /tmp/simple_test.sh --failfast on
JOB ID     : b30513ac28a6a7978ff3bdd0e5d0630ebfa9dc31
JOB LOG    : /root/avocado/job-results/job-2018-09-21T03.24-b30513a/job.log
(1/6) failtest.py:FailTest.test: FAIL: This test is supposed to fail (0.05 s)
Interrupting job (failfast).
RESULTS    : PASS 0 | ERROR 0 | FAIL 1 | SKIP 5 | WARN 0 | INTERRUPT 0 | CANCEL 0
JOB TIME   : 0.58 s
JOB HTML   : /root/avocado/job-results/job-2018-09-21T03.24-b30513a/results.html
  • 當測試中有BAD指令碼的時候,測試將不能進行,需要新增–ignore-missing-references on 引數忽略缺失BAD指令碼。預設引數為 OFF 。
    –ignore-missing-references on
未新增引數
$ avocado run passtest.py badtest.py
Unable to resolve reference(s) 'badtest.py' with plugins(s) 'file', 'robot', 'external', try running 'avocado list -V badtest.py' to see the details.
新增引數後
$ avocado run passtest.py badtest.py --ignore-missing-references on
Unable to resolve reference(s) 'badtest.py' with plugins(s) 'file', 'robot', 'external', try running 'avocado list -V badtest.py' to see the details.
JOB ID     : 85927c113074b9defd64ea595d6d1c3fdfc1f58f
JOB LOG    : $HOME/avocado/job-results/job-2017-05-17T10.54-85927c1/job.log
 (1/1) passtest.py:PassTest.test: PASS (0.02 s)
RESULTS    : PASS 1 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0 | CANCEL 0
JOB TIME   : 0.11 s
JOB HTML   : $HOME/avocado/job-results/job-2017-05-17T10.54-85927c1/html/results.html

2.4 使用外部執行器執行測試

$ 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
(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
JOB TIME   : 0.11 s
JOB HTML   : /home/<user>/avocado/job-results/job-<date>-<shortid>/html/results.html
$ 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
(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
JOB TIME   : 3.14 s
JOB HTML   : /home/<user>/avocado/job-results/job-<date>-<shortid>/html/results.html

3. 除錯測試

3.1 顯示測試進行過程

在開發新測試時,您經常需要直接檢視作業日誌,而無需切換螢幕或不必“tailf”作業日誌。為此,您可以使用或 選項:

  • avocado --show test run …
    • avocado run --show-job-log …
$ avocado --show test run examples/tests/sleeptest.py
...
Job ID: f9ea1742134e5352dec82335af584d1f151d4b85

START 1-sleeptest.py:SleepTest.test

PARAMS (key=timeout, path=*, default=None) => None
PARAMS (key=sleep_length, path=*, default=1) => 1
Sleeping for 1.00 seconds
PASS 1-sleeptest.py:SleepTest.test

Test results available in $HOME/avocado/job-results/job-2015-06-02T10.45-f9ea174

3.2 中斷測試

  • 中斷可以使用ctrl+c,一次按下後將SIGTERM傳送到主測試的程序並等待它完成。如果這沒有幫助,使用者可以ctrl+c再次按下(在2s寬限期後),這會非常有效地破壞測試過程並安全地完成作業執行,始終提供測試結果。
  • 要暫停測試執行,使用者可以使用ctrl+z哪個傳送SIGSTOP 到從測試的PID繼承的所有程序。我們盡力停止所有程序,但操作不是原子操作,可能無法停止某些新程序。另一個ctrl+z傳送SIGCONT到測試的PID繼承的所有程序恢復執行。請注意,測試執行時間(關於測試超時)仍然在測試程序停止時執行。
  • Avocado功能也可以中斷測試。一個例子是使用GDB 除錯 GDB 除錯功能。