summaryrefslogtreecommitdiff
path: root/testing/tests/conftest.py
diff options
context:
space:
mode:
authordrebs <drebs@riseup.net>2017-09-09 09:26:14 -0300
committerVictor Shyba <victor1984@riseup.net>2017-09-11 16:24:30 -0300
commit8e6cddf794c4b0e44bec6daa4363f2926e238f0a (patch)
treeab34cfd50823764e9e38a6a45be99faffef82ddb /testing/tests/conftest.py
parentf6a409a711df032507cbe3dd1f1129c1b7e19c95 (diff)
[test] add --subdir option and blacklist
Use subdir path to select/deselect benchmark tests. Because of the way pytest and pytest benchamrk select/deselect tests, it makes more sense for this test suite to use a --subdir option to select only a subset of tests and a blacklist of subdirectories that should not be run unless explicitelly asked to. This commit adds a --subdir option, that will deselect all tests no in ./tests/<subdir> when the option is passed to pytest. Also, a blacklist is added so, unless explicitelly added as a --subdir, tests in blacklisted subdirectories will not be run. The reasons for this modification are: - pytest-benchmarks selects/deselects tests based on the type of their fixtures. This means that fixtures have to be instantiated previous to test selection/deselection, something that may cause side effects that we want to avoid. - the usual test suite is run for all benchmarks, while some tests should only be run in specific situations (as is the case of benchmarks and responsiveness tests). It is saner to implement subdir selection than marking all tests with pytest marks and using them to select/deselect.
Diffstat (limited to 'testing/tests/conftest.py')
-rw-r--r--testing/tests/conftest.py47
1 files changed, 45 insertions, 2 deletions
diff --git a/testing/tests/conftest.py b/testing/tests/conftest.py
index 857934ff..d3a39289 100644
--- a/testing/tests/conftest.py
+++ b/testing/tests/conftest.py
@@ -21,13 +21,52 @@ from leap.soledad.common.couch import CouchDatabase
from leap.soledad.client import Soledad
-# mark tests that depend on couchdb
-def pytest_collection_modifyitems(items):
+def _select_subdir(subdir, blacklist, items):
+
+ # allow blacklisted subdir if explicited in command line
+ if subdir and subdir in blacklist:
+ blacklist.remove(subdir)
+
+ # determine blacklisted subdirs
+ dirname = os.path.dirname(__file__)
+ blacklisted_subdirs = map(lambda s: os.path.join(dirname, s), blacklist)
+
+ # determine base path for selected tests
+ path = dirname
+ if subdir:
+ path = os.path.join(dirname, subdir)
+
+ # remove tests from blacklisted subdirs
+ selected = []
+ deselected = []
+ for item in items:
+ filename = item.module.__file__
+ blacklisted = any(
+ map(lambda s: filename.startswith(s), blacklisted_subdirs))
+ if blacklisted or not filename.startswith(path):
+ deselected.append(item)
+ else:
+ selected.append(item)
+
+ return selected, deselected
+
+
+def pytest_collection_modifyitems(items, config):
+
+ # mark tests that depend on couchdb
marker = getattr(pytest.mark, 'needs_couch')
for item in items:
if 'soledad/testing/tests/couch/' in item.module.__file__:
item.add_marker(marker)
+ # select/deselect tests based on a blacklist and the subdir option given in
+ # command line
+ blacklist = ['benchmarks', 'responsiveness']
+ subdir = config.getoption('subdir')
+ selected, deselected = _select_subdir(subdir, blacklist, items)
+ config.hook.pytest_deselected(items=deselected)
+ items[:] = selected
+
#
# default options for all tests
@@ -65,6 +104,10 @@ def pytest_addoption(parser):
"--elasticsearch-url", type="string", default=None,
help="the url for posting responsiveness results to elasticsearch")
+ parser.addoption(
+ "--subdir", type="string", default=None,
+ help="select only tests from a certain subdirectory of ./tests/")
+
def _request(method, url, data=None, do=True):
if do: