Я портирую большое веб-приложение с Python 2.7 на Python 3.6.Я управлял миграцией базы данных и конвертировал код, используя 2to3, но у меня проблемы с запуском моего пакета тестирования.Для большого количества тестов я получаю сообщения об ошибках:та же проблема, что и у меня.
Также примечательно: если я запускаю отдельный тестовый файл сам (т.е. py.test /path/to/file
), то эта ошибка не возникает.Я думаю, что это должно быть связано с тем, как данные базы данных обрабатываются между тестами.
Вот пример теста, который не проходит:
1
2 from django.utils import timezone
3 from tests.tests_probex.tests_python.testing_utilities import LoggedInTestCase
4 from tests.tests_probex.tests_python.factories import JobFactory
5 from probex.models import Profile, Tenant, Job
6 from probex.views.reports import build_tenant_report
7 from django.contrib.auth.models import User
8 import pytest
9
10 pytestmark = pytest.mark.xfail(reason="Not working in Python 3.6")
11
12
13 class TestTenantReport(LoggedInTestCase):
14 def setUp(self):
15 super(TestTenantReport, self).setUp()
16 self.end_date = timezone.now()
17 self.delta = timezone.timedelta(days=7)
18 self.start_date = self.end_date - self.delta
19
20 self.date = timezone.now() - timezone.timedelta(days=3)
21 self.job = JobFactory(absolute_num=1600, relative_num=1600, protocol=self.protocol, project=self.project, status='Co
mplete', created=self.date, submitter_id=self.user.id)
22
23 def test_returns_new_users(self):
24 users = User.objects.all()
25 for user in users:
26 user.date_joined = self.date
27 p = Profile.objects.get(user_id=user.id)
28 tenant = Tenant.objects.get(id=p.tenant_id)
29 tenant.app_scientist = self.user
30 user.save()
31 tenant.save()
32
33 report = build_tenant_report(self.user)
34 self.assertGreaterEqual(report['new_users'].count(), users.count())
LoggedInTestCase является подклассом djangoTestCase:
15 class LoggedInTestCase(TestCase):
16 def setUp(self):
17 self.user = User.objects.create_user(username='dummy@hotmail.com', email='dummy@hotmail.com', password="secret123")
18 self.user.user_permissions.add(Permission.objects.get(codename='add_job'))
19 self.user.user_permissions.add(Permission.objects.get(codename='change_job'))
20 self.user.user_permissions.add(Permission.objects.get(codename='add_project'))
21 self.user.user_permissions.add(Permission.objects.get(codename='add_user'))
22 self.user.user_permissions.add(Permission.objects.get(codename='change_user'))
23 self.tenant = Tenant.objects.create(name="testtenant")
24 self.user.profile.tenant = self.tenant
25 self.user.profile.save()
26 self.project = ProjectFactory(name="testproject", tenant=self.tenant, active=True, identifier='AAA')
27 self.protocol = ProtocolFactory()
28 self.root_term = TermFactory(is_root=True, acc='all')
29 self.login()
30
31 def login(self):
32 self.client.login(username='dummy@hotmail.com', password='secret123')
33
34 def logout(self):
35 self.client.logout()
36
37 def get_user(self):
38 return self.client
39
40 def permission_restricted(self, response, first_stop_url):
41 first_redirect, status_1 = response.redirect_chain[0]
42 second_redirect, status_2 = response.redirect_chain[1]
43 self.assertEqual(first_redirect, first_stop_url)
44 self.assertEqual(status_1, 302)
45 self.assertEqual(second_redirect, reverse('home'))
46 self.assertEqual(status_2, 302)
Эти тесты проходили при запуске под Python 2.7, и я мало что изменил, за исключением обновления до 3.6.Я все еще ожидал бы их прохождения сейчас.Если у кого-то есть указатели, я был бы очень признателенПервый постер здесь.