Tests / announcements/tests.py
TestPostAnnouncements::test_does_not_repost_already_posted
First seen 3 weeks ago in 0c23747
CI
github-actions:test
11 runs
Average
66 ms
median 62 ms
max 101 ms
max 101 ms
Phases
Setup 21 ms
Call 44 ms
Teardown 0.37 ms
Categories
Database 39 ms
Test code 0.62 ms
Password hashing 0.21 ms
App code 0.09 ms
Other (Libraries, Imports, pytest, Mocking, ...) 26 ms
10 database queries per run
Needs 581 KB of memory (max 600 KB)
Duration per run
Where the time goes
Latest run in ci:github-actions:test, 7 hours ago ·
open run
setup19 ms30.9%
TestCase.setUpClassdjango/test/testcases.py:1426 cls.cls_atomics = cls._enter_atomics()18 ms30.2%
TestCase._enter_atomicsdjango/test/testcases.py:139918 ms30.2%
Atomic.__enter__django/db/transaction.py:21018 ms30.2%
BaseDatabaseWrapper.get_autocommitdjango/db/backends/base/base.py:45418 ms30.2%
SimpleTestCase.ensure_connection_patch_method.<locals>.patched_ensure_connectiondjango/test/testcases.py:30418 ms30.2%
async_unsafe.<locals>.decorator.<locals>.innerdjango/utils/asyncio.py:2618 ms30.2%
BaseDatabaseWrapper.ensure_connectiondjango/db/backends/base/base.py:27918 ms30.2%
async_unsafe.<locals>.decorator.<locals>.innerdjango/utils/asyncio.py:2618 ms30.2%
BaseDatabaseWrapper.connectdjango/db/backends/base/base.py:25618 ms30.2%
async_unsafe.<locals>.decorator.<locals>.innerdjango/utils/asyncio.py:2618 ms30.2%
DatabaseWrapper.get_new_connectiondjango/db/backends/postgresql/base.py:34518 ms30.2%
Connection.connectpsycopg/connection.py:10918 ms30.2%
wait_connpsycopg/waiting.py:14517 ms28.1%
BaseConnection._connect_genpsycopg/_connection_base.py:43917 ms28.1%
wait_connpsycopg/waiting.py:1411 ms2.1%
EpollSelector.select<stdlib>/selectors.py:4521 ms2.1%
call42 ms68.7%
TestPostAnnouncements.test_does_not_repost_already_postedannouncements/tests.py:76 status_post = self._run_at(dt.datetime(2026, 6, 3, 20, 0, tzinfo=dt.UTC))23 ms37.4%
TestPostAnnouncements._run_atannouncements/tests.py:42 call_command("postannouncements", *([] if dry_run else ["--no-dry-run"]))13 ms21.8%
call_commanddjango/core/management/__init__.py:19511 ms18.7%
RichCommand.executedjango_rich/management/__init__.py:3411 ms18.7%
BaseCommand.executedjango/core/management/base.py:46611 ms18.7%
Command.handleannouncements/management/commands/postannouncements.py:64 announcement.save(update_fields=["posted_at", "post_url", "error"])10 ms15.6%
Model.savedjango/db/models/base.py:90410 ms15.6%
Model.save_basedjango/db/models/base.py:99610 ms15.6%
Model._save_tabledjango/db/models/base.py:114010 ms15.6%
Model._do_updatedjango/db/models/base.py:124410 ms15.6%
QuerySet._updatedjango/db/models/query.py:144810 ms15.6%
SQLUpdateCompiler.execute_returning_sqldjango/db/models/sql/compiler.py:215010 ms15.6%
SQLUpdateCompiler.execute_sqldjango/db/models/sql/compiler.py:212110 ms15.6%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:162510 ms15.6%
CursorWrapper.executedjango/db/backends/utils.py:7910 ms15.6%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:9210 ms15.6%
CursorWrapper._executedjango/db/backends/utils.py:10510 ms15.6%
Cursor.executepsycopg/cursor.py:11310 ms15.6%
Connection.waitpsycopg/connection.py:49510 ms15.6%
BaseCursor._execute_genpsycopg/_cursor_base.py:2068 ms12.5%
BaseCursor._maybe_prepare_genpsycopg/_cursor_base.py:2868 ms12.5%
ClientCursorMixin._execute_sendpsycopg/client_cursor.py:788 ms12.5%
BaseCursor._execute_genpsycopg/_cursor_base.py:2052 ms3.1%
BaseCursor._convert_querypsycopg/_cursor_base.py:4652 ms3.1%
PostgresClientQuery.convertpsycopg/_queries.py:2842 ms3.1%
Command.handleannouncements/management/commands/postannouncements.py:26 due = list(Announcement.objects.filter(posted_at__isnull=True, post_at__lte=timezone.now()))2 ms3.1%
QuerySet.__iter__django/db/models/query.py:4392 ms3.1%
QuerySet._fetch_alldjango/db/models/query.py:22622 ms3.1%
ModelIterable.__iter__django/db/models/query.py:1032 ms3.1%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16252 ms3.1%
CursorWrapper.executedjango/db/backends/utils.py:792 ms3.1%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms3.1%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms3.1%
Cursor.executepsycopg/cursor.py:1132 ms3.1%
Connection.waitpsycopg/connection.py:4952 ms3.1%
BaseCursor._execute_genpsycopg/_cursor_base.py:2062 ms3.1%
BaseCursor._maybe_prepare_genpsycopg/_cursor_base.py:2862 ms3.1%
ClientCursorMixin._execute_sendpsycopg/client_cursor.py:782 ms3.1%
call_commanddjango/core/management/__init__.py:1222 ms3.1%
BaseCommand.create_parserdjango/core/management/base.py:3172 ms3.1%
BaseCommand.add_base_argumentdjango/core/management/base.py:3952 ms3.1%
TestPostAnnouncements._run_atannouncements/tests.py:34 mock.patch("announcements.management.commands.postannouncements.timezone.now", return_value=moment),8 ms12.5%
_patch.__enter__<stdlib>/unittest/mock.py:14946 ms9.4%
resolve_name<stdlib>/pkgutil.py:4816 ms9.4%
import_module<stdlib>/importlib/__init__.py:886 ms9.4%
_gcd_import<frozen importlib._bootstrap>:13896 ms9.4%
_find_and_load<frozen importlib._bootstrap>:13536 ms9.4%
_find_and_load_unlocked<frozen importlib._bootstrap>:12496 ms9.4%
_load_unlocked<frozen importlib._bootstrap>:8576 ms9.4%
_LoaderBasics.exec_module<frozen importlib._bootstrap_external>:7476 ms9.4%
SourceLoader.get_code<frozen importlib._bootstrap_external>:8944 ms6.2%
SourceFileLoader._cache_bytecode<frozen importlib._bootstrap_external>:9504 ms6.2%
SourceFileLoader.set_data<frozen importlib._bootstrap_external>:9754 ms6.2%
_write_atomic<frozen importlib._bootstrap_external>:2114 ms6.2%
SourceLoader.get_code<frozen importlib._bootstrap_external>:8812 ms3.1%
SourceLoader.source_to_code<frozen importlib._bootstrap_external>:8102 ms3.1%
_call_with_frames_removed<frozen importlib._bootstrap>:4912 ms3.1%
TestPostAnnouncements._run_atannouncements/tests.py:35 mock.patch("announcements.management.commands.postannouncements.Mastodon") as mastodon_cls,2 ms3.1%
patch<stdlib>/unittest/mock.py:18512 ms3.1%
TestPostAnnouncements.setUpannouncements/tests.py:18 self.due = baker.make(8 ms12.5%
makemodel_bakery/baker.py:1758 ms12.5%
Baker.makemodel_bakery/baker.py:4548 ms12.5%
Baker._makemodel_bakery/baker.py:5428 ms12.5%
Baker.instancemodel_bakery/baker.py:6598 ms12.5%
Model.savedjango/db/models/base.py:9048 ms12.5%
Model.save_basedjango/db/models/base.py:9968 ms12.5%
Model._save_tabledjango/db/models/base.py:11998 ms12.5%
Model._do_insertdjango/db/models/base.py:12518 ms12.5%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:878 ms12.5%
QuerySet._insertdjango/db/models/query.py:21418 ms12.5%
SQLInsertCompiler.execute_sqldjango/db/models/sql/compiler.py:19368 ms12.5%
CursorWrapper.executedjango/db/backends/utils.py:798 ms12.5%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:928 ms12.5%
CursorWrapper._executedjango/db/backends/utils.py:1058 ms12.5%
Cursor.executepsycopg/cursor.py:1138 ms12.5%
Connection.waitpsycopg/connection.py:4958 ms12.5%
TransactionTestCase._pre_setupdjango/test/testcases.py:1167 cls._fixture_setup()6 ms9.4%
TestCase._fixture_setupdjango/test/testcases.py:14816 ms9.4%
TestCase._enter_atomicsdjango/test/testcases.py:13996 ms9.4%
Atomic.__enter__django/db/transaction.py:2236 ms9.4%
async_unsafe.<locals>.decorator.<locals>.innerdjango/utils/asyncio.py:266 ms9.4%
BaseDatabaseWrapper.savepointdjango/db/backends/base/base.py:4006 ms9.4%
BaseDatabaseWrapper._savepointdjango/db/backends/base/base.py:3676 ms9.4%
CursorWrapper.executedjango/db/backends/utils.py:796 ms9.4%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:926 ms9.4%
CursorWrapper._executedjango/db/backends/utils.py:1036 ms9.4%
Cursor.executepsycopg/cursor.py:1136 ms9.4%
Connection.waitpsycopg/connection.py:4956 ms9.4%
TestPostAnnouncements.test_does_not_repost_already_postedannouncements/tests.py:73 self.due.save()4 ms6.2%
Model.savedjango/db/models/base.py:9044 ms6.2%
Model.save_basedjango/db/models/base.py:9964 ms6.2%
Model._save_tabledjango/db/models/base.py:11404 ms6.2%
Model._do_updatedjango/db/models/base.py:12444 ms6.2%
QuerySet._updatedjango/db/models/query.py:14484 ms6.2%
SQLUpdateCompiler.execute_returning_sqldjango/db/models/sql/compiler.py:21504 ms6.2%
SQLUpdateCompiler.execute_sqldjango/db/models/sql/compiler.py:21214 ms6.2%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16254 ms6.2%
CursorWrapper.executedjango/db/backends/utils.py:794 ms6.2%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:924 ms6.2%
CursorWrapper._executedjango/db/backends/utils.py:1054 ms6.2%
Cursor.executepsycopg/cursor.py:1134 ms6.2%
Connection.waitpsycopg/connection.py:4954 ms6.2%
BaseCursor._execute_genpsycopg/_cursor_base.py:2062 ms3.1%
BaseCursor._maybe_prepare_genpsycopg/_cursor_base.py:2862 ms3.1%
ClientCursorMixin._execute_sendpsycopg/client_cursor.py:782 ms3.1%
TestPostAnnouncements.setUpannouncements/tests.py:25 self.not_due = baker.make(2 ms3.1%
makemodel_bakery/baker.py:1752 ms3.1%
Baker.makemodel_bakery/baker.py:4542 ms3.1%
Baker._makemodel_bakery/baker.py:5422 ms3.1%
Baker.instancemodel_bakery/baker.py:6592 ms3.1%
Model.savedjango/db/models/base.py:9042 ms3.1%
Model.save_basedjango/db/models/base.py:9962 ms3.1%
Model._save_tabledjango/db/models/base.py:11992 ms3.1%
Model._do_insertdjango/db/models/base.py:12512 ms3.1%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:872 ms3.1%
QuerySet._insertdjango/db/models/query.py:21412 ms3.1%
SQLInsertCompiler.execute_sqldjango/db/models/sql/compiler.py:19362 ms3.1%
CursorWrapper.executedjango/db/backends/utils.py:792 ms3.1%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms3.1%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms3.1%
Cursor.executepsycopg/cursor.py:1132 ms3.1%
Connection.waitpsycopg/connection.py:4952 ms3.1%
Estimated from 66 samples; phase durations are exact. Frames from pytest and pluggy are
hidden
.
Hot lines in your code
|
announcements/management/commands/postannouncements.py:64
announcement.save(update_fields=["posted_at", "post_url", "error"])
Command.handle
· Database
|
10 ms |
|
announcements/tests.py:18
self.due = baker.make(
TestPostAnnouncements.setUp
· Database
|
8 ms |
|
announcements/tests.py:34
mock.patch("announcements.management.commands.postannouncements.timezone.now", return_value=moment),
TestPostAnnouncements._run_at
· Imports
|
8 ms |
|
announcements/tests.py:73
self.due.save()
TestPostAnnouncements.test_does_not_repost_already_posted
· Database
|
4 ms |
|
announcements/tests.py:25
self.not_due = baker.make(
TestPostAnnouncements.setUp
· Database
|
2 ms |
|
announcements/tests.py:35
mock.patch("announcements.management.commands.postannouncements.Mastodon") as mastodon_cls,
TestPostAnnouncements._run_at
· Mocking
|
2 ms |
|
announcements/tests.py:42
call_command("postannouncements", *([] if dry_run else ["--no-dry-run"]))
TestPostAnnouncements._run_at
· Libraries
|
2 ms |
|
announcements/management/commands/postannouncements.py:26
due = list(Announcement.objects.filter(posted_at__isnull=True, post_at__lte=timezone.now()))
Command.handle
· Database
|
2 ms |
Fixtures
Exact setup time| _unittest_setUpClass_fixture_TestPostAnnouncements class | 16 ms |
| _live_server_helper function | 1 ms |
| _django_setup_unittest class | 0.42 ms |
| _template_string_if_invalid_marker function | 0.07 ms |
| _django_db_marker function | 0.06 ms |
| _django_isolate_apps function | 0.05 ms |
| _dj_autoclear_mailbox function | 0.05 ms |
| _django_set_urlconf function | 0.05 ms |
| _django_clear_site_cache function | 0.04 ms |
| monkeypatch function | 0.03 ms |
Database
10 queries · 17 msNo repeated queries.
Biggest pieces of work
|
call test body
announcements/tests.py:76
|
27 ms |
|
setup setUpClass
django/test/testcases.py:1426
|
18 ms |
|
call setUp
announcements/tests.py:18
|
10 ms |
|
call _pre_setup
django/test/testcases.py:1167
|
6 ms |
| setup pytest internals | 0.43 ms |
Reliability
12 results · 0 CI failures · 0 local failuresThis test hasn't failed recently.
History
Latest 12 results, oldest first in the strip| When | Environment | Outcome | Duration | |
|---|---|---|---|---|
| 7 hours ago | CI github-actions:test | passed | 61 ms | Profile |
| 16 hours ago | CI github-actions:test | passed | 53 ms | Profile |
| 22 hours ago | CI github-actions:test | passed | 46 ms | Profile |
| 1 week, 5 days ago | CI github-actions:test | passed | 47 ms | Profile |
| 2 weeks, 2 days ago | CI github-actions:test | passed | 79 ms | Profile |
| 2 weeks, 2 days ago | CI github-actions:test | passed | 62 ms | Profile |
| 2 weeks, 4 days ago | CI github-actions:test | passed | 83 ms | Profile |
| 3 weeks ago | CI github-actions:test | passed | 36 ms | Profile |
| 3 weeks ago | CI github-actions:test | passed | 73 ms | Profile |
| 3 weeks ago | CI github-actions:test | passed | 101 ms | Profile |
| 3 weeks ago | CI github-actions:test | passed | 83 ms | Profile |
| 3 weeks ago | CI github-actions:test | passed | 30 ms | Run |