python - Django 测试耗时 20 分钟以上(有时)
问题描述
我有一个神秘的测试,它运行的时间比它应该运行的要长得多。我已经尝试调试它一段时间了,但我已经没有创造力了。该测试确实创建了很多数据库记录,但仍然只有几百条,我可以理解它需要一分钟,但绝对不是 20 分钟。以下是由于某种原因而窒息的相关代码:
from rest_framework.test import APITestCase
class MyTest(APITestCase, ...):
...
def setUp(self):
self.setup_questions()
def setup_questions(self):
question_levels = [
QuestionLevelFactory.create(title="Major", ...),
QuestionLevelFactory.create(title="Minor", ...),
QuestionLevelFactory.create(title="Recommended", ...)
]
questionnaire1 = QuestionnaireFactory.create(...)
questionnaire2 = QuestionnaireFactory.create(...)
possible_answer_set = PossibleAnswerSetFactory.create(...)
for question_level in question_levels:
if question_level.title == "Recommended":
questionnaire = questionnaire2
counter = 25
else:
questionnaire = questionnaire1
counter = 100
for i in range(counter):
if i <= 97:
question = QuestionFactory.create(
level_object=question_level, possible_answer_set=possible_answer_set,
questionnaire=questionnaire
)
else:
question = QuestionFactory.create(
level_object=question_level, possible_answer_set=possible_answer_set,
questionnaire=questionnaire, code="{}-{}".format(question_level.title, i)
)
if i < 95:
AnswerFactory.create(
question=question, assessment=self.assessment, value="yes"
)
elif i <= 97:
AnswerFactory.create(
question=question, assessment=self.assessment, value="not_applicable"
)
else:
AnswerFactory.create(
question=question, assessment=self.assessment, value="no",
justification="{} {} justification".format(question_level.title, i)
)
请注意,当question_levels
按此顺序列出时,测试仅在处理“次要”级别时开始阻塞。第一个(“主要”)的处理速度要快得多。当我切换 Minor 和 Major 时,事情从一开始就很慢。
这是我最近才开始进行的一个遗留项目,所以我不知道幕后究竟会发生什么,但老实说,我无法想象会导致这种奇怪行为的任何事情。
我在 Docker 容器中运行我的 Django 应用程序,并在另一个容器中连接到 Postgres 服务器。使用 SQLite 并没有真正的帮助,仍然需要很长时间。
相关库版本:
Django==1.9.13
django-factory-boy==0.1.6
factory-boy==2.7.0
fake-factory==0.7.2
任何建议/想法都将受到高度赞赏。
解决方案
推荐阅读
- android - React Native - 如何构建 expo react native 应用程序,使其不需要 Expo android 应用程序打开
- javascript - 将异步函数传递给 beforeEach - Mocha
- android - Android Room 搜索和过滤使用关系,查询多个表
- amazon-web-services - 使用 SageMaker Pytorch 图像进行训练
- google-cloud-platform - 如何将镜像机器导出到另一个 GCP 帐户?
- c++ - 在 C++ 中玩指针
- rest - 从 Postman 基本身份验证构造 URL
- angular - IIS 将同一 IIS 上相同域名的 HTTP 重定向到 HTTPS
- python - 使用 forloops 生成数据帧
- unity3d - 我怎样才能从这个对象获得参考?