Django 入门学习总结6 - 测试

Django框架丨从零开始的Django入门学习 Django 是一个用于构建 Web 应用程序的高级 Python Web 框架,Django是一个高度模块化的框架,使用 Django,只要很少的代码,Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的 Web 服务。每个 Django App 的组织结构符合 Django 的 MTV 法则——Model(模型)+ Template(模板)+ View(视图),文章内容将从安装开始,对Django每一个模块的操作进行简单的讲解。 阅读详情

1、介绍自动化测试

测试的主要工作是检查代码的运行情况。测试有全覆盖和部分覆盖。

自动测试表示测试工作由系统自动完成。

在大型系统中,有许多组件有很复杂的交互。一个小的变化可能会带来意想不到的后果

测试能发现问题,并以此解决问题。

测试驱动开发

在polls/tests.py文件中,建立 测试方法:

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

则输出以下信息。

表明系统有bug,测试失败。

修改文件polls/models.py为:

def was_published_recently(self):
        now = timezone.now()
        return now - datetime.timedelta(days=1) <= self.pub_date <= now

重新测试,则bug消失。

更复杂的测试

在测试文件中输入更多的测试方法:

def test_was_published_recently_with_old_question(self):
        """
        was_published_recently() returns False for questions whose pub_date
        is older than 1 day.
        """
        time = timezone.now() - datetime.timedelta(days=1, seconds=1)
        old_question = Question(pub_date=time)
        self.assertIs(old_question.was_published_recently(), False)


    def test_was_published_recently_with_recent_question(self):
        """
        was_published_recently() returns True for questions whose pub_date
        is within the last day.
        """
        time = timezone.now() - datetime.timedelta(hours=23, minutes=59, seconds=59)
        recent_question = Question(pub_date=time)
        self.assertIs(recent_question.was_published_recently(), True)

现在有三个测试方法,分别对应于过去、最近和未来的问题。

可以在客户端建立测试环境来对网页进行测试。

在命令提示符下输入:

python manage.py shell

from django.test.utils import setup_test_environment

setup_test_environment()

导入客户端

from django.test import Client

建立一个客户端实例对象

client = Client()

修改polls/tests.py文件:

from django.urls import reverse

添加以下内容:

def create_question(question_text, days):
        """
        Create a question with the given `question_text` and published the
        given number of `days` offset to now (negative for questions published
        in the past, positive for questions that have yet to be published).
        """
        time = timezone.now() + datetime.timedelta(days=days)
        return Question.objects.create(question_text=question_text, pub_date=time)


    class QuestionIndexViewTests(TestCase):
        def test_no_questions(self):
            """
            If no questions exist, an appropriate message is displayed.
            """
            response = self.client.get(reverse("polls:index"))
            self.assertEqual(response.status_code, 200)
            self.assertContains(response, "No polls are available.")
            self.assertQuerySetEqual(response.context["latest_question_list"], [])

        def test_past_question(self):
            """
            Questions with a pub_date in the past are displayed on the
            index page.
            """
            question = create_question(question_text="Past question.", days=-30)
            response = self.client.get(reverse("polls:index"))
            self.assertQuerySetEqual(
                response.context["latest_question_list"],
                [question],
            )

        def test_future_question(self):
            """
            Questions with a pub_date in the future aren't displayed on
            the index page.
            """
            create_question(question_text="Future question.", days=30)
            response = self.client.get(reverse("polls:index"))
            self.assertContains(response, "No polls are available.")
            self.assertQuerySetEqual(response.context["latest_question_list"], [])

        def test_future_question_and_past_question(self):
            """
            Even if both past and future questions exist, only past questions
            are displayed.
            """
            question = create_question(question_text="Past question.", days=-30)
            create_question(question_text="Future question.", days=30)
            response = self.client.get(reverse("polls:index"))
            self.assertQuerySetEqual(
                response.context["latest_question_list"],
                [question],
            )

        def test_two_past_questions(self):
            """
            The questions index page may display multiple questions.
            """
            question1 = create_question(question_text="Past question 1.", days=-30)
            question2 = create_question(question_text="Past question 2.", days=-5)
            response = self.client.get(reverse("polls:index"))
            self.assertQuerySetEqual(
                response.context["latest_question_list"],
                [question2, question1],
            )

在polls/views.py中,添加以下内容:

class DetailView(generic.DetailView):
        ...

        def get_queryset(self):
            """
            Excludes any questions that aren't published yet.
            """
            return Question.objects.filter(pub_date__lte=timezone.now())

在polls/tests.py中,添加以下的内容:

class QuestionDetailViewTests(TestCase):
        def test_future_question(self):
            """
            The detail view of a question with a pub_date in the future
            returns a 404 not found.
            """
            future_question = create_question(question_text="Future question.", days=5)
            url = reverse("polls:detail", args=(future_question.id,))
            response = self.client.get(url)
            self.assertEqual(response.status_code, 404)

        def test_past_question(self):
            """
            The detail view of a question with a pub_date in the past
            displays the question's text.
            """
            past_question = create_question(question_text="Past Question.", days=-5)
            url = reverse("polls:detail", args=(past_question.id,))
            response = self.client.get(url)
            self.assertContains(response, past_question.question_text)

错误更改:如果使用self.assertQuerySetEqual 收到一条错误消息“DeviceTest object has no attribute assertQuerySetEqual”

应将assertQuerySetEqual  替换为:assertEqual

django入门与学习-django的安装与测试-1 寒假期间大师兄给我们布置了使用django结合python实现爬虫数据的展现任务,又由于之前一直接触的是C++,没有python和网络编程的基础,所以学习起来很吃力,中间也遇到了很多非常莫名奇妙的问题,我写这篇博文主要是为后来的人留下一点经验。此外,博主使用的是Ubuntu16.10,并没有尝试在Windows下进行开发。 阅读详情

相关推荐

快速入门Django(结合深度学习DNN实例)

在熟悉了简单操作后,继续使用例子 本文实现的功能: 1.使用Keras创建,DNN深度学习网络模型,解决多分类问题,数据集是IRIS数据集。 2.Keras模型保存,及重新加载 2.结合我的上一篇文章的结果,最终实现了,由网页写入data,将data传入已经训练好的模型,predict结果输入数据库,最终将predict显示在网页。 此篇project非常适合入门,能够快速看到结果,但某些细节好比...

qq1376725255的专栏 5114

django错误‘QuerySet‘ object has no attribute ‘sign‘

没找到属性? 试试把.objects.filter()改成.objects.get() .objects.filter()返回的是对象 需要筛选 也可以用.objects.filter(xxx)[0]

Jzin的博客 1059

Django 测试平台搭建学习:环境搭建

前言 缺少全栈的练手项目,找了一本书《自动化平台测试开发:python测试开发实战》用来边做边练习,希望能坚持下来。 第一章主要讲环境搭建了解一下基础概念,会加入一点自己的总结。 目录 目录 缺少全栈的练手项目,找了一本书《自动化平台测试开发:python测试开发实战》用来边做边练习,希望能坚持下来。 前言 目录 一、django是什么? 二、环境准备 1.安装环境django 2. 总结 系列文章目录 一、django是什么? 这个项目是基于django实现的,是基于

fengjiajia8699的博客 1243

django3.0.5安装到简单例子

1.django 3.0.5 安装 1.1 python 版本为 Python 3.7.7 (v3.7.7:d7c567b08f, Mar 10 2020, 02:56:16) [Clang 6.0 (clang-600.0.57)] on darwin Type "help", "copyright", "credits" or "license" for more information...

keny-大成的博客 1413

Django框架学习(四):Django 单元测试

Django框架学习(四):Django 单元测试编写单元测试 Django 框架自带了单元测试工具,利用该工具,我们可以方便地对单元进行错误检查,以提高项目的质量。 编写单元测试 在 Django 框架中,当新建一个应用时,会默认新建一个用于单元测试的 test.py 文件,我们的单元测试代码就写在 test.py 里。 比如,在 view.py 里,我们写了一个相应用户登录操作的接口,如下: ...

看门猫的博客 1995

django学习之学前准备篇

Django是什么?     简单来说,django就是一个由python开发的免费的开源网站框架,可以用于搭建高性能的,优秀的网站。如果想仔细了解django的历史趣事,请登陆django官网:https://www.djangoproject.com/ 如果想仔细了解并深入学习django,那么强烈建议去看django book,中文版地址:http://docs.30c.org/dj

追梦者的部落格 2919

Python Django的使用:Writing your first Django app--实践

Writing your first Django app, part 1 安装django C:\Windows\system32>python -m django --version 1.10.2 Creating a project From the command line, cd into a directory where you’d like to store your

徐长亮的专栏 1967

雪亮工程视频联网技术详解:视综平台主流接入方式与协议分析

随着雪亮工程建设的深入,视频资源的汇聚与共享成为核心需求。本文简要剖析了雪亮视综平台下的视频联网接入技术,重点讲解了主流接入方式的区别与选型,并深入探讨了平台内部及跨平台的视频资源共享机制(含级联与推送模式),旨在为安防开发人员和系统集成商提供清晰的架构思路与技术参考。

lsz152590的博客 716

python+appium自动化测试遇到的一些坑及问题总结(二)

Issue 11: selenium.common.exceptions.SessionNotCreatedException: Message: A new session could not be created. (Original error: Requested a new session but one was in progress) Solution: 停止再启动Appium Issue 12: 2个文件一起执行时,第二个文件报错:AttributeError: ‘NoneType’ obj

a10703060237的博客 4447

脑电数据预处理八:基于 ICA 的伪迹去除

摘要: 脑电图(EEG)数据分析中,伪迹(如眼电、心电、肌电)与脑电信号频谱重叠时,独立成分分析(ICA)成为有效工具。ICA通过盲源分离将混合信号分解为统计独立的成分,识别并移除伪迹后重建干净信号。MNE-Python实现步骤包括:数据预处理(滤波、坏导处理)、ICA分解、人工与自动结合识别伪迹成分、剔除后重建数据。实践建议强调人工检查的重要性,避免过度使用ICA,并保存模型以提高效率。该方法显著提升数据质量,为后续分析奠定基础。

qq_32516809的博客 1658

【学长笔记】关于车牌识别的CCPD数据集按比例划分

本文介绍了一个用于CCPD车牌数据集划分的Python脚本,主要功能包括:1) 将数据集按比例划分为训练集、验证集和测试集;2) 支持图像与标签文件校验;3) 可自定义划分比例和样本数量限制;4) 自动生成标准目录结构。脚本使用随机种子确保可重复性,并通过tqdm显示进度条。处理后数据可直接用于YOLO等目标检测模型的训练与评估,建议在预处理完成后立即执行划分以避免数据泄露。文章还提供了相关技术博客的参考链接。

apple_53308981的博客 1472

python遇到AttributeError: 'str' object has no attribute '_getAssertEqualityFunc'问题解决过程

在编写python脚本过程中,引用assertEqual()时,遇到AttributeError: 'str' object has no attribute '_getAssertEqualityFunc'问题,该意思是str没有属性,查看该方法,没有问题。此时将assertEqual里的参数修改为int型的去校验,然后也提示AttributeError: 'int' object has no

Seleton的专栏 2万+

SAP CO实战:如何用KKA2/CJ88结果分析码搞定项目收入成本匹配(附真实案例)

本文深入解析了SAP CO模块中结果分析码KKA2/CJ88的核心应用,通过真实案例详细阐述了如何在成本波动剧烈的销售型项目中,运用结果分析实现收入与成本的精准匹配。文章重点拆解了不同结果分析方法的适用场景与财务影响,并提供了从配置、操作到问题排查的完整实战指南,帮助财务顾问提升项目财务管理能力。

qsc9012345的博客 606

Django 学习顺序及入门要求?

Django 学习顺序及入门要求? 在zhihu中搜索 " Django 学习顺序及入门要求? " https://www.zhihu.com/question/21790279?sort=created

abc 497

GEE:连续变化检测 CCD 第一步(导出ee.Algorithms.TemporalSegmentation.Ccdc函数的结果)

连续变化检测与分类(Continuous Change Detection and Classification, CCDC)主要有两个组件,一个连续变化检测 CCD,另外一个分类。在 Google Earth Engine (GEE)平台上进行 CCD 时间序列变化检测的时候,为了防止内存超限问题,将代码分为2阶段执行。第一阶段是运行 `ee.Algorithms.TemporalSegmentation.Ccdc` 函数,本文将详细介绍 CCD 的第一阶段的代码。

养乐多的博客 2492

YOLOv13添加WDBB模块,map提升5.34!!,召回率提升6.55,准确率提升3.23

本文提出了一种基于YOLOv13改进的目标检测模型,通过引入WDBB模块显著提升了检测性能。实验结果表明,添加WDBB模块后,mAP提升11.34,召回率提升14.55,准确率提升3.23。文章详细介绍了模型移植方法,包括创建新的yaml配置文件、修改tasks.py和__init__.py文件,以及实现rep_block.py中的核心转换函数。改进后的模型通过深度卷积、通道注意力等模块优化了特征提取能力,同时保持了轻量化的特点。该工作为YOLO系列模型的性能提升提供了新的思路和技术实现。

FJN110的博客 2623

Django REST Framework 学习计划(6周)

本教程为Django REST framework(DRF)的6周系统性学习路径,从RESTful基础概念到源码解析,涵盖认证、权限、序列化、分页等核心功能,通过两个项目实战(含部署优化)巩固知识,适合已掌握Django的学习者进阶API服务开发。

YAnt的博客 950

AI大模型入门到实战系列(二十一)命名实体识别(NER)

命名实体识别(NER)是自然语言处理中的关键任务,旨在从文本中识别并分类预定义类别的实体(如人名、地点、组织等)。其核心步骤包括文本预处理、实体边界检测和类型分类。主流技术方法经历了从基于规则、统计机器学习到深度学习的演进,当前主要采用预训练语言模型(如BERT)和序列标注技术(如BiLSTM-CRF)。关键技术挑战包括实体边界模糊、嵌套实体和领域适应等问题。NER广泛应用于信息抽取、搜索引擎优化和知识图谱构建等领域,常用精确率、召回率和F1值作为评估指标。实际应用中通常采用BIO标注体系,并通过标签对齐处

echo的博客 1622

Django 从入门到精通的学习指南

Django 是一个高级 Python Web 框架,它鼓励快速开发和干净、务实的设计。由经验丰富的开发者构建,它处理了许多 Web 开发中的麻烦事,让你能够专注于编写应用程序,而无需重新发明轮子。高效快速:Django 的设计旨在帮助开发者尽可能快地将应用程序从概念转化为成品,能够快速地进行开发和部署.安全可靠:Django 非常重视安全性,它可以帮助开发者避免许多常见的安全错误,内置的安全机制如 CSRF 保护、SQL 注入防护等,保障了应用程序的安全性.高度可扩展。

candy的博客 1399

如何解除“无法完成操作 因为文件包含病毒或潜在垃圾软件”

当运行软件遇到“无法完成操作 因为文件包含病毒或潜在垃圾软件”时,如何解决?控制面板-系统和安全-Windows Defender防火墙-自定义设置,将专用网络及公用网络关闭。点击后,选择“病毒和威胁防护”-管理配置。进入安全中心后,选择“病毒和威胁防护”将需要排斥的选项输入后,保存配置即可。2:打开windows安全中心。

笔者从事电信媒体开发多年,愿意将多年的开发经验分享给同行 6万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

django学习入门系列之第十点《初识 django》

manage.py用于项目的管理,启动项目,创建app,数据库的管理里面的东西一行都不用修改但是,是常常用的asgi.py与wsgi.py用来接收网络请求里面的东西一行都不用修改urls.pyURL和函数对应关系-----经常操作的项目配置-----经常操作的。

铁匠匠匠的博客 1455

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【第一部分-django论坛从搭建到部署】一个完整的Django入门指南学习笔记

【学习目录】 【第一部分-django论坛从搭建到部署】一个完整的Django入门指南学习笔记 【第二部分-django论坛从搭建到部署】一个完整的Django入门指南学习笔记 【第三部分-django论坛从搭建到部署】一个完整的Django入门指南学习笔记 【第四部分-django论坛从搭建到部署】一个完整的Django入门指南学习笔记 【第五部分-django论坛从搭建到部署】一个完...

花村 9325

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: Django 入门学习总结5
下一篇: Django 入门学习总结7-静态文件管理
computerclass
博客等级 码龄22年 99粉丝 307原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

computerclass

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值