Use custom test suite with pytest-django

I want to switch the Django application (version 1.6x) to use pytest-django for tests. So I installed the latest pytest-django via pip and got the following versions:

 pytest==2.6.4 pytest-django==2.7.0 

With regular django tests, I use my own custom test suite extending the DjangoTestSuiteRunner, which I configured in my .py settings:

settings.py:

 TEST_RUNNER = "dcmanager.tests.runner.ManagedModelTestRunner" 

runner.py:

 import unittest from django.conf import settings from django.db.models import get_app, get_apps from django.test.simple import DjangoTestSuiteRunner, build_test, build_suite, runner class ManagedModelTestRunner(DjangoTestSuiteRunner): """ Test runner that automatically makes all unmanaged models in project managed for the duration of the test run and patches VStorage model, so that one doesn't need to execute the SQL manually to create them. """ IGNORE_TESTS = ['django', 'rest_framework', 'rest_framework_swagger'] def build_suite(self, test_labels, extra_tests=None, **kwargs): suite = unittest.TestSuite() if test_labels: for label in test_labels: if '.' in label: suite.addTest(build_test(label)) else: app = get_app(label) suite.addTest(build_suite(app)) else: ignore_list = [] for app in get_apps(): app_name_parts = app.__name__.split('.') for index, _ in enumerate(app_name_parts): app_part_name = '.'.join(app_name_parts[0:index]) if app_part_name and app_part_name in self.IGNORE_TESTS: ignore_list.append(app.__name__) break if app.__name__ not in ignore_list: suite.addTest(build_suite(app)) if extra_tests: for test in extra_tests: suite.addTest(test) return runner.reorder_suite(suite, (unittest.TestCase,)) def setup_test_environment(self, *args, **kwargs): if settings.STAGE == 'TEST': from django.db.models.loading import get_models self.unmanaged_models = [m for m in get_models() if not m._meta.managed] for m in self.unmanaged_models: m._meta.managed = True super(ManagedModelTestRunner, self).setup_test_environment(*args, **kwargs) def teardown_test_environment(self, *args, **kwargs): super(ManagedModelTestRunner, self).teardown_test_environment(*args, **kwargs) # reset unmanaged models for m in self.unmanaged_models: m._meta.managed = False 

How can I tell pytest-django to use my custom test suite?

+7
python django
source share
1 answer

py.test does not use run-test runners at all

I'm afraid you will have to redo the user collection in py.test

+2
source share

All Articles