Get timing breakdown of your Django test suite
Project description
django-timed-tests
What gets measured gets improved.
django-timed-tests produce the timing breakdown for your tests.
Requirements
Note: as of cpython 3.12, timing functionality is supported by default
Python 3.6 through 3.12 supported.
Django 2.0 through 4.2 supported.
django-timed-tests only works if you're using Django's testing framework.
Installation
Install using pip:
python -m pip install django-timed-tests
Usage
Edit your settings.py:
INSTALLED_APPS = [
...
django_timed_tests,
...
]
TEST_RUNNER = "django_timed_tests.TimedTestRunner"
django-timed-tests support the use of --parallel, --debug-sql, and --pdb flags.
Regular report
The regular report shows 10 slowest passing tests that were run, ordered by descending duration.
The next time you run your tests using manage.py test, you'll see something like:
.............
----------------------------------------------------------------------
Ran 12 tests in 18.036s
OK
| Test | Duration (s) |
|--------------------------------------------|----------------|
| tests.examples.DummyTestCase1.test_dummy_3 | 3.0048 |
| tests.examples.DummyTestCase3.test_dummy_3 | 3.0041 |
| tests.examples.DummyTestCase2.test_dummy_3 | 3.00086 |
| tests.examples.DummyTestCase3.test_dummy_2 | 2.0052 |
| tests.examples.DummyTestCase1.test_dummy_2 | 2.00372 |
| tests.examples.DummyTestCase2.test_dummy_2 | 2.00194 |
| tests.examples.DummyTestCase3.test_dummy_1 | 1.0043 |
| tests.examples.DummyTestCase1.test_dummy_1 | 1.00235 |
| tests.examples.DummyTestCase2.test_dummy_1 | 1.00044 |
| tests.examples.DummyTestCase3.test_dummy_0 | 0.000109295 |
Full report
Full report shows all passing tests, with a breakdown per module, test class, and test method.
When you run manage.py test --full-report, you'll see something like:
..............
----------------------------------------------------------------------
Ran 12 tests in 6.157s
OK
| Module | Duration (s) |
|----------------|----------------|
| tests.examples | 18.0088 |
| Class | Duration (s) |
|-------------------------------|----------------|
| tests.examples.DummyTestCase1 | 6.00306 |
| tests.examples.DummyTestCase2 | 6.00299 |
| tests.examples.DummyTestCase3 | 6.00273 |
| Test | Duration (s) |
|--------------------------------------------|----------------|
| tests.examples.DummyTestCase2.test_dummy_3 | 3.00136 |
| tests.examples.DummyTestCase3.test_dummy_3 | 3.00136 |
| tests.examples.DummyTestCase1.test_dummy_3 | 3.00126 |
| tests.examples.DummyTestCase3.test_dummy_2 | 2.00039 |
| tests.examples.DummyTestCase1.test_dummy_2 | 2.00031 |
| tests.examples.DummyTestCase2.test_dummy_2 | 2.00026 |
| tests.examples.DummyTestCase1.test_dummy_1 | 1.00128 |
| tests.examples.DummyTestCase2.test_dummy_1 | 1.00112 |
| tests.examples.DummyTestCase3.test_dummy_1 | 1.0008 |
| tests.examples.DummyTestCase2.test_dummy_0 | 0.000246959 |
| tests.examples.DummyTestCase1.test_dummy_0 | 0.00022184 |
| tests.examples.DummyTestCase3.test_dummy_0 | 0.000178818 |
Combining with your own test runner
TimedTestRunner tries to be minimally invasive, and integrating it into your custom test runner shouldn't be too complex.
If your custom runner just inherits from DiscoverRunner, without redefining DiscoverRunner.test_runner, DiscoverRunner.parallel_test_runner and DiscoverRunner.get_resultclass, you should be fine with just inheriting TimedTestRunner and calling super() at the beginning of your overriden methods:
class MyOwnTestRunner(TimedTestRunner):
def __init__(self, **kwargs):
super().__init__(**kwargs)
# Do something else
...
If your test runner also uses custom TestRunner or TestResult classes, best course of action would be to inspect the django_timed_tests.runner module to see which classes should be inherited and which attributes and method should be overridden.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file django-timed-tests-0.1.4.tar.gz.
File metadata
- Download URL: django-timed-tests-0.1.4.tar.gz
- Upload date:
- Size: 7.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
44820a45bebb8ecc07e09e77231c56710a6e3c5b31b8749791a3bbe5e119b33c
|
|
| MD5 |
352fe20a092ad51c9387d4d8c77be651
|
|
| BLAKE2b-256 |
a8141ef9cb2def124767a319e66b6f3addbb5ee755615b74abd97f63c1803b2b
|
File details
Details for the file django_timed_tests-0.1.4-py3-none-any.whl.
File metadata
- Download URL: django_timed_tests-0.1.4-py3-none-any.whl
- Upload date:
- Size: 5.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c01cb09b4fdf29e6c67fdc76935f3cf8aa1b4b3277c6754f018058b398f2c8ab
|
|
| MD5 |
5d975617601019d83acbd12b9ef82343
|
|
| BLAKE2b-256 |
f4b36c6ff3516765a5d9c5bb81beabbc0986f36251410207b9c97a45ce0f0bc5
|