flakytest.dev anze3db fedidevs
Profiles / #8

Passed Run of Oct 26, 23:43

CI github-actions:test · 8ab642e main dirty · pass/fail report
Some tests got too few samples to explain their time. Rerun with pytest --flakytest-profile --flakytest-rate 5000.
Wall time
39.50 s
4 workers
Test time
1m 35s
sum of test durations
Tests
308
308 passed
Profiler
tachyon
1000 Hz · 93,189 samples · Python 3.15.1 · flakytest 2026.0b1
Peak memory
662 MB
4 workers together

Where the time goes

Test time by category
  • Password hashing27.35 s
  • Migrations25.35 s
  • Libraries18.89 s
  • Database12.57 s
  • Templates3.37 s
  • DB schema2.67 s
  • Imports1.95 s
  • Mocking1.36 s
  • pytest525 ms
  • Factories389 ms
  • Unsampled361 ms
  • App code109 ms
  • Deep copies67 ms
  • Cache46 ms
  • Network43 ms
  • Test code16 ms
  • Waiting16 ms
  • Logging15 ms
  • Serialization12 ms

Session timeline

Other
3 ms
Tests
1m 35s
Startup
8.45 s
Collection
3.50 s
Test phases
Setup 28.08 s Call 1m 06s Teardown 795 ms

Fix next

Ranked by the time each fix saves per run
1

Use plain static file storage in tests

Static file storage/manifest handling costs 28.3s.

High App code
28.28 s per run
Fix: In test settings use STORAGES["staticfiles"] = {"BACKEND": "django.contrib.staticfiles.storage.StaticFilesStorage"} so templates don't need a manifest. Read the guide
Details

Where:

  • accounts/views.py:425 index · 1.01 s
  • starter_packs/tests.py:841 TestShareStarterPack.test_api_formats · 740 ms
  • confs/views.py:509 create_conference · 691 ms
  • accounts/tests.py:550 TestAccountIndexRobots.assert_noindex · 606 ms
  • starter_packs/views.py:862 share_starter_pack · 528 ms
  • starter_packs/tests.py:781 TestShareStarterPack.test_order_by · 419 ms
  • starter_packs/tests.py:723 TestShareStarterPack.test_header_shows_gradient_and_account_avatars · 411 ms
  • confs/tests.py:152 TestMigratedLegacyConferences._assert_no_naive_warning · 374 ms
  • accounts/views.py:28 CountlessPage.__init__ · 335 ms
  • confs/views.py:296 _conference_detail · 323 ms

Most affected tests:

  • accounts/tests.py::TestAccountIndexRobots::test_two_facets_are_noindex
  • starter_packs/tests.py::TestShareStarterPack::test_header_shows_gradient_and_account_avatars
  • confs/tests.py::TestCreateConference::test_rejects_end_date_before_start
  • accounts/tests.py::TestSelectedInstance::test_invalid_selected_instance
  • confs/tests.py::TestCreateConference::test_form_renders_for_authenticated_user
  • starter_packs/tests.py::TestShareStarterPack::test_order_by_5___alphabetical____4__3__2__1__0__
  • confs/tests.py::TestMigratedLegacyConferences::test_djangoconafrica_page
  • accounts/tests.py::TestAccountIndexRobots::test_single_facet_is_indexable
2

Use a fast password hasher in tests

27.3s (29% of test time) is spent hashing passwords. Slow hashing protects real passwords; in tests it only burns CPU.

High Password hashing
25.98 s per run
Fix: In your test settings set PASSWORD_HASHERS = ["django.contrib.auth.hashers.MD5PasswordHasher"] (currently PBKDF2PasswordHasher). Read the guide
Details

Only change the hasher in test settings. Tests that assert on a specific hash format need updating.

Where:

  • confs/tests.py:1044 TestCreateConference.setUp · 5.51 s
  • confs/tests.py:1177 TestEditConference.setUp · 3.78 s
  • confs/tests.py:1175 TestEditConference.setUp · 3.75 s
  • confs/tests.py:1176 TestEditConference.setUp · 3.37 s
  • confs/tests.py:1371 TestApproveConference.setUp · 2.85 s
  • confs/tests.py:1372 TestApproveConference.setUp · 2.80 s
  • confs/tests.py:1317 TestConferenceApprovalVisibility.setUp · 1.52 s
  • confs/tests.py:1316 TestConferenceApprovalVisibility.setUp · 1.51 s
  • confs/tests.py:1295 TestUnapproveConference.setUp · 618 ms
  • confs/tests.py:1296 TestUnapproveConference.setUp · 601 ms

Most affected tests:

  • confs/tests.py::TestEditConference::test_edit_does_not_change_slug
  • confs/tests.py::TestEditConference::test_other_user_forbidden_on_approved_conference
  • confs/tests.py::TestEditConference::test_other_user_forbidden
  • confs/tests.py::TestEditConference::test_owner_can_edit
  • confs/tests.py::TestApproveConference::test_non_staff_forbidden
  • confs/tests.py::TestApproveConference::test_staff_sees_approve_button_on_detail
  • confs/tests.py::TestApproveConference::test_staff_approves
  • confs/tests.py::TestEditConference::test_owner_can_edit_after_approval

Documentation

3

Stop re-running migrations on every test run

Migrations take 25.3s per run, before the first test can start.

High Migrations
22.81 s per run
Fix: Run with --reuse-db (add it to addopts in pytest.ini/pyproject) so the test database survives between runs; pass --create-db when migrations change. If no test depends on data migrations, --nomigrations builds the schema straight from the models, which is faster still. Read the guide
Details

CI should still build the database from scratch (no --reuse-db) so broken migrations are caught.

Where:

  • confs/tests.py:432 TestLegacyConferenceDataMigration._migrate · 1.33 s
  • confs/migrations/0031_seed_conference_tags.py:14 seed_conference_tags · 761 ms
  • confs/tests.py:412 TestLegacyConferenceDataMigration._leaf_targets · 148 ms
  • confs/migrations/0033_remove_legacy_conference_tables.py:214 _pk_batches · 113 ms
  • confs/migrations/0033_remove_legacy_conference_tables.py:388 _get_or_create_conference · 87 ms
  • confs/tests.py:431 TestLegacyConferenceDataMigration._migrate · 71 ms
  • starter_packs/migrations/0004_starterpack_published_at.py:9 set_published_at · 65 ms
  • starter_packs/migrations/0009_starterpack_num_accounts.py:21 update_num_accounts · 61 ms
  • confs/tests.py:486 TestLegacyConferenceDataMigration._seed_overlapping_legacy_data · 54 ms
  • confs/migrations/0011_conferencepost_alter_conference_posts.py:13 update · 54 ms

Most affected tests:

  • confs/tests.py::TestMigratedLegacyConferences::test_fwd50_date_redirects
  • accounts/tests.py::TestAccountIndexRobots::test_two_facets_are_noindex
  • accounts/tests.py::TestSelectedInstance::test_invalid_selected_instance
  • confs/tests.py::TestSyncAnnouncements::test_is_idempotent_and_refreshes_unposted_content
  • confs/tests.py::TestLegacyConferenceDataMigration::test_copies_overlapping_legacy_rows_without_clobbering_existing_data
  • confs/tests.py::TestLegacyConferenceDataMigration::test_drops_legacy_tables_when_uniques_are_mysql_style_indexes

Documentation

4

Create shared test data in setUpTestData instead of setUp

setUp() runs before every test and takes 26.5s in total (password hashing 26.3s, db 196ms, factories 12ms) in 7 classes: TestApproveConference (6 tests), TestFollowStarterPack (3 tests), TestCreateConference (10 tests), TestEditConference (9 tests).

High Database
18.56 s per run
Fix: Move object creation that tests only read from setUp() into `@classmethod def setUpTestData(cls)`: it runs once per class and each test still sees the original rows (TestCase rolls back to a savepoint). Read the guide
Details

Since Django 3.2 attributes assigned in setUpTestData are deep-copied per test, so in-memory changes don't leak between tests. Keep objects a test modifies in the database (or re-fetches) as before.

Where:

  • confs/tests.py:1044 TestCreateConference.setUp · 5.53 s
  • confs/tests.py:1177 TestEditConference.setUp · 3.80 s
  • confs/tests.py:1175 TestEditConference.setUp · 3.76 s
  • confs/tests.py:1176 TestEditConference.setUp · 3.38 s
  • confs/tests.py:1371 TestApproveConference.setUp · 2.86 s
  • confs/tests.py:1372 TestApproveConference.setUp · 2.81 s
  • confs/tests.py:1317 TestConferenceApprovalVisibility.setUp · 1.53 s
  • confs/tests.py:1316 TestConferenceApprovalVisibility.setUp · 1.52 s
  • confs/tests.py:1295 TestUnapproveConference.setUp · 620 ms
  • confs/tests.py:1296 TestUnapproveConference.setUp · 603 ms

Most affected tests:

  • confs/tests.py::TestEditConference::test_edit_does_not_change_slug
  • confs/tests.py::TestEditConference::test_other_user_forbidden_on_approved_conference
  • confs/tests.py::TestEditConference::test_other_user_forbidden
  • confs/tests.py::TestEditConference::test_owner_can_edit
  • confs/tests.py::TestApproveConference::test_non_staff_forbidden
  • confs/tests.py::TestApproveConference::test_staff_sees_approve_button_on_detail
  • confs/tests.py::TestApproveConference::test_staff_approves
  • confs/tests.py::TestEditConference::test_owner_can_edit_after_approval

Documentation

5

Disable django-debug-toolbar in tests

django-debug-toolbar is installed in the test settings and costs 11.8s.

High App code
11.79 s per run
Fix: Only add debug_toolbar to INSTALLED_APPS and MIDDLEWARE when not testing (e.g. `if DEBUG and not TESTING:`). Read the guide
Details

Where:

  • accounts/views.py:425 index · 1.01 s
  • confs/views.py:509 create_conference · 691 ms
  • starter_packs/views.py:862 share_starter_pack · 528 ms
  • accounts/views.py:28 CountlessPage.__init__ · 335 ms
  • confs/views.py:296 _conference_detail · 323 ms
  • starter_packs/views.py:60 get_editable_pack · 299 ms
  • starter_packs/views.py:856 share_starter_pack · 285 ms
  • starter_packs/views.py:858 share_starter_pack · 280 ms
  • starter_packs/tests.py:192 TestEditStarterPack.test_not_logged_in · 267 ms
  • starter_packs/views.py:729 share_starter_pack · 265 ms

Most affected tests:

  • accounts/tests.py::TestAccountIndexRobots::test_two_facets_are_noindex
  • confs/tests.py::TestCreateConference::test_rejects_end_date_before_start
  • accounts/tests.py::TestSelectedInstance::test_invalid_selected_instance
  • starter_packs/tests.py::TestShareStarterPack::test_order_by_5___alphabetical____4__3__2__1__0__
  • starter_packs/tests.py::TestEditStarterPack::test_not_logged_in
  • accounts/tests.py::TestAccountIndexRobots::test_single_facet_is_indexable
  • confs/tests.py::TestCreateConference::test_form_renders_for_authenticated_user
  • confs/tests.py::TestMigratedLegacyConferences::test_djangoconafrica_page

Documentation

6

Repeated queries (N+1) in the code under test

10 tests run the same query 10+ times, e.g. 45x in test_invalid_selected_instance. N+1 queries slow the tests and production alike.

High Database
10.14 s per run
Fix: Django: fetch related rows in one query with select_related() for foreign keys and prefetch_related() for reverse/many-to-many relations, then lock the count in with assertNumQueries (or pytest-django's django_assert_num_queries). Read the guide
Details

This changes application code, so it speeds up production too; the tests stay as they are.

  • 45x in test_invalid_selected_instance: SELECT "confs_conferencetag"."id", "confs_conferencetag"."name", "confs_conferencetag"."slug", "confs_conferencetag"."icon" FROM "confs_conferencetag" WHERE "confs_conferencetag"."slug" = %s LIMIT ? FOR UPDATE
  • 45x in test_fwd50_date_redirects: SELECT "confs_conferencetag"."id", "confs_conferencetag"."name", "confs_conferencetag"."slug", "confs_conferencetag"."icon" FROM "confs_conferencetag" WHERE "confs_conferencetag"."slug" = %s LIMIT ? FOR UPDATE
  • 45x in test_is_idempotent_and_refreshes_unposted_content: SELECT "confs_conferencetag"."id", "confs_conferencetag"."name", "confs_conferencetag"."slug", "confs_conferencetag"."icon" FROM "confs_conferencetag" WHERE "confs_conferencetag"."slug" = %s LIMIT ? FOR UPDATE
  • 45x in test_two_facets_are_noindex: SELECT "confs_conferencetag"."id", "confs_conferencetag"."name", "confs_conferencetag"."slug", "confs_conferencetag"."icon" FROM "confs_conferencetag" WHERE "confs_conferencetag"."slug" = %s LIMIT ? FOR UPDATE
  • 44x in test_posts_from_yesterday_are_updated: SELECT COUNT(*) AS "__count" FROM "accounts_accountlookup" WHERE UPPER("accounts_accountlookup"."language"::text) LIKE UPPER(%s)

Most affected tests:

  • accounts/tests.py::TestSelectedInstance::test_invalid_selected_instance
  • confs/tests.py::TestMigratedLegacyConferences::test_fwd50_date_redirects
  • confs/tests.py::TestSyncAnnouncements::test_is_idempotent_and_refreshes_unposted_content
  • accounts/tests.py::TestAccountIndexRobots::test_two_facets_are_noindex
  • stats/tests.py::TestStats::test_posts_from_yesterday_are_updated
  • stats/tests.py::TestStats::test_store_daily_stats
  • stats/tests.py::TestStats::test_store_daily_stats_with_accounts
  • confs/tests.py::TestLegacyConferenceDataMigration::test_copies_overlapping_legacy_rows_without_clobbering_existing_data

Documentation

7

Make the test database server skip durability work

Tests spend 40.6s (43%) in the database. Test databases don't need to survive a crash, so the server can skip flushing to disk.

Medium Database
8.12 s per run
Fix: For a PostgreSQL test server (Docker/CI service) start it with -c fsync=off -c synchronous_commit=off -c full_page_writes=off, and put its data directory on tmpfs; for MySQL use --innodb-flush-log-at-trx-commit=0 --skip-log-bin. Never on a server with data you need. Read the guide
Details

Only affects crash safety of the throwaway test server; query behaviour is identical.

Where:

  • confs/tests.py:432 TestLegacyConferenceDataMigration._migrate · 1.33 s
  • confs/migrations/0031_seed_conference_tags.py:14 seed_conference_tags · 761 ms
  • starter_packs/tests.py:397 TestToggleStarterPackAccount.test_toggle_after_limit · 580 ms
  • accounts/views.py:28 CountlessPage.__init__ · 335 ms
  • starter_packs/views.py:60 get_editable_pack · 299 ms
  • starter_packs/views.py:856 share_starter_pack · 285 ms
  • starter_packs/views.py:858 share_starter_pack · 280 ms
  • starter_packs/views.py:729 share_starter_pack · 265 ms
  • stats/models.py:20 store_daily_stats · 252 ms
  • starter_packs/views.py:862 share_starter_pack · 232 ms

Most affected tests:

  • confs/tests.py::TestMigratedLegacyConferences::test_fwd50_date_redirects
  • accounts/tests.py::TestSelectedInstance::test_invalid_selected_instance
  • accounts/tests.py::TestAccountIndexRobots::test_two_facets_are_noindex
  • confs/tests.py::TestSyncAnnouncements::test_is_idempotent_and_refreshes_unposted_content
  • confs/tests.py::TestLegacyConferenceDataMigration::test_copies_overlapping_legacy_rows_without_clobbering_existing_data
  • confs/tests.py::TestLegacyConferenceDataMigration::test_drops_legacy_tables_when_uniques_are_mysql_style_indexes
  • starter_packs/tests.py::TestToggleStarterPackAccount::test_toggle_after_limit
  • accounts/tests.py::TestInstanceIndexingBridgy::test_follows_redirect_and_coerces_null_version

Documentation

8

pytest-xdist workers finish at very different times

The busiest worker ran 31.9s of tests, the least busy 20.3s.

Medium Parallelism
5.83 s per run
Fix: Use --dist worksteal (pytest-xdist 3.2+) so idle workers take tests from busy ones; if you use --dist loadscope/loadfile, split the biggest classes or modules. Read the guide
Details

Documentation

9

pytest takes a long time before the first test runs

Startup takes 8.5s and collection 3.5s on every run, even when you only run one test.

Medium Imports
4.78 s per run
Fix: Set testpaths and norecursedirs (node_modules, .venv, build, docs) so pytest doesn't walk unrelated directories; move heavy imports out of module level in test files and conftest.py into fixtures; check `python -X importtime -m pytest --collect-only -q` for the slowest imports. Read the guide
Details
  • mastodon_auth/tests.py (1.5s)
  • starter_packs/tests.py (338ms)
  • accounts/tests.py (127ms)
  • confs/tests.py (21ms)
  • stats/tests.py (1ms)
  • fedidevs/settings.py (2.1s)
  • debug_toolbar/panels/sql/__init__.py (1.2s)
  • starter_packs/admin.py (755ms)

Documentation

10

Modules are imported while tests run

2.0s of test time is spent importing modules: whichever test imports a heavy module first pays for it, which makes that test look slow (and varies with test order).

Low Imports
586 ms per run
Fix: Find what is imported at the lines listed. Import heavy modules at the top of the test module or in conftest.py so the cost shows up once at collection, or avoid importing them in tests at all (e.g. stub the heavy dependency). Read the guide
Details

Where:

  • confs/views.py:366 <module> · 176 ms
  • accounts/views.py:425 index · 120 ms
  • confs/management/commands/syncannouncements.py:14 Command.handle · 107 ms
  • accounts/tests.py:550 TestAccountIndexRobots.assert_noindex · 82 ms
  • accounts/management/commands/indexer.py:81 Command.handle · 74 ms
  • fedidevs/views.py:11 <module> · 69 ms
  • mastodon_auth/forms.py:27 MastodonLoginForm.clean_instance · 50 ms
  • confs/views.py:296 _conference_detail · 44 ms
  • confs/views.py:509 create_conference · 41 ms
  • confs/og_images.py:246 render_conference_og_image · 39 ms

Most affected tests:

  • accounts/tests.py::TestAccountIndexRobots::test_two_facets_are_noindex
  • accounts/tests.py::TestSelectedInstance::test_invalid_selected_instance
  • confs/tests.py::TestSyncAnnouncements::test_is_idempotent_and_refreshes_unposted_content
  • confs/tests.py::TestMigratedLegacyConferences::test_fwd50_date_redirects
  • confs/tests.py::TestConferenceOgImage::test_management_command_renders_missing_and_skips_current
  • mastodon_auth/tests.py::MastodonLoginFormTests::test_cleans_instance_to_ascii_hostname
  • confs/tests.py::TestMigratedLegacyConferences::test_fwd50_page
  • confs/tests.py::TestCreateConference::test_form_renders_for_authenticated_user
11

Run migrations once, not once per worker

Each of the 4 pytest-xdist workers builds its own test database by running every migration: 25.8s in total, about 6.5s per worker. 19.4s of it repeats work another worker already did.

Medium Migrations
19.35 s per run
Fix: Migrate once and copy the database: let one worker build the test database and have the others create theirs from it as a template (on PostgreSQL, CREATE DATABASE ... TEMPLATE ..., which copies files instead of running migrations). Django's own test runner already does this with --parallel. Read the guide
Details

Every copy is built by the same migrations, so a broken migration still fails the run.

  • {'total': 25.805, 'builds': 4, 'workers': 4, 'per_build': 6.451}

Documentation

Tests

201–308 of 308, slowest first · click a column to sort this page
Test Outcome Duration Setup Call Teardown Mostly Queries
starter_packs/tests.py::TestShareStarterPack::test_order_by_htmx_swaps_account_list
passed 102 ms 1 ms 100 ms 0.35 ms Database 19
5 repeated
fedidevs/tests.py::TestPotatoqDashboard::test_inactive_staff_is_treated_as_logged_out
passed 101 ms 1 ms 100 ms 0.29 ms Database 22
mastodon_auth/tests.py::MastodonAuthCallbackTests::test_pleroma_null_account_fields_are_coerced
passed 100 ms 1 ms 99 ms 0.27 ms Mocking 33
starter_packs/tests.py::TestShareStarterPack::test_api_plain_json
passed 100 ms 0.89 ms 99 ms 0.50 ms Libraries 9
starter_packs/tests.py::TestFollowBg::test_continues_after_other_errors
passed 100 ms 72 ms 28 ms 0.32 ms Database 25
12 repeated
starter_packs/tests.py::TestShareStarterPack::test_api_activitypub_leaves_out_accounts_without_activitypub_id
passed 100 ms 1 ms 98 ms 0.38 ms Database 14
fedidevs/tests.py::TestAccountIndexQueryParams::test_language_index_strips_unknown_params
passed 98 ms 1 ms 97 ms 0.35 ms Libraries –
mastodon_auth/tests.py::MastodonAuthCallbackTests::test_token_response_without_scope_still_logs_in
passed 98 ms 0.99 ms 96 ms 0.26 ms Database 33
starter_packs/tests.py::TestPinAccountInStarterPack::test_stale_pin_toggle_returns_disabled_button
passed 97 ms 1 ms 96 ms 0.37 ms Libraries 26
starter_packs/tests.py::TestOwnerManagement::test_creator_removed_from_owners_loses_access
passed 97 ms 1 ms 95 ms 0.33 ms Database 25
starter_packs/tests.py::TestRemoteFollowStarterPack::test_get_not_allowed
passed 96 ms 1 ms 94 ms 0.30 ms Libraries 5
mastodon_auth/tests.py::MastodonLoginViewTests::test_create_app_failure_without_existing_credentials_errors
passed 95 ms 11 ms 84 ms 0.28 ms Database 7
starter_packs/tests.py::TestCreateStarterPack::test_create_starter_pack_defaults_to_no_languages
passed 95 ms 1 ms 94 ms 0.35 ms Libraries 29
starter_packs/tests.py::TestPinAccountInStarterPack::test_toggle_pin_requires_ownership
passed 94 ms 1 ms 92 ms 0.31 ms Database 25
starter_packs/tests.py::TestRemoteFollowStarterPack::test_share_page_shows_remote_follow_form_when_logged_out
passed 93 ms 1 ms 87 ms 5 ms Libraries 11
starter_packs/tests.py::TestStarterPacks::test_index_page_unknown_language_ignored
passed 93 ms 1 ms 92 ms 0.30 ms Database 15
starter_packs/tests.py::TestPinAccountInStarterPack::test_removing_account_swaps_pin_button_to_disabled
passed 93 ms 0.93 ms 91 ms 0.29 ms Database 35
fedidevs/tests.py::TestRobotsTxt::test_disallows_query_strings_except_googlebot
passed 90 ms 2 ms 88 ms 0.34 ms Libraries –
confs/tests.py::TestMigratedLegacyConferences::test_djangoconus_date_redirects
passed 90 ms 1 ms 88 ms 0.30 ms Database 5
posts/tests.py::TestDjangoConUSLegacyRedirect::test_djangoconus_date_redirects
passed 88 ms 13 ms 74 ms 0.56 ms Database 5
fedidevs/tests.py::TestAnonymousCacheAndCsrf::test_anonymous_post_without_csrf_is_rejected
passed 87 ms 3 ms 83 ms 0.31 ms Libraries 7
confs/tests.py::TestMigratedLegacyConferences::test_djangoconafrica_date_redirects
passed 83 ms 1 ms 82 ms 0.34 ms Libraries 5
starter_packs/tests.py::TestDeleteStarterPack::test_delete_confirmation
passed 83 ms 1 ms 82 ms 0.31 ms Libraries 25
posts/tests.py::TestDjangoConUSLegacyRedirect::test_djangoconus_redirects_to_conference_page
passed 82 ms 1 ms 79 ms 1 ms Libraries 5
mastodon_auth/tests.py::MastodonAuthCallbackTests::test_token_exchange_failure_without_token_errors
passed 80 ms 1 ms 79 ms 0.31 ms Mocking 8
mastodon_auth/tests.py::MastodonAuthCallbackTests::test_missing_code_state_is_logged_at_error
passed 79 ms 1 ms 78 ms 0.34 ms Libraries 5
mastodon_auth/tests.py::MastodonLoginViewTests::test_create_app_rate_limited_reuses_existing_credentials
passed 79 ms 0.99 ms 78 ms 0.27 ms Mocking 8
mastodon_auth/tests.py::MastodonLoginFormTests::test_cleans_instance_to_ascii_hostname
passed 78 ms 24 ms 54 ms 0.30 ms Imports 5
mastodon_auth/tests.py::MastodonAuthCallbackTests::test_unknown_state_is_logged_as_warning_not_error
passed 78 ms 1 ms 76 ms 0.89 ms Libraries 5
confs/tests.py::TestSyncAnnouncements::test_creates_and_links_start_and_end_announcements
passed 77 ms 19 ms 57 ms 0.91 ms Database 13
mastodon_auth/tests.py::MastodonLoginViewTests::test_pleroma_login_forces_consent_flow
passed 74 ms 0.94 ms 70 ms 3 ms Mocking 9
confs/tests.py::TestMigratedLegacyConferences::test_djangoconus_old_url_redirects
passed 74 ms 0.98 ms 72 ms 0.29 ms Libraries 5
mastodon_auth/tests.py::MastodonAuthCallbackTests::test_oauth_access_denied_is_logged_as_warning_not_error
passed 71 ms 1 ms 69 ms 0.28 ms Libraries 5
mastodon_auth/tests.py::MastodonLoginViewTests::test_invalid_instance_redirects_before_http_request
passed 71 ms 1 ms 69 ms 0.31 ms Mocking 5
accounts/tests.py::TestActivityPubActor::test_actor_to_account_defaults_maps_bridged_actor
passed 58 ms 0.80 ms 0.29 ms 57 ms DB schema 1
confs/tests.py::TestSyncAnnouncements::test_leaves_already_posted_announcements_untouched
passed 52 ms 1 ms 51 ms 0.36 ms Database 17
3 repeated
stats/tests.py::TestStarterPackStats::test_starter_pack_stats
passed 49 ms 11 ms 37 ms 0.91 ms Database 25
15 repeated
confs/tests.py::TestSyncAnnouncements::test_variation_is_stable_across_resyncs
passed 49 ms 2 ms 44 ms 2 ms Database 17
4 repeated
announcements/tests.py::TestPostAnnouncements::test_does_not_repost_already_posted
passed 47 ms 21 ms 26 ms 0.31 ms Database 10
confs/tests.py::TestResolveLegacyAccountsAndPosts::test_creates_account_when_neither_url_nor_pair_match
passed 35 ms 13 ms 22 ms 0.31 ms Database 12
starter_packs/tests.py::TestFollowBg::test_stops_after_unauthorized
passed 29 ms 2 ms 20 ms 6 ms Database 10
confs/tests.py::TestSyncAnnouncements::test_uses_one_of_the_message_variations
passed 29 ms 1 ms 27 ms 0.27 ms Database 13
confs/tests.py::TestSyncAnnouncements::test_post_at_uses_conference_timezone
passed 27 ms 5 ms 22 ms 0.33 ms Database 12
starter_packs/tests.py::TestParseHandle::test_invalid_handles
passed 26 ms 17 ms 6 ms 3 ms Database 5
confs/tests.py::TestPostsAfterDatetime::test_aware_start_of_day_in_conference_timezone
passed 25 ms 14 ms 11 ms 0.27 ms Database 6
starter_packs/tests.py::TestParseHandle::test_valid_handles
passed 23 ms 16 ms 5 ms 2 ms pytest 5
confs/tests.py::TestResolveLegacyAccountsAndPosts::test_match_existing_post_by_post_id_and_account
passed 21 ms 3 ms 18 ms 0.31 ms Database 10
confs/tests.py::TestSyncAnnouncements::test_skips_past_and_archived_conferences
passed 21 ms 3 ms 17 ms 0.29 ms Database 9
starter_packs/tests.py::TestGetSubscribeUrl::test_no_subscribe_link
passed 18 ms 14 ms 4 ms 0.25 ms Database 5
announcements/tests.py::TestPostAnnouncements::test_respects_visibility
passed 18 ms 1 ms 15 ms 2 ms Database 10
confs/tests.py::TestResolveLegacyAccountsAndPosts::test_resolve_posts_does_not_scan_or_join_accounts_by_url
passed 18 ms 1 ms 16 ms 0.99 ms Database 9
announcements/tests.py::TestPostAnnouncements::test_skips_when_token_missing
passed 17 ms 0.90 ms 13 ms 3 ms Database 8
stats/tests.py::TestStats::test_all_daily_lang_stats
passed 16 ms 13 ms 3 ms 0.44 ms Database 5
confs/tests.py::TestMigratedLegacyConferences::test_account_kwargs_from_json
passed 15 ms 12 ms 3 ms 0.25 ms Database 5
confs/tests.py::TestSyncAnnouncements::test_skips_pending_conferences
passed 14 ms 0.90 ms 13 ms 0.27 ms Database 8
confs/tests.py::TestMigratedLegacyConferences::test_legacy_tables_were_dropped
passed 14 ms 2 ms 12 ms 0.23 ms Database 6
confs/tests.py::TestResolveLegacyAccountsAndPosts::test_match_existing_account_by_id_and_instance_when_url_differs
passed 14 ms 2 ms 10 ms 2 ms Database 9
confs/tests.py::TestResolveLegacyAccountsAndPosts::test_dedupes_same_url_and_same_pair_in_one_batch
passed 14 ms 1 ms 13 ms 0.27 ms Database 11
confs/tests.py::TestConferenceOgImage::test_signature_changes_with_visible_content
passed 14 ms 4 ms 8 ms 2 ms Database 6
accounts/tests.py::TestCrawlerGotosocial::test_auth_gated_directory_caches_unknown_and_skips_misskey_probe
passed 13 ms 2 ms 10 ms 1 ms Waiting –
confs/tests.py::TestResolveLegacyAccountsAndPosts::test_match_existing_account_by_url_when_ids_differ
passed 13 ms 3 ms 10 ms 0.32 ms Database 8
announcements/tests.py::TestPostAnnouncements::test_posts_only_due_announcements
passed 11 ms 1 ms 10 ms 0.27 ms Database 11
3 repeated
announcements/tests.py::TestPostAnnouncements::test_records_error_and_leaves_row_unposted
passed 11 ms 1 ms 10 ms 0.24 ms Database 10
announcements/tests.py::TestPostAnnouncements::test_dry_run_is_the_default
passed 11 ms 1 ms 9 ms 0.25 ms Database 9
mastodon_auth/tests.py::MastodonLoginFormTests::test_rejects_invalid_idna_hostname
passed 8 ms 1 ms 3 ms 4 ms Database 5
starter_packs/tests.py::TestGetSubscribeUrl::test_webfinger_invalid_json
passed 7 ms 4 ms 3 ms 0.26 ms pytest 5
starter_packs/tests.py::TestGetSubscribeUrl::test_webfinger_network_error
passed 7 ms 1 ms 4 ms 2 ms Database 5
confs/tests.py::TestMigratedLegacyConferences::test_legacy_conferences_were_seeded
passed 7 ms 2 ms 5 ms 0.27 ms Database 6
mastodon_auth/tests.py::IsValidRedirectQueryTests::test_accepts_http_and_https_urls_with_host
passed 7 ms 5 ms 0.88 ms 0.28 ms Unsampled –
accounts/tests.py::TestCrawlerGotosocial::test_open_directory_resolves_missing_actor_uri_via_webfinger
passed 6 ms 1 ms 5 ms 0.26 ms Unsampled –
confs/tests.py::TestPostsAfterDatetime::test_none_when_unset
passed 5 ms 0.99 ms 4 ms 0.77 ms Database 6
accounts/tests.py::TestCrawlerGotosocial::test_open_directory_on_non_gotosocial_leaves_uri_missing
passed 4 ms 1 ms 3 ms 0.27 ms Unsampled –
accounts/tests.py::TestJobTimeLimits::test_daily_job_has_no_time_limit
passed 4 ms 3 ms 0.69 ms 0.48 ms Libraries –
starter_packs/tests.py::TestGetSubscribeUrl::test_rejects_template_without_uri_placeholder
passed 4 ms 1 ms 3 ms 0.26 ms Database 5
starter_packs/tests.py::TestGetSubscribeUrl::test_rejects_non_https_template
passed 4 ms 1 ms 3 ms 0.23 ms Unsampled 5
starter_packs/tests.py::TestGetSubscribeUrl::test_returns_filled_template
passed 4 ms 1 ms 2 ms 0.37 ms Unsampled 5
starter_packs/tests.py::TestGetSubscribeUrl::test_webfinger_404
passed 4 ms 1 ms 3 ms 0.23 ms Database 5
mastodon_auth/tests.py::RegisterAppTests::test_raises_with_status_code_on_429
passed 4 ms 0.89 ms 3 ms 0.26 ms Mocking –
accounts/tests.py::TestActivityPubActor::test_media_and_profile_url_variants
passed 4 ms 3 ms 0.46 ms 0.31 ms pytest –
accounts/tests.py::TestJobTimeLimits::test_hourly_job_keeps_the_default_time_limit
passed 3 ms 1 ms 0.49 ms 1 ms pytest –
accounts/tests.py::TestMisskeyAdapter::test_emojis_dict_converted_to_list
passed 3 ms 2 ms 0.39 ms 0.23 ms pytest –
mastodon_auth/tests.py::RegisterAppTests::test_raises_when_credentials_missing_from_body
passed 3 ms 1 ms 1 ms 0.20 ms Unsampled –
mastodon_auth/tests.py::RegisterAppTests::test_returns_credentials_on_200
passed 2 ms 1 ms 1 ms 0.30 ms Unsampled –
accounts/tests.py::TestParseDiscoverable::test_mastodon_null_or_absent
passed 2 ms 2 ms 0.42 ms 0.23 ms Unsampled –
accounts/tests.py::TestParseDiscoverable::test_top_level_false_wins_over_nested
passed 2 ms 1 ms 0.24 ms 0.97 ms Libraries –
mastodon_auth/tests.py::RegisterAppTests::test_raises_with_none_status_on_network_error
passed 2 ms 1 ms 0.77 ms 0.34 ms Unsampled –
accounts/tests.py::TestParseDiscoverable::test_mastodon_top_level
passed 2 ms 1 ms 0.24 ms 0.70 ms pytest –
accounts/tests.py::TestMisskeyAdapter::test_maps_core_fields
passed 2 ms 2 ms 0.30 ms 0.21 ms Unsampled –
mastodon_auth/tests.py::AuthorizeUrlTests::test_builds_code_flow_url_without_junk_params
passed 2 ms 1 ms 0.41 ms 0.34 ms pytest –
accounts/tests.py::TestActivityPubActor::test_actor_to_account_defaults_bot_and_locked
passed 2 ms 1 ms 0.46 ms 0.30 ms Unsampled –
accounts/tests.py::TestMisskeyAdapter::test_missing_avatar_and_banner_are_empty_strings
passed 2 ms 1 ms 0.29 ms 0.22 ms Unsampled –
mastodon_auth/tests.py::AuthorizeUrlTests::test_force_login_included_only_when_requested
passed 2 ms 1 ms 0.37 ms 0.48 ms Libraries –
accounts/tests.py::TestMisskeyAdapter::test_missing_required_fields_returns_none
passed 2 ms 1 ms 0.42 ms 0.24 ms Unsampled –
accounts/tests.py::TestMisskeyAdapter::test_emojis_missing_returns_empty_list
passed 2 ms 1 ms 0.25 ms 0.57 ms Unsampled –
mastodon_auth/tests.py::ParseDtTests::test_naive_datetime_object_is_made_aware
passed 2 ms 1 ms 0.44 ms 0.34 ms Unsampled –
accounts/tests.py::TestMisskeyAdapter::test_falls_back_to_constructed_url_when_local
passed 2 ms 1 ms 0.47 ms 0.21 ms Libraries –
accounts/tests.py::TestMisskeyApi::test_is_misskey_family
passed 2 ms 1 ms 0.22 ms 0.23 ms pytest –
accounts/tests.py::TestParseDiscoverable::test_pleroma_nested_in_source
passed 2 ms 1 ms 0.36 ms 0.27 ms Unsampled –
accounts/tests.py::TestMisskeyAdapter::test_missing_display_name_falls_back_to_username
passed 2 ms 1 ms 0.33 ms 0.22 ms Libraries –
accounts/tests.py::TestMisskeyApi::test_build_miauth_url
passed 2 ms 1 ms 0.30 ms 0.22 ms Unsampled –
mastodon_auth/tests.py::ParseDtTests::test_aware_datetime_object_passes_through
passed 2 ms 1 ms 0.29 ms 0.22 ms Unsampled –
mastodon_auth/tests.py::ParseDtTests::test_date_object_becomes_aware_midnight
passed 2 ms 1 ms 0.34 ms 0.25 ms pytest –
accounts/tests.py::TestMisskeyAdapter::test_noindex_flips_discoverable
passed 2 ms 0.98 ms 0.26 ms 0.30 ms Unsampled –
mastodon_auth/tests.py::ParseDtTests::test_none
passed 2 ms 1.00 ms 0.24 ms 0.27 ms Unsampled –
mastodon_auth/tests.py::ParseDtTests::test_date_only_string_becomes_aware_midnight
passed 1 ms 0.94 ms 0.32 ms 0.23 ms Unsampled –
accounts/tests.py::TestMisskeyAdapter::test_remote_user_acct_includes_host
passed 1 ms 0.89 ms 0.24 ms 0.27 ms pytest –
mastodon_auth/tests.py::ParseDtTests::test_iso_string_with_offset
passed 1 ms 0.91 ms 0.26 ms 0.20 ms Unsampled –
mastodon_auth/tests.py::AuthorizeUrlTests::test_is_pleroma
passed 1 ms 0.86 ms 0.23 ms 0.26 ms pytest –

Slowest fixtures

Exact setup time across the session
Fixture Scope Calls Total Max
_django_setup_unittest class 76 25.84 s 6.59 s
django_db_setup session 4 25.81 s 6.59 s
_unittest_setUpClass_fixture_TestSelectedInstance class 1 213 ms 213 ms
_unittest_setUpClass_fixture_TestShareStarterPack class 3 209 ms 85 ms
_unittest_setUpClass_fixture_TestStarterPacks class 2 99 ms 54 ms
_unittest_setUpClass_fixture_TestFollowStarterPack class 2 94 ms 50 ms
_unittest_setUpClass_fixture_TestOwnerManagement class 2 88 ms 47 ms
_unittest_setUpClass_fixture_TestPinAccountInStarterPack class 2 85 ms 46 ms
_unittest_setUpClass_fixture_TestEditStarterPackAccounts class 2 76 ms 47 ms
_unittest_setUpClass_fixture_TestWebfingerBackfill class 1 72 ms 72 ms
_unittest_setUpClass_fixture_TestFollowBg class 1 70 ms 70 ms
_unittest_setUpClass_fixture_TestRemoteFollowStarterPack class 2 46 ms 23 ms
_unittest_setUpClass_fixture_TestAddAccountsSearch class 1 42 ms 42 ms
_unittest_setUpClass_fixture_TestConferenceOgImage class 1 35 ms 35 ms
_unittest_setUpClass_fixture_TestToggleStarterPackAccount class 1 35 ms 35 ms