flakytest.dev anze3db flakytest
Tests / apps/projects/tests.py

SlugsAndNumbersTest::test_runs_and_profiles_are_numbered_per_project

First seen 8 hours ago in 78a4357
CI github-actions:test 5 runs
Average
17 ms
median 18 ms
max 20 ms
Phases
Setup 0.73 ms Call 16 ms Teardown 0.16 ms
Categories
Database 14 ms Factories 0.90 ms App code 0.24 ms Other (pytest, Unsampled) 2 ms

23 database queries per run

Needs 0 KB of memory (max 0 KB)

Duration per run

Where the time goes

Latest run in ci:github-actions:test, an hour ago · open run
Show pytest frames
call17 ms94.5%
SlugsAndNumbersTest.test_runs_and_profiles_are_numbered_per_projectapps/projects/tests.py:1451 self.assertEqual([baker.make(Run, project=self.project, ingest=ingest).number for _ in range(2)], [1, 2])5 ms27.0%
makemodel_bakery/baker.py:1475 ms27.0%
Baker.makemodel_bakery/baker.py:4065 ms27.0%
Baker._makemodel_bakery/baker.py:4825 ms27.0%
Baker.instancemodel_bakery/baker.py:5355 ms27.0%
Run.saveapps/projects/models.py:1872 ms13.5%
next_numberapps/projects/models.py:35 return (model.objects.filter(project_id=project_id).aggregate(last=models.Max("number"))["last"] or 0) + 12 ms13.5%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:872 ms13.5%
QuerySet.filterdjango/db/models/query.py:15421 ms6.8%
QuerySet._filter_or_excludedjango/db/models/query.py:15601 ms6.8%
QuerySet._filter_or_exclude_inplacedjango/db/models/query.py:15701 ms6.8%
Query.add_qdjango/db/models/sql/query.py:16711 ms6.8%
Query._add_qdjango/db/models/sql/query.py:17031 ms6.8%
Query.build_filterdjango/db/models/sql/query.py:15991 ms6.8%
Query.trim_joinsdjango/db/models/sql/query.py:20121 ms6.8%
Run.saveapps/projects/models.py:188 super().save(*args, **kwargs)2 ms13.5%
Model.savedjango/db/models/base.py:8281 ms6.8%
Model._prepare_related_fields_for_savedjango/db/models/base.py:12691 ms6.8%
Model.savedjango/db/models/base.py:8741 ms6.8%
Model.save_basedjango/db/models/base.py:9661 ms6.8%
Model._save_tabledjango/db/models/base.py:11671 ms6.8%
Model._do_insertdjango/db/models/base.py:12181 ms6.8%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:871 ms6.8%
QuerySet._insertdjango/db/models/query.py:19181 ms6.8%
SQLInsertCompiler.execute_sqldjango/db/models/sql/compiler.py:19251 ms6.8%
CursorWrapper.executedjango/db/backends/utils.py:791 ms6.8%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:921 ms6.8%
CursorWrapper._executedjango/db/backends/utils.py:1051 ms6.8%
Cursor.executepsycopg/cursor.py:1131 ms6.8%
Connection.waitpsycopg/connection.py:4951 ms6.8%
SlugsAndNumbersTest.test_runs_and_profiles_are_numbered_per_projectapps/projects/tests.py:14534 ms20.3%
get_or_create_numberedapps/projects/models.py:18 existing = model.objects.filter(project=project, **lookup).first()1 ms6.8%
QuerySet.firstdjango/db/models/query.py:11451 ms6.8%
QuerySet.__iter__django/db/models/query.py:3901 ms6.8%
QuerySet._fetch_alldjango/db/models/query.py:20001 ms6.8%
ModelIterable.__iter__django/db/models/query.py:951 ms6.8%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16241 ms6.8%
CursorWrapper.executedjango/db/backends/utils.py:791 ms6.8%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:921 ms6.8%
CursorWrapper._executedjango/db/backends/utils.py:1051 ms6.8%
Cursor.executepsycopg/cursor.py:1131 ms6.8%
Connection.waitpsycopg/connection.py:4951 ms6.8%
get_or_create_numberedapps/projects/models.py:21 number = next_number(model, project.pk)1 ms6.8%
next_numberapps/projects/models.py:35 return (model.objects.filter(project_id=project_id).aggregate(last=models.Max("number"))["last"] or 0) + 11 ms6.8%
QuerySet.aggregatedjango/db/models/query.py:5941 ms6.8%
Query.get_aggregationdjango/db/models/sql/query.py:6331 ms6.8%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16241 ms6.8%
CursorWrapper.executedjango/db/backends/utils.py:791 ms6.8%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:921 ms6.8%
CursorWrapper._executedjango/db/backends/utils.py:1051 ms6.8%
Cursor.executepsycopg/cursor.py:1131 ms6.8%
Connection.waitpsycopg/connection.py:4951 ms6.8%
get_or_create_numberedapps/projects/models.py:24 return model.objects.create(project=project, number=number, **lookup, **(defaults or {})), True1 ms6.8%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:871 ms6.8%
QuerySet.createdjango/db/models/query.py:6691 ms6.8%
Profile.saveapps/projects/models.py:466 super().save(*args, **kwargs)1 ms6.8%
Model.savedjango/db/models/base.py:8741 ms6.8%
Model.save_basedjango/db/models/base.py:9661 ms6.8%
Model._save_tabledjango/db/models/base.py:11671 ms6.8%
Model._do_insertdjango/db/models/base.py:12181 ms6.8%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:871 ms6.8%
QuerySet._insertdjango/db/models/query.py:19181 ms6.8%
SQLInsertCompiler.execute_sqldjango/db/models/sql/compiler.py:19251 ms6.8%
CursorWrapper.executedjango/db/backends/utils.py:791 ms6.8%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:921 ms6.8%
CursorWrapper._executedjango/db/backends/utils.py:1051 ms6.8%
Cursor.executepsycopg/cursor.py:1131 ms6.8%
Connection.waitpsycopg/connection.py:4951 ms6.8%
BaseCursor._execute_genpsycopg/_cursor_base.py:2061 ms6.8%
BaseCursor._maybe_prepare_genpsycopg/_cursor_base.py:2861 ms6.8%
ClientCursorMixin._execute_sendpsycopg/client_cursor.py:781 ms6.8%
SlugsAndNumbersTest.test_runs_and_profiles_are_numbered_per_projectapps/projects/tests.py:14574 ms20.3%
get_or_create_numberedapps/projects/models.py:21 number = next_number(model, project.pk)1 ms6.8%
get_or_create_numberedapps/projects/models.py:23 with transaction.atomic():1 ms6.8%
Atomic.__enter__django/db/transaction.py:2111 ms6.8%
async_unsafe.<locals>.decorator.<locals>.innerdjango/utils/asyncio.py:261 ms6.8%
BaseDatabaseWrapper.savepointdjango/db/backends/base/base.py:4001 ms6.8%
BaseDatabaseWrapper._savepointdjango/db/backends/base/base.py:3671 ms6.8%
CursorWrapper.executedjango/db/backends/utils.py:791 ms6.8%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:921 ms6.8%
CursorWrapper._executedjango/db/backends/utils.py:1031 ms6.8%
Cursor.executepsycopg/cursor.py:1131 ms6.8%
Connection.waitpsycopg/connection.py:4951 ms6.8%
get_or_create_numberedapps/projects/models.py:24 return model.objects.create(project=project, number=number, **lookup, **(defaults or {})), True1 ms6.8%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:871 ms6.8%
QuerySet.createdjango/db/models/query.py:6691 ms6.8%
Profile.saveapps/projects/models.py:466 super().save(*args, **kwargs)1 ms6.8%
Model.savedjango/db/models/base.py:8741 ms6.8%
Model.save_basedjango/db/models/base.py:9661 ms6.8%
Model._save_tabledjango/db/models/base.py:11671 ms6.8%
Model._do_insertdjango/db/models/base.py:12181 ms6.8%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:871 ms6.8%
QuerySet._insertdjango/db/models/query.py:19181 ms6.8%
SQLInsertCompiler.execute_sqldjango/db/models/sql/compiler.py:19251 ms6.8%
CursorWrapper.executedjango/db/backends/utils.py:791 ms6.8%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:921 ms6.8%
TransactionTestCase._post_teardowndjango/test/testcases.py:1240 self._fixture_teardown()2 ms13.5%
TestCase._fixture_teardowndjango/test/testcases.py:14951 ms6.8%
DatabaseWrapper.check_constraintsdjango/db/backends/postgresql/base.py:4831 ms6.8%
CursorWrapper.executedjango/db/backends/utils.py:791 ms6.8%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:921 ms6.8%
CursorWrapper._executedjango/db/backends/utils.py:1031 ms6.8%
Cursor.executepsycopg/cursor.py:1131 ms6.8%
Connection.waitpsycopg/connection.py:4951 ms6.8%
TestCase._fixture_teardowndjango/test/testcases.py:14971 ms6.8%
TestCase._rollback_atomicsdjango/test/testcases.py:14051 ms6.8%
Atomic.__exit__django/db/transaction.py:2861 ms6.8%
async_unsafe.<locals>.decorator.<locals>.innerdjango/utils/asyncio.py:261 ms6.8%
BaseDatabaseWrapper.savepoint_commitdjango/db/backends/base/base.py:4311 ms6.8%
BaseDatabaseWrapper._savepoint_commitdjango/db/backends/base/base.py:3751 ms6.8%
CursorWrapper.executedjango/db/backends/utils.py:791 ms6.8%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:921 ms6.8%
CursorWrapper._executedjango/db/backends/utils.py:1031 ms6.8%
Cursor.executepsycopg/cursor.py:1131 ms6.8%
Connection.waitpsycopg/connection.py:4951 ms6.8%
SlugsAndNumbersTest.test_runs_and_profiles_are_numbered_per_projectapps/projects/tests.py:14521 ms6.8%
makemodel_bakery/baker.py:1471 ms6.8%
Baker.makemodel_bakery/baker.py:4061 ms6.8%
Baker._makemodel_bakery/baker.py:4821 ms6.8%
Baker.instancemodel_bakery/baker.py:5351 ms6.8%
Run.saveapps/projects/models.py:1871 ms6.8%
next_numberapps/projects/models.py:35 return (model.objects.filter(project_id=project_id).aggregate(last=models.Max("number"))["last"] or 0) + 11 ms6.8%
QuerySet.aggregatedjango/db/models/query.py:5941 ms6.8%
Query.get_aggregationdjango/db/models/sql/query.py:6331 ms6.8%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16241 ms6.8%
CursorWrapper.executedjango/db/backends/utils.py:791 ms6.8%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:921 ms6.8%
CursorWrapper._executedjango/db/backends/utils.py:1051 ms6.8%
Cursor.executepsycopg/cursor.py:1131 ms6.8%
Connection.waitpsycopg/connection.py:4951 ms6.8%
SlugsAndNumbersTest.test_runs_and_profiles_are_numbered_per_projectapps/projects/tests.py:14551 ms6.8%
get_or_create_numberedapps/projects/models.py:18 existing = model.objects.filter(project=project, **lookup).first()1 ms6.8%
QuerySet.firstdjango/db/models/query.py:11441 ms6.8%
QuerySet.order_bydjango/db/models/query.py:17701 ms6.8%
Estimated from 14 samples; phase durations are exact. Frames from pytest and pluggy are hidden .

Hot lines in your code

apps/projects/models.py:35
return (model.objects.filter(project_id=project_id).aggregate(last=models.Max("number"))["last"] or 0) + 1
next_number · Database
5 ms
apps/projects/models.py:188
super().save(*args, **kwargs)
Run.save · Database
2 ms
apps/projects/models.py:18
existing = model.objects.filter(project=project, **lookup).first()
get_or_create_numbered · Database
2 ms
apps/projects/models.py:466
super().save(*args, **kwargs)
Profile.save · Database
2 ms
apps/projects/models.py:21
number = next_number(model, project.pk)
get_or_create_numbered · App code
1 ms
apps/projects/models.py:23
with transaction.atomic():
get_or_create_numbered · Database
1 ms

Fixtures

Exact setup time
_django_clear_site_cache function 0.06 ms
_django_db_marker function 0.05 ms
_django_set_urlconf function 0.05 ms
_live_server_helper function 0.04 ms
_template_string_if_invalid_marker function 0.04 ms
_dj_autoclear_mailbox function 0.04 ms
monkeypatch function 0.03 ms

Database

23 queries · 9 ms

Repeated queries are usually N+1 lookups: fetch them once with select_related / prefetch_related (or selectinload).

3×
SELECT MAX("projects_run"."number") AS "last" FROM "projects_run" WHERE "projects_run"."project_id" = %s
3×
INSERT INTO "projects_run" ("project_id", "number", "external_id", "attempt", "status", "date_created", "date_finished", "commit_id", "ingest_id") VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s) RETURNING "projects_run"."id"

Biggest pieces of work

call test body
apps/projects/tests.py:1451
15 ms
call _post_teardown
django/test/testcases.py:1240
2 ms

Reliability

5 results · 0 CI failures · 0 local failures

This test hasn't failed recently.

History

Latest 5 results, oldest first in the strip
When Environment Outcome Duration Commit
an hour ago CI github-actions:test passed 18 ms 9caa567 main Profile
an hour ago CI github-actions:test passed 18 ms ec75501 main Profile
8 hours ago CI github-actions:test passed 19 ms d2c12e5 main Profile
8 hours ago CI github-actions:test passed 12 ms 0b902f6 main Profile
9 hours ago CI github-actions:test passed 20 ms 78a4357 main Profile