【问题标题】:Django `TransactionTestCase` test cases with AWS RDS are very slow使用 AWS RDS 的 Django `TransactionTestCase` 测试用例非常慢
【发布时间】:2017-11-16 06:47:59
【问题描述】:
我正在尝试设置 Django 测试以使用 AWS RDS 作为 Postgres 数据库后端(测试在 Heroku CI 上执行,不允许您创建和销毁测试数据库)。测试正在运行,但使用 TransactionTestCase 的测试用例非常慢(有时长达一分钟,而不使用 RDS 时只有几分之一秒)。我在与我的 Heroku 部署(欧盟/爱尔兰)相同的区域使用 RDS,并且基于 TestCase 类的测试用例照常运行。
有什么想法可能导致这种情况吗?
【问题讨论】:
标签:
django
unit-testing
amazon-web-services
heroku
amazon-rds
【解决方案1】:
TransactionTestCase 与TestCase 相比非常慢。我已经开始从TestCase 继承,然后将每个 celery 和 db 调用块放入 transaction.atomic(): 块中,并在该块之外进行查询和断言。您获得TestCase 的速度。
例子:
with transaction.atomic():
Foo.objects.create(...)
Bar.objects.get_or_create(...)
self.assertEqual(Foo.objects.count(), 1)
self.assertTrue(Bar.objects.first().trueproperty)