Add support to skip tests from CLI
With this patch, a new pytest optional arg has been added: --skipregex When it is used, tests are skipped when the regex is found in their test names. Fully qualified test names are used for this search. Example: tobiko.tests.unit.test_exception.TestException.test_init It can be used from CLI with pytest like this: $ .tox/py3/bin/pytest \ --skipregex='test_join_chunks_.*_bytes|test_join_chunks_with_unicodes' \ tobiko/tests/unit It can be used from CLI with tox like this: $ PYTEST_ADDOPTS="--skipregex='test_join_chunks_.*_bytes|test_join_chunks_with_unicodes'" \ TOX_PYTHON=python3.9 \ tox -e py3 It can be used from the Tobiko Infrared plugin by using the following option (limitation: the skipregex is applied to all the steps from the the executed Tobiko workflow): $ infrared tobiko ... --pytest-addopts "--skipregex='test_join_chunks_.*_bytes|test_join_chunks_with_unicodes'" It can be used from a zuul job by configuring the following variable within the zuul job yaml file (limitation: the skipregex is applied to all the steps from the executed Tobiko workflow): pytest_addopts_global: "--skipregex='test_join_chunks_.*_bytes|test_join_chunks_with_unicodes'" Change-Id: I8ee32ba467bd70142816953598d1736fa353d3d0
This commit is contained in:
parent
9bc3c0a650
commit
5af7c53c05
@ -202,8 +202,10 @@ subparsers:
|
|||||||
ansible_variable: tox_python
|
ansible_variable: tox_python
|
||||||
pytest-addopts:
|
pytest-addopts:
|
||||||
type: Value
|
type: Value
|
||||||
help: Extra options to be passed to PyTest
|
help: >
|
||||||
ansible_variable: pytest_addopts
|
Extra options to be passed to PyTest. This value is overriden
|
||||||
|
when it is defined at workflow level too.
|
||||||
|
ansible_variable: pytest_addopts_global
|
||||||
pytest-markers:
|
pytest-markers:
|
||||||
type: Value
|
type: Value
|
||||||
help: >
|
help: >
|
||||||
|
36
releasenotes/notes/skipregex-new-arg-a9f1c001cbc823f9.yaml
Normal file
36
releasenotes/notes/skipregex-new-arg-a9f1c001cbc823f9.yaml
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
Added new input argument `--skipregex`
|
||||||
|
When it is used, tests are skipped when the regex is found in their test
|
||||||
|
names. Fully qualified test names are used for this search.
|
||||||
|
|
||||||
|
| Example: tobiko.tests.unit.test_exception.TestException.test_init
|
||||||
|
|
||||||
|
* It can be used from CLI with pytest
|
||||||
|
|
||||||
|
.. code-block:: text
|
||||||
|
|
||||||
|
$ .tox/py3/bin/pytest --skipregex='test_join_chunks_.*_bytes|test_join_chunks_with_unicodes' tobiko/tests/unit
|
||||||
|
|
||||||
|
* It can be used from CLI with tox
|
||||||
|
|
||||||
|
.. code-block:: text
|
||||||
|
|
||||||
|
$ PYTEST_ADDOPTS="--skipregex='test_join_chunks_.*_bytes|test_join_chunks_with_unicodes'" TOX_PYTHON=python3.9 tox -e py3
|
||||||
|
|
||||||
|
* It can be used from the Tobiko Infrared plugin by using the --pytest-addopts
|
||||||
|
option (limitation: the skipregex is applied to all the steps from the
|
||||||
|
the executed Tobiko workflow)
|
||||||
|
|
||||||
|
.. code-block:: text
|
||||||
|
|
||||||
|
$ infrared tobiko ... --pytest-addopts "--skipregex='test_join_chunks_.*_bytes|test_join_chunks_with_unicodes'"
|
||||||
|
|
||||||
|
* It can be used from a zuul job by configuring the following variable
|
||||||
|
within the zuul job yaml file (limitation: the skipregex is applied to
|
||||||
|
all the steps from the executed Tobiko workflow)
|
||||||
|
|
||||||
|
.. code-block:: text
|
||||||
|
|
||||||
|
pytest_addopts_global: "--skipregex='test_join_chunks_.*_bytes|test_join_chunks_with_unicodes'"
|
@ -36,7 +36,8 @@ tox_expected_rcs:
|
|||||||
- '{{ tox_succeeded_rc }}'
|
- '{{ tox_succeeded_rc }}'
|
||||||
ignore_test_failures: no
|
ignore_test_failures: no
|
||||||
|
|
||||||
pytest_addopts: ''
|
pytest_addopts: '{{ pytest_addopts_global }}'
|
||||||
|
pytest_addopts_global: ''
|
||||||
pytest_markers: "{% if not test_flaky%}not flaky{% endif %}"
|
pytest_markers: "{% if not test_flaky%}not flaky{% endif %}"
|
||||||
pytest_maxfail: ''
|
pytest_maxfail: ''
|
||||||
test_flaky: false
|
test_flaky: false
|
||||||
|
@ -50,7 +50,7 @@
|
|||||||
|
|
||||||
- name: reset values used to generate tox_constrain_env after executing a test suite
|
- name: reset values used to generate tox_constrain_env after executing a test suite
|
||||||
set_fact:
|
set_fact:
|
||||||
pytest_addopts: ''
|
pytest_addopts: '{{ pytest_addopts_global }}'
|
||||||
test_flaky: false
|
test_flaky: false
|
||||||
pytest_markers: "{% if not test_flaky%}not flaky{% endif %}"
|
pytest_markers: "{% if not test_flaky%}not flaky{% endif %}"
|
||||||
pytest_maxfail: ''
|
pytest_maxfail: ''
|
||||||
|
@ -16,6 +16,7 @@ from __future__ import absolute_import
|
|||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
from oslo_log import log
|
from oslo_log import log
|
||||||
@ -172,3 +173,21 @@ def pytest_runtest_call(item):
|
|||||||
@pytest.fixture(scope="session", autouse=True)
|
@pytest.fixture(scope="session", autouse=True)
|
||||||
def cleanup_shelves():
|
def cleanup_shelves():
|
||||||
tobiko.initialize_shelves()
|
tobiko.initialize_shelves()
|
||||||
|
|
||||||
|
|
||||||
|
def pytest_addoption(parser):
|
||||||
|
parser.addoption("--skipregex", action="store",
|
||||||
|
default="", help="skip tests matching the provided regex")
|
||||||
|
|
||||||
|
|
||||||
|
def pytest_collection_modifyitems(config, items):
|
||||||
|
skipregex = config.getoption("--skipregex")
|
||||||
|
if not skipregex:
|
||||||
|
# --skipregex not given in cli, therefore move on
|
||||||
|
return
|
||||||
|
skip_listed = pytest.mark.skip(reason="matches --skipregex")
|
||||||
|
for item in items:
|
||||||
|
fully_qualified_test_name = '.'.join([item.obj.__module__,
|
||||||
|
item.getmodpath()])
|
||||||
|
if re.search(skipregex, fully_qualified_test_name):
|
||||||
|
item.add_marker(skip_listed)
|
||||||
|
Loading…
Reference in New Issue
Block a user