1
0
mirror of https://github.com/django/django.git synced 2025-04-01 12:06:43 +00:00

Fixed #28790 -- Doc'd how to avoid running certain test classes in parallel.

This commit is contained in:
Caio Ariede 2019-06-05 11:35:36 -03:00 committed by Mariusz Felisiak
parent a28d1b38e5
commit dafdfd6a60
2 changed files with 40 additions and 0 deletions

View File

@ -1402,6 +1402,12 @@ Each process gets its own database. You must ensure that different test cases
don't access the same resources. For instance, test cases that touch the don't access the same resources. For instance, test cases that touch the
filesystem should create a temporary directory for their own use. filesystem should create a temporary directory for their own use.
.. note::
If you have test classes that cannot be run in parallel, you can use
``SerializeMixin`` to run them sequentially. See :ref:`Enforce running test
classes sequentially <topics-testing-enforce-run-sequentially>`.
This option requires the third-party ``tblib`` package to display tracebacks This option requires the third-party ``tblib`` package to display tracebacks
correctly: correctly:

View File

@ -299,6 +299,40 @@ Advanced features of ``TransactionTestCase``
Using ``reset_sequences = True`` will slow down the test, since the primary Using ``reset_sequences = True`` will slow down the test, since the primary
key reset is a relatively expensive database operation. key reset is a relatively expensive database operation.
.. _topics-testing-enforce-run-sequentially:
Enforce running test classes sequentially
=========================================
If you have test classes that cannot be run in parallel (e.g. because they
share a common resource), you can use ``django.test.testcases.SerializeMixin``
to run them sequentially. This mixin uses a filesystem ``lockfile``.
For example, you can use ``__file__`` to determine that all test classes in the
same file that inherit from ``SerializeMixin`` will run sequentially::
import os
from django.test import TestCase
from django.test.testcases import SerializeMixin
class ImageTestCaseMixin(SerializeMixin):
lockfile = __file__
def setUp(self):
self.filename = os.path.join(temp_storage_dir, 'my_file.png')
self.file = create_file(self.filename)
class RemoveImageTests(ImageTestCaseMixin, TestCase):
def test_remove_image(self):
os.remove(self.filename)
self.assertFalse(os.path.exists(self.filename))
class ResizeImageTests(ImageTestCaseMixin, TestCase):
def test_resize_image(self):
resize_image(self.file, (48, 48))
self.assertEqual(get_image_size(self.file), (48, 48))
.. _testing-reusable-applications: .. _testing-reusable-applications:
Using the Django test runner to test reusable applications Using the Django test runner to test reusable applications