pytest support
While django-app-helper was born with Django TestCase in mind, it can be used with pytest with some configuration
together with pytest-django.
django-app-helper runner
You can run pytest tests by using a custom runner (based on pytest-django documentation); to enable it,
add the following to project helper.py file:
HELPER_SETTINGS = { ... "TEST_RUNNER": "app_helper.pytest_runner.PytestTestRunner", ... }
Using this approach you can mix pytest tests and Django TestCase ones, the runner will take care
of discovering and running both.
Running tests
Invoke app_helper as usual:
$ python helper.py <app-name> test
pytest options
The runner support translates the following Django test runner options to pytest ones:
verbosity == 0:--quietverbosity == 2:--verboseverbosity == 3:-vvfailfast:--exitfirstkeepdb:--reuse-db
All the other pytest and pytest plugins are supported either via PYTEST_ARGS enviroment variable or
--runner-options cmdline argument.
Environment variable example:
PYTEST_ARGS='-s -k my_test' python helper.py test
argument variable example:
python helper.py test --runner-options="-k my_test"
In case arguments are passed via both channels they are merged together, with runner-options arguments having priority over environment variables in case of overlapping options.
standard pytest
Running tests
Invoke pytest as usual:
$ python -mpytest <args>
or:
$ pytest <args>
In this case you don’t need any special syntax to pass commands as the django-app-helper pytest runner is not executed and pytest is full in control.
Using BaseTestCaseMixin
While its BaseTestCaseMixin is built on Django TestCase, it can be used in pytest classes:
Fixtures, markers and decorators can be used as usual on test methods as in classic pytest classes.
class TestTags(BaseTestCaseMixin):
...
def test_foo(self):
...