Django测试时间超过20分钟(有时)

时间:2018-08-09 15:12:28

标签: python django docker testing factory-boy

我有一个神秘的测试,它需要花更长的时间才能运行。我已经尝试调试了一段时间,但我的创造力用光了。该测试确实创建了很多数据库记录,但是仍然只有几百个,我可以理解它花了一分钟,但绝对不是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

任何建议/想法都受到高度赞赏。

0 个答案:

没有答案
相关问题