Django中的第一个自动化测试编写

news2024/11/15 21:53:59

        跟着Django官网中的投票应用学习,其中有官方说明的一个bug:如果 Question 是在一天之内发布的,那么这个Question 应该显示“published_recently”,返回值为True ,然而现在如果问题发布时间为30天之后(未来时间),也会返回True,而我们期待的是返回值为False.

        那么根据测试的思想:应用中总是存在bug的,目的就是编写测试用例找出这些bug。现在已经知道bug是什么样,编写有效的测试用例来触发这个bug就好了。因为项目目前很简单,而且是第一个测试,就先简单写到一个test.py文件里面,但后面如果要规范化的话,还是应该在应用程序代码旁边创建一个tests目录,可以创建多个测试文件,把测试分为不同的子模块。

图中详细信息:

①polls/tests.py  我的投票应用名称叫做polls,测试是写在test.py文件中的。

②class QuestionModelTests(TestCase):  创建一个django.test.TestCase的子类,自动化测试运行会在该类中自动寻找以 test 开头的测试函数。

③ test_was_published_recently_with_future_question函数中三行代码创建了一个测试用例:将问题发布时间设为从现在开始的30 days之后,正确返回值应该为False.

④在终端中运行指令 python manage.py test polls,则会寻找polls路径下的测试代码,有1 test.

⑤Creating test database for alias 'default'... 需要数据库的测试不会使用实际项目中的数据库,而是会创建一个测试数据库,无论测试是否通过,所有测试执行完毕后测试数据库默认销毁(在一定条件下可以用命令在两次测试之间保留测试数据库,这样可以加快测试)。

⑥这个测试返回结果与预想的不一样,最后输出FAILED,destroying 测试数据库。

确定bug后定位到具体源码然后修复:

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

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

测试用例不变,执行测试。这次测试通过,输出OK.

还是这个published_recently问题,根据边界值分析的设计思路,可以再设计两个测试用例,一个Question发表时间为1 day 少1秒,一个发表时间为1day 多一秒。

def test_was_published_recently_with_old_question(self):
        """
        bug:一天以上发布的问题应该返回 False
        """
        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):
        """
        bug: 1天内发布的问题应该返回 True
        """
        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)

执行测试:

 最后贴一张Django文档中对于测试的观点:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2090109.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Prometheus+Grafana监控数据可视化

上一篇文章讲了prometheus的简单使用&#xff0c;这一篇就先跳过中间略显枯燥的内容&#xff0c;来到监控数据可视化。 一方面&#xff0c;可视化的界面看着更带劲&#xff0c;另一方面&#xff0c;也更方便我们直观的查看监控数据&#xff0c;方便后面的学习。 Grafana安装与…

如何使用 TortoiseGit(小乌龟)进行项目源代码的检出、添加与提交、代码推送与拉取

&#x1f600;前言 本文详细介绍如何使用 TortoiseGit&#xff08;小乌龟&#xff09;进行项目源代码的检出、文件的添加与提交、代码的推送与拉取&#xff0c; &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#…

准备并执行库存盘点

库存盘点 企业需要定期盘点其库存的原因有很多。 许多国家的法律要求公司对其物料库存进行库存盘点。库存盘点会检查公司财务报表中所显示的流动资产的物料库存。 由于内部原因&#xff0c;建立正确可用的库存数量是非常重要的。这也是“物料需求计划”的目标&#xff0c;例…

单位普通职工去世了,该单位工会领导参加她的追悼会是这样致辞的?

单位普通职工去世了&#xff0c;该单位工会领导参加她的追悼会是这样致辞的&#xff1f; 这是一篇单位工会领导参加本单位一位普通职工追悼会的致词 &#xff08;范文点评&#xff09; 各位来宾、各位亲朋好友&#xff1a; 今天&#xff0c;我们怀着十分沉痛的心情悼念襄阳农…

【高校科研前沿】加州理工学院Brendan Byrne等人在Nature 正刊发文:2023年加拿大野火的碳排放

论文名称&#xff1a;Carbon emissions from the 2023 Canadian wildfires&#xff08;2023年加拿大野火的碳排放&#xff09; 第一作者及单位&#xff1a;Brendan Byrne&#xff08;碳循环科学家|加州理工学院&#xff09; 通讯作者及单位&#xff1a;Brendan Byrne&#xf…

【C++ Primer Plus习题】7.4

问题: 解答: #include <iostream> using namespace std;long double probability(double num1, double num2, double picks) {long double result 1.0;for (int i num1;picks>0; i--,picks--){result result * (picks / i);}result * 1 / num2;return result; }in…

Shader笔记:光照与阴影1

引&#xff1a;旋转动画&#xff08;三角函数&#xff09; float3 rotationY(float3 vertex){float c cos(_Time.y*_Speed);float s sin(_Time.y*_Speed);float3x3 m {c,0,s,0,1,0,-s,0,c};return mul(m,vertex); } v2f vert (a2v v) {v2f o;o.pos UnityObjectToClipPos(r…

【GPT】Coze使用开放平台接口-【6】Dify 也来一遍

前面讲了 coze 的相关用法&#xff0c;这边想着用 Dify 也来一遍&#xff0c;刚开始的时候接触的是 Dify&#xff0c;后面才是 coze。Dify 和 coze 的侧重点不同&#xff0c;我个人是更倾向用 Dify 构建工作流就可以了&#xff0c;coze 还是相对全能。 本节用 Dify 也会创建插…

k8s的组件以及安装

目录 概念 k8s的使用场景 k8s的特点 核心组件 master主组件 1.kube-apiserver 2.etcd 3.kube-controller-manager 控制器 4.kube-scheduler node从节点组件 1.kubelet 2.kube-proxy 3.docker 总结 k8s的核心概念 安装k8s 架构 安装步骤 实验&#xff1a;创…

快递盒检测检测系统源码分享 # [一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

快递盒检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Visio…

使用pytorch深度学习框架搭建神经网络

简介 现在主流有两个框架pytorch和TensorFlow,本文主要介绍pytorch PyTorch&#xff1a;由 Facebook 的人工智能研究小组开发和维护。PyTorch 以其动态计算图&#xff08;Dynamic Computational Graph&#xff09;和易用性著称&#xff0c;非常适合研究人员和开发者进行实验和…

智谱发布新一代基座模型

自 2023 年 3 月发布第一代语言基座模型 ChatGLM 以来&#xff0c;我们经过对基座模型的深入探索&#xff0c;在模型性能和模态上取得了显著的提升。 基于此&#xff0c;在KDD 2024大会上&#xff0c;我们发布了新一代基座模型&#xff0c;包括语言模型GLM-4-Plus、文生图模型…

数据仓库系列15:数据集成的常见挑战有哪些,如何应对?

在大数据时代&#xff0c;数据集成已成为数据仓库建设中不可或缺的一部分。无论是来自多个数据库、外部数据源&#xff0c;还是实时数据流的整合&#xff0c;数据集成都面临着诸多挑战。那么&#xff0c;这些挑战具体是什么&#xff0c;我们又该如何应对呢&#xff1f;本文将通…

Elasticsearch(一):单节点安装并开启ssl

单节点安装并开启ssl 1、概述2、安装2.1、前期准备2.2、下载和解压Elasticsearch2.3、创建用户和配置权限2.4、生成证书2.4.1、创建CA&#xff08;证书颁发机构&#xff09;2.4.2、与CA签署证书&#xff08;生成节点证书&#xff09; 2.5、 为Elasticsearch配置 证书2.6、启动 …

第4章-08-用Python Requests库模拟浏览器访问接口

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年CSDN全站百大博主。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于专栏:Web爬虫入门与实战精讲,后续完整更新内容如下。 文章…

【奔驰中国-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

什么是基于云的 SIEM

随着企业不断将业务迁移到数字世界&#xff0c;网络威胁的领域也在不断扩大&#xff0c;随着时间流逝&#xff0c;新的威胁不断出现&#xff0c;手段也变得更加巧妙。一个关键问题出现了&#xff1a;组织如何保护其敏感数据、资产和声誉免受网络威胁&#xff1f;这就是基于云的…

Linux中路由功能及ip_forward转发配置

操作系统中路由功能有着至关重要的作用&#xff0c;它决定了网络数据包如何在网络中传输&#xff0c;最终到达目的地。本文简要介绍Linux中的路由功能实现以及IP转发的配置&#xff0c;并验证在容器环境下配置net.ipv4.ip_forward的必要性&#xff0c;以加深理解。 1、Linux中路…

8.6 数据库基础技术-数据库的控制

并发控制 封锁协议 一级封锁协议 二级封锁协议 三级封锁协议 数据库故障和备份 真题 1

案例练习理解ThreadLocal以及应用场景

目录 案例练习 应用场景 ThreadLocal&#xff1a;用来解决多线程程序下并发问题&#xff0c;通过为每一个线程创建一份共享变量的副本保证线程之间的变量的访问和修改互不影响。 案例练习 1.三个销售卖小米SU7&#xff0c;求他们的总销售。使用CountDownLatch维护三个线程 …