我有一个神秘的测试,它需要花更长的时间才能运行。我已经尝试调试了一段时间,但我的创造力用光了。该测试确实创建了很多数据库记录,但是仍然只有几百个,我可以理解它花了一分钟,但绝对不是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
以此顺序列出时,测试仅在处理“次要”级别时才开始阻塞。第一个(“主要”)处理的速度很多。当我切换次要和专业时,事情从一开始就很慢。
这是我最近才开始从事的遗留项目,因此我不知道幕后到底会发生什么,但是老实说,我无法想象会导致这种奇怪行为的任何事情。
我正在Docker容器中运行Django应用,并在另一个容器中连接到Postgres服务器。使用SQLite并没有真正帮助,仍然需要很长时间。
相关库版本:
Django==1.9.13
django-factory-boy==0.1.6
factory-boy==2.7.0
fake-factory==0.7.2
任何建议/想法都受到高度赞赏。