Tagging
Tagging allows you to attach arbitrary labels to testcases and tests which can then be selected using a logical expression.
Tagging is a very useful feature to group tests or to partition and paralell long running test suites easily without any additional effort.
Adding tags to testcases and tests
Tagging is done using the htf.tags
decorator which can be used for testcases and tests. Tests inherit
the tags from the testcase they are located in. Inherited tags are merged with local tags.
import htf
@htf.tags("foo")
class TestFoo(htf.TestCase):
@htf.tags("one")
def test_one(self):
pass
@htf.tags("two")
def test_two(self):
pass
@htf.tags("three", "io")
def test_three(self):
# use io
pass
@htf.tags("bar")
class TestBar(htf.TestCase):
@htf.tags("one")
def test_one(self):
pass
@htf.tags("two")
def test_two(self):
pass
@htf.tags("three", "io")
def test_three(self):
# use io
pass
All tests in TestFoo
are tagged with "foo"
and all tests in TestBar
are tagged with "bar"
.
Logical expression to select tags
Tagged tests can be selected using a logical expression that is evaluated to find matching tests.
A logical expression is a string consisting of tag names, operators and pairs of brackets.
The parser supports the following tokens:
Token |
Description |
---|---|
tag |
A string matching the regular expression |
& |
Logical and |
| |
Logical or |
^ |
Logical xor |
! |
Logical not |
( |
Left bracket |
) |
Right bracket |
Groups are built using the brackets. Groups are evaluated first.
Whitespaces are ignored.
For example to select all tests that have the "foo"
tag the logical expression
would be "foo"
.
To select all tests that do not have the "foo"
tag the logical expression
would be "!foo"
.
To select all tests that uses "io"
and "bar"
the expression is
"io&bar"
(or "io & bar"
for better readability).
To select all tests that are tagged with "bar"
or "io"
and "three"
the expression
is "bar | (io & three)"
.
Selecting tests using tags
To select tests using a logical expression and tags is easy.
htf.main
, htf.run
and htf.dryrun
have the tags
option set to a logical expression.
For example:
htf.main(tags="bar | (io & three)")
For the command line utilities htf run
and htf dryrun
use the -t
or --tags
option followed
by a logical expression.
For example:
htf run --tags='bar | (io & three)'
Showing available tags
To get a list of available tags you can use
$ htf tags
from the command line or
htf.get_tags
from within a Python script.
For the initial example this would lead to a sorted list of tags consisting of
bar
, foo
, io
, one
, three
and two
.