layout |
---|
default |
The fastest way of running avocado
is from the command line to run a test. This test can be a binary or script:
$ avocado run examples/tests/sleeptest.py
JOB ID : 5edc01147e75c0f120263ddf17915e130d8bb7e9
JOB LOG : /home/user/avocado/job-results/job-2021-09-27T14.46-5edc011/job.log
(1/1) examples/tests/sleeptest.py:SleepTest.test: STARTED
(1/1) examples/tests/sleeptest.py:SleepTest.test: PASS (1.01 s)
RESULTS : PASS 1 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0 | CANCEL 0
JOB TIME : 3.77 s
To write basic Avocado tests in Python, the test class should inherit from the avocado.Test. This kind of test is also known as an instrumented test in Avocado.
Following is a basic Avocado test written in Python. Copy and paste it to a file named basic.py
from avocado import Test
class BasicTests(Test):
def test_file_name_pass(self):
expected_file_name = 'basic'
file_name = __name__
self.assertEqual(file_name, expected_file_name)
The file contains one single test. To run it execute:
$ avocado run basic.py
JOB ID : 927ee8f6973235d5137cb63695242cb025ee0e93
JOB LOG : /home/user/avocado/job-results/job-2021-11-24T17.03-927ee8f/job.log
(1/1) basic.py:BasicTests.test_file_name_pass: STARTED
(1/1) basic.py:BasicTests.test_file_name_pass: PASS (0.01 s)
RESULTS : PASS 1 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0 | CANCEL 0
JOB TIME : 1.32 s
Avocado interprets all methods starting with the test
string in a class inheriting from avocado.Test
as a test.
Status | Description |
---|---|
PASS | The test ran without problems |
WARN | The test passed with a soft event that does not impact the test, but it is worth checking |
SKIP | The test did not run |
CANCEL | The test was canceled during its execution |
FAIL | The test result is not the expected |
ERROR | Something went wrong with the test execution, not what is being tested itself |
INTERRUPTED | The test was interrupted while it was executing |
In an ordinary run, a test is expected to PASS or FAIL.
It is possible to force some error status calling the specific test method, like self.fail
, self.error
, and self.cancel
from the test. To force a WARN status, write a warning to the test log using self.log.warning
.
The following code extends the previous example of a basic Avocado test to demonstrate the test statuses.
class BasicTests(Test):
def test_file_name_pass(self):
expected_file_name = 'basic'
file_name = __name__
self.assertEqual(file_name, expected_file_name)
def test_file_name_fail(self):
expected_file_name = 'not-basic'
file_name = __name__
self.assertEqual(file_name, expected_file_name)
def test_file_name_cancel(self):
expected_file_name = 'basic'
file_name = __name__
self.cancel('Canceling before asserting')
self.assertEqual(file_name, expected_file_name)
def test_file_name_error(self):
expected_file_name = 'basic'
file_name = __name__
self.assertEqual(file_name, expected_file_name)
raise RuntimeError('Erroring a test')
def test_file_name_warn(self):
expected_file_name = 'basic'
file_name = __name__
self.assertEqual(file_name, expected_file_name)
self.log.warning('Warning note')
The output of the execution will look like this:
$ avocado run basic.py
JOB ID : 6e7e82df1046f86ca940d7e3f8ea637fc47c728f
JOB LOG : /home/user/avocado/job-results/job-2021-11-25T17.51-6e7e82d/job.log
(2/5) basic.py:BasicTests.test_file_name_fail: STARTED
(1/5) basic.py:BasicTests.test_file_name_pass: STARTED
(4/5) basic.py:BasicTests.test_file_name_error: STARTED
(3/5) basic.py:BasicTests.test_file_name_cancel: STARTED
(5/5) basic.py:BasicTests.test_file_name_warn: STARTED
(1/5) basic.py:BasicTests.test_file_name_pass: PASS (0.01 s)
(5/5) basic.py:BasicTests.test_file_name_warn: WARN: Test passed but there were warnings during execution. Check the log for details. (0.01 s)
(4/5) basic.py:BasicTests.test_file_name_error: ERROR: Erroring a test (0.04 s)
(3/5) basic.py:BasicTests.test_file_name_cancel: CANCEL: Canceling before asserting (0.01 s)
(2/5) basic.py:BasicTests.test_file_name_fail: FAIL: 'basic' != 'not-basic'\n- basic\n+ not-basic\n? ++++\n (0.04 s)
RESULTS : PASS 1 | ERROR 1 | FAIL 1 | SKIP 0 | WARN 1 | INTERRUPT 0 | CANCEL 1
JOB TIME : 2.00 s
Coming soon!