关于测试

测试用例

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']  #输出:]>

 

关于测试例
  先写代码或先写测试用例,可根据实际情况来决定
  每增加一项功能,都要追加相应的测试用例,并且测试用例越多越好
  测试例过多,可能会失去控制,可在整体进行规划,可参考以下原则:
  对于每个模型和视图都建立单独的TestClass
  每个测试方法只测试一个功能
  给每个测试方法起个能描述其功能的名字

  当写完测试用例并通过后,可将其永远保留
  因为该测试用例的作用,实际上就是在监控对应的代码
  比如,将来修改其他代码时,可能无意间造成这段代码没有返回期望值
  则在修改后执行测试用例时,就会发现该bug

Selenium
  Selenium是一款浏览器自动化测试工具
  它假装成是浏览器正在和站点进行交互,就像真人在访问网站一样
  Django提供了LiveServerTestCase与Selenium这样的工具进行交互

代码覆盖率
  找出代码中未被测试部分的方法是检查代码覆盖率
  它有助于找出代码中的薄弱部分和无用部分
  如果无法测试一段代码,通常说明这段代码需要被重构或者删除

持续集成
  对源代码进行自动化编译、测试、代码检查,以及打包程序、部署(发布)到应用服务器上

你可能感兴趣的