如何测试访问数据库的其他线程

时间:2015-07-27 12:04:06

标签: 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()

控制台结果:

[<MyModel object>, <MyModel object>, <MyModel object> ... ]
[]

所以我们得到第一个调用,但是一旦我们进入另一个线程,它就不再使用测试数据库。

我看了看:Django: using same test database in a separate thread 并尝试将相同的数据库用于&#34; NAME&#34;和&#34; TEST_NAME&#34;但它对我不起作用

即使他们正在访问db,我还能做些什么来测试我的线程?

1 个答案:

答案 0 :(得分:2)

Django的TestCase在一个事务中运行每个测试类。任何更改都不会提交,因此其他线程无法读取这些更改的效果。

解决方案是使用TransactionTestCase。它将以默认的自动提交模式运行查询,您的更改将立即可供其他线程使用。