diff options
author | Anssi Kääriäinen <akaariai@gmail.com> | 2015-12-29 18:29:11 +0200 |
---|---|---|
committer | Tim Graham <timograham@gmail.com> | 2015-12-31 09:00:44 -0500 |
commit | ee9f4686b19e2b4a68f5cb4f9d61dc045c1d4c63 (patch) | |
tree | 31c88326557eb5744145481d787a5e85abd59f5a /tests/fixtures | |
parent | 6687f4dcbbfeca81b76233609fca90f30ce4dd25 (diff) | |
download | django-ee9f4686b19e2b4a68f5cb4f9d61dc045c1d4c63.tar.gz |
Fixed #23372 -- Made loaddata faster if it doesn't find any fixtures.
Django's test suite often tries to load fixture files from apps that have
no fixtures at all. This creates a lot of unnecessary disabling and
enabling of constraints which can be expensive on some database.
To speed this up, loaddata now first checks if any fixture file matches.
If no fixture file is matched, then the command exits before disabling
and enabling of constraints is done.
The main benefit of this change is seen on MSSQL, where tests on
Django 1.8 run hours faster.
Diffstat (limited to 'tests/fixtures')
-rw-r--r-- | tests/fixtures/tests.py | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/tests/fixtures/tests.py b/tests/fixtures/tests.py index f48a689f6f..86164e03bc 100644 --- a/tests/fixtures/tests.py +++ b/tests/fixtures/tests.py @@ -13,7 +13,7 @@ from django.core.files.temp import NamedTemporaryFile from django.core.serializers.base import ProgressBar from django.db import IntegrityError, connection from django.test import ( - TestCase, TransactionTestCase, ignore_warnings, skipUnlessDBFeature, + TestCase, TransactionTestCase, ignore_warnings, mock, skipUnlessDBFeature, ) from django.utils import six from django.utils.encoding import force_text @@ -643,6 +643,18 @@ class NonExistentFixtureTests(TestCase): self.assertEqual(force_text(w[0].message), "No fixture named 'this_fixture_doesnt_exist' found.") + @mock.patch('django.db.connection.enable_constraint_checking') + @mock.patch('django.db.connection.disable_constraint_checking') + def test_nonexistent_fixture_no_constraint_checking(self, + disable_constraint_checking, enable_constraint_checking): + """ + If no fixtures match the loaddata command, constraints checks on the + database shouldn't be disabled. This is performance critical on MSSQL. + """ + management.call_command('loaddata', 'this_fixture_doesnt_exist', verbosity=0) + disable_constraint_checking.assert_not_called() + enable_constraint_checking.assert_not_called() + class FixtureTransactionTests(DumpDataAssertMixin, TransactionTestCase): |