这期内容当中小编将会给大家带来有关Django项目怎么实现测试,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
<强>一、自动化测试概述强>
什么是自动化测试
测试是一种例行的,不可缺失的工作,用于检查你的程序是否符合预期。
测试可以划分为不同的级别。一些测试可能专注于小细节(比如某一个模型的方法是否会返回预期的值?),一些测试则专注于检查软件的整体运行是否正常(用户在对网站进行了一系列的输入后,是否返回了期望的结果?)。
测试可以分为手动测试和自动测试。手动测试很常见,有时候打印一个变量内容,都可以看做是测试的一部分。手动测试往往很零碎,不成体系,不够完整,耗时费力,效率低下,测试结果也不一定准确。
自动化测试则是系统地较为完整地对程序进行测试,效率高,准确性高,并且大部分共同的测试工作会由系统来帮你完成。一旦你创建了一组自动化测试程序,当你修改了你的应用,你就可以用这组测试程序来检查你的代码是否仍然同预期的那样运行,而无需执行耗时的手动测试。
为什么需要测试?
大家都明白:
测试可以节省你的时间测试不仅仅可以发现问题,还能防止问题测试使你的代码更受欢迎测试有助于团队合作
<强>二、编写测试程序强>
Django是一个全面,完善,严谨的网框架,当然不会缺少测试功能。
1。遇见错误
很巧,在我们的投票应用中有一个小错误需要修改:在Question.was_published_recently()方法的返回值中,当Qeustion在最近的一天发布的时候返回真正的(这是正确的),然而当问题在未来的日期内发布的时候也返回真正的(这是错误的)。
我们可以在管理后台创建一个发布日期在未来的问题,然后在shell中验证这个BUG:
美元python管理。py壳
在祝辞祝辞import datetime 在祝辞祝辞,得到django.utils import 时区 在祝辞祝辞,得到polls.models import 问题 在祝辞祝辞,#,创建一个发布日期在30天后的问卷 在祝辞祝辞,future_question =,问题(pub_date=timezone.now (), +, datetime.timedelta(30天=)) 在祝辞祝辞,#,测试一下返回值 祝辞祝辞祝辞,future_question.was_published_recently真正()
问题的核心在于我们允许创建在未来时间才发布的问卷,由于“未来“不等于“最近”,因此这显然是个bug。
2。创建一个测试来暴露这个bug
刚才我们是在shell中测试了这个bug,那如何通过自动化测试来发现这个bug呢?
通常,我们会把测试代码放在应用的tests.py文件中,测试系统将自动地从任何名字以测试开头的文件中查找测试程序。每个应用在创建的时候,都会自动创建一个tests.py文件,就像views.py等文件一样。
将下面的代码输入投票应用的民意调查/测试。py文件中:
import datetimefrom django.utils import timezonefrom django.test import TestCasefrom .models import Questionclass QuestionMethodTests (TestCase): ,,,def test_was_published_recently_with_future_question(自我): ,,,,,,,,,,,,,,,,,,在将来发布的问卷应该返回False ,,,,,,,,,, ,,,,,,,time =, timezone.now (), +, datetime.timedelta(30天=) ,,,,,,,future_question =,问题(pub_date=时间) ,,,,,,,self.assertIs (future_question.was_published_recently(),,假)
我们在这里创建了一个django.test.TestCase的子类,它具有一个方法,该方法创建一个pub_date在未来的问题实例。最后我们检查was_published_recently()的输出,它应该是假的。
3。运行测试程序
在终端中,运行下面的命令,
,美元python manage.py test 民调
你将看到结果如下:
Creating test database for alias & # 39;默认# 39;… System check  identified no  issues (0,沉默)。 F======================================================================失败:test_was_published_recently_with_future_question (polls.tests.QuestionModelTests) ---------------------------------------------------------------------- Traceback (most recent call 最后一个): File 才能“/路径//mysite/调查/tests.py",, line 16日test_was_published_recently_with_future_question拷贝 ,,,self.assertIs (future_question.was_published_recently(),,假) AssertionError: True is  not 错误的 ---------------------------------------------------------------------- Ran 1, test 拷贝0.001 s FAILED (失败=1) Destroying test  database for  alias & # 39;默认# 39;…Django项目怎么实现测试