Fixed #33633 -- Skipped some test_utils tests on databases that don't support transactions.
diff --git a/tests/test_utils/test_testcase.py b/tests/test_utils/test_testcase.py
index ca142186a1950..eb6ca80036936 100644
--- a/tests/test_utils/test_testcase.py
+++ b/tests/test_utils/test_testcase.py
@@ -41,6 +41,7 @@ def test_disallowed_database_queries(self):
         with self.assertRaisesMessage(DatabaseOperationForbidden, message):
             Car.objects.using("other").get()
 
+    @skipUnlessDBFeature("supports_transactions")
     def test_reset_sequences(self):
         old_reset_sequences = self.reset_sequences
         self.reset_sequences = True
@@ -61,6 +62,10 @@ def inner(self):
     return inner
 
 
+# On databases with no transaction support (for instance, MySQL with the MyISAM
+# engine), setUpTestData() is called before each test, so there is no need to
+# clone class level test data.
+@skipUnlessDBFeature("supports_transactions")
 class TestDataTests(TestCase):
     # setUpTestData re-assignment are also wrapped in TestData.
     jim_douglas = None
diff --git a/tests/test_utils/tests.py b/tests/test_utils/tests.py
index 6a4467fdcb963..fb19d6e464829 100644
--- a/tests/test_utils/tests.py
+++ b/tests/test_utils/tests.py
@@ -2126,6 +2126,7 @@ def test_override_staticfiles_dirs(self):
             self.assertIn(expected_location, finder.locations)
 
 
+@skipUnlessDBFeature("supports_transactions")
 class TestBadSetUpTestData(TestCase):
     """
     An exception in setUpTestData() shouldn't leak a transaction which would
@@ -2160,6 +2161,7 @@ def test_failure_in_setUpTestData_should_rollback_transaction(self):
         self.assertFalse(self._in_atomic_block)
 
 
+@skipUnlessDBFeature("supports_transactions")
 class CaptureOnCommitCallbacksTests(TestCase):
     databases = {"default", "other"}
     callback_called = False

The testing framework has some different behaviors for backends not supporting transactions. Mostly in `TestCase._fixture_setup` and `TestCase.setUpClass`. Skip them.