使用 AWS RDS 的 Django `TransactionTestCase` 测试用例非常慢
Posted
技术标签:
【中文标题】使用 AWS RDS 的 Django `TransactionTestCase` 测试用例非常慢【英文标题】:Django `TransactionTestCase` test cases with AWS RDS are very slow 【发布时间】:2017-11-16 06:47:59 【问题描述】:我正在尝试设置 Django 测试以使用 AWS RDS 作为 Postgres 数据库后端(测试在 Heroku CI 上执行,不允许您创建和销毁测试数据库)。测试正在运行,但使用 TransactionTestCase
的测试用例非常慢(有时长达一分钟,而不使用 RDS 时只有几分之一秒)。我在与我的 Heroku 部署(欧盟/爱尔兰)相同的区域使用 RDS,并且基于 TestCase
类的测试用例照常运行。
有什么想法可能导致这种情况吗?
【问题讨论】:
【参考方案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)
【讨论】:
以上是关于使用 AWS RDS 的 Django `TransactionTestCase` 测试用例非常慢的主要内容,如果未能解决你的问题,请参考以下文章
Django/PostgreSQL 全文搜索 - 在 AWS RDS PostgreSQL 上使用 SearchVector 与 SearchVectorField 时的不同搜索结果
如何通过 eb cli (django postgres) 迁移 AWS RDS 数据库?