Frequently got ``TransactionManagementError``
Closed this issue · 6 comments
I used this in tests, there's almost 50 unit tests now. But when running test with nosetests command, sometimes I got TransactionManagementError
. Full traceback is listed below:
======================================================================
ERROR: test suite for <class 'trades.tests.test_pingpp.TestPingpp'>
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/local/Cellar/numpy/1.11.0/libexec/nose/lib/python2.7/site-packages/nose/suite.py", line 209, in run
self.setUp()
File "/usr/local/Cellar/numpy/1.11.0/libexec/nose/lib/python2.7/site-packages/nose/suite.py", line 292, in setUp
self.setupContext(ancestor)
File "/usr/local/Cellar/numpy/1.11.0/libexec/nose/lib/python2.7/site-packages/nose/suite.py", line 315, in setupContext
try_run(context, names)
File "/usr/local/Cellar/numpy/1.11.0/libexec/nose/lib/python2.7/site-packages/nose/util.py", line 471, in try_run
return func()
File "/Users/windrunner/bxzz/phantasm/phantasm/tests/base.py", line 43, in setUpClass
AutoFixture(model).create(10)
File "/usr/local/lib/python2.7/site-packages/autofixture/base.py", line 550, in create
instance = self.create_one(commit=commit, **kwargs)
File "/usr/local/lib/python2.7/site-packages/autofixture/base.py", line 498, in create_one
process = self.check_constraints(instance)
File "/usr/local/lib/python2.7/site-packages/autofixture/base.py", line 454, in check_constraints
constraint(self.model, instance)
File "/usr/local/lib/python2.7/site-packages/autofixture/constraints.py", line 37, in unique_constraint
if model._default_manager.filter(**check).exists():
File "/usr/local/lib/python2.7/site-packages/django/db/models/query.py", line 586, in exists
return self.query.has_results(using=self.db)
File "/usr/local/lib/python2.7/site-packages/django/db/models/sql/query.py", line 484, in has_results
return compiler.has_results()
File "/usr/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 811, in has_results
return bool(self.execute_sql(SINGLE))
File "/usr/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 840, in execute_sql
cursor.execute(sql, params)
File "/usr/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 59, in execute
self.db.validate_no_broken_transaction()
File "/usr/local/lib/python2.7/site-packages/django/db/backends/base/base.py", line 327, in validate_no_broken_transaction
"An error occurred in the current transaction. You can't "
TransactionManagementError: An error occurred in the current transaction. You can't execute queries until the end of the 'atomic' block.
It's hard to tell without any further context. I sometimes get this error message for the first query of all following tests if one previous test fails. So this might not be a problem with django-autofixture, but surfacing there since autofixture might be the first library that executes a query in your test.
Can you try to run the tests just with one single test case and see if the traceback is more meaningful?
@gregmuellegger I go this error several times, usually there's no error with my tests. I run tests with django-nose, related configs are:
# django-nose
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
NOSE_ARGS = ['--with-spec', '--spec-color']
In my base test class, I defined some serUpClass
code and tearDownClass
code which might matter:
class BaseTestCase(TestCase):
@classmethod
def setUpClass(cls):
super(BaseTestCase, cls).setUpClass()
for model in cls.models:
AutoFixture(model).create(10)
@classmethod
def tearDownClass(cls):
for model in cls.models:
model.objects.all().delete()
super(ManagerCase, cls).tearDownClass()
BTW, I'm using django 1.8.11 and django_nose 1.4.3 and autofixture 0.12.0.
Can you reproduce the same error if you run only one testcase?
@gregmuellegger Sorry I cannot, it frequently that time, but be rarely later. And I haven't seen for a long time now. When I comes, I just need to rerun the tests again or twice, it would disappear.
But I almost not change my tests, only add a few new tests sometime.
Hm, randomly failing tests are a strange thing. Let's see if it comes back :) all thumbs pressed.
Yeah, and hard to debug. Maybe there's some race or database destroying issue, i guess.