Python 如何测试访问数据库的其他线程
django在测试期间使用的数据库似乎没有与其他线程共享 例如: 在TestCase类中:Python 如何测试访问数据库的其他线程,python,django,multithreading,unit-testing,Python,Django,Multithreading,Unit Testing,django在测试期间使用的数据库似乎没有与其他线程共享 例如: 在TestCase类中: def my_test(self): print(MyModel.objects.all()) my_function() 在我的课堂上: def worker(): print(MyModel.objects.all()) def my_function(): thread = Thread(target=worker) thread.start() 控制台
def my_test(self):
print(MyModel.objects.all())
my_function()
在我的课堂上:
def worker():
print(MyModel.objects.all())
def my_function():
thread = Thread(target=worker)
thread.start()
控制台结果:
[<MyModel object>, <MyModel object>, <MyModel object> ... ]
[]
[,…]
[]
所以我们得到了第一个调用,但是一旦我们进入另一个线程,它就不再使用测试数据库了
我看了看:
并尝试将同一个db用于“NAME”和“TEST_NAME”,但对我来说不起作用
即使线程正在访问db,我也可以做些什么来测试它们呢?Django的
TestCase
在一个事务中运行每个测试类。没有提交任何更改,因此其他线程无法读取这些更改的效果
解决方案是使用TransactionTestCase
。它将在默认的自动提交模式下运行查询,您的更改将立即提供给其他线程