Я хочу переключить приложение Django (версия 1.6x) на использование pytest-django
для тестов. Поэтому я установил последнюю pytest-Джанго через пип и получил эти версии:Использовать пользовательский набор тестов с pytest-django
pytest==2.6.4
pytest-django==2.7.0
с регулярным Джанго-тестами, я использую пользовательские набора тестов бегун простирающегося DjangoTestSuiteRunner, который я настроил в моем settings.py:
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
Как я могу сказать pytest-django использовать мой пользовательский набор тестов?