测试用例
import datetime
from django.test import TestCase
from django.utils import timezone
from .models import Question
class QuestionModelTests(TestCase):
def test_was_published_recently_with_future_question(self):
"""
was_published_recently() returns False for questions whose pub_date
is in the future.
"""
time = timezone.now() + datetime.timedelta(days=30)
future_question = Question(pub_date=time)
self.assertIs(future_question.was_published_recently(), False)
执行python manage.py test polls,会进行如下操作
1 寻找 polls应用里的测试代码
2 找django.test.TestCase 的子类,如QuestionModelTests
3 创建一个特殊的数据库供测试使用,如,创建future_question,并不是在用户数据库创建,而是在一个测试数据库创建的
4 在类中寻找测试方法—以 test 开头的方法
5 使用assertls()方法,确认函数是否返回期望值
Client
Django 提供了一个供测试使用的 Client 来模拟用户和视图层代码的交互
python shell UI
from django.test import Client
from django.urls import reverse
client = Client()
response = client.get('/')
response.status_code
response = client.get(reverse('polls:index')) #请求应用polls的视图index
response.status_code #输出:200
response.content #输出:index视图对应html的内容
response.context['latest_question_list'] #输出:<QuerySet [<Question: What's up?>]>
关于测试例
先写代码或先写测试用例,可根据实际情况来决定
每增加一项功能,都要追加相应的测试用例,并且测试用例越多越好
测试例过多,可能会失去控制,可在整体进行规划,可参考以下原则:
对于每个模型和视图都建立单独的TestClass
每个测试方法只测试一个功能
给每个测试方法起个能描述其功能的名字
当写完测试用例并通过后,可将其永远保留
因为该测试用例的作用,实际上就是在监控对应的代码
比如,将来修改其他代码时,可能无意间造成这段代码没有返回期望值
则在修改后执行测试用例时,就会发现该bugSelenium
Selenium是一款浏览器自动化测试工具
它假装成是浏览器正在和站点进行交互,就像真人在访问网站一样
Django提供了LiveServerTestCase与Selenium这样的工具进行交互
代码覆盖率
找出代码中未被测试部分的方法是检查代码覆盖率
它有助于找出代码中的薄弱部分和无用部分
如果无法测试一段代码,通常说明这段代码需要被重构或者删除
持续集成
对源代码进行自动化编译、测试、代码检查,以及打包程序、部署(发布)到应用服务器上
本文介绍如何使用Django框架进行单元测试和功能测试,包括编写测试用例、使用Django提供的测试客户端模拟用户行为、利用Selenium进行自动化测试等内容。

被折叠的 条评论
为什么被折叠?



