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

ops/2024/9/20 7:27:29/ 标签: django, python, 软件测试

        跟着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后定位到具体源码然后修复:

python">#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 多一秒。

python">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.ppmy.cn/ops/105280.html

相关文章

第二证券:两市成交不足5000亿元 小盘成长股逆势活跃

A股持续小幅颤动&#xff0c;银行等大盘蓝筹股呈现调整&#xff0c;小盘生长股则逆势反弹&#xff0c;创业板指、中证500、中证1000等指数小幅飘红。到收盘&#xff0c;沪指跌0.4%报2837.43点&#xff0c;深证成指跌0.31%报8078.82点&#xff0c;创业板指微涨0.05%报1531.45点&…

论文精读:Dirac半金属反常能斯特效应设计

摘要节选&#xff1a; 反常能思特效应&#xff08;ANE&#xff09;产生垂直于温度梯度的横向电压。与用于能量转换的纵向热电相比&#xff0c;它具有电子和热输运解耦、更高的灵活性和更简单的横向结构等优点。 在这项工作中&#xff0c;从理论上证明了一对Dirac节点在Zeeman…

基于VsCode和Git的代码版本管理

基础回退 在项目文件夹右键打开git bash&#xff0c;输入命令git log 查看提交的历史 commit&#xff0c;git log --prettyoneline将版本信息压缩到一行 使用git log可能会显示不全&#xff0c;按enter逐行查看&#xff0c;按end跳至末尾查看完成后&#xff0c;按q即可退出 …

python 正则表达式“.*”和“.*? ”的区别

“.*”和“.*? ”的区别 点号表示任意非换行符的字符&#xff0c;星号表示匹配它前面的字符0次或者任意多次。所以“.*”表示匹配一串任意长度的字符串任意次。这个时候必须在“.*”的前后加其他的符号来限定范围&#xff0c;否则得到的结果就是原来的整个字符串。 “.*? &…

Kubernetes与Docker的关系讲解

目录 通俗讲解 详细讲解 Docker的角色 K8s&#xff08;Kubernetes&#xff09;的角色 K8s与Docker的协同工作 通俗讲解 想象一下&#xff0c;Docker就像是一个“集装箱”&#xff0c;它可以把你的应用程序和所有需要的东西&#xff08;比如代码、库、环境变量等&#xff0…

linux 高级IO

IO等&#xff08;要进行io是要有条件的&#xff0c;要有数据或者有空间&#xff09;拷贝。高效体现在等待的时间所占比重越低越高效。 阻塞IO&#xff1a;数据没有就绪&#xff0c;read不返回。在内核将数据准备好之前, 系统调用会一直等待。所有的套接字, 默认都是阻塞方式。…

8逻辑回归的代价函数

8.1逻辑回归中的代价函数 成本函数 损失函数 8.2逻辑回归的简化版代价函数 代价函数的简化 损失函数的简化 方框内的式子等于上面的

vue组件二次封装后暴露子组件方法

demo.vue <template><el-button type"primary" click"focus">聚焦{{ msg }}</el-button><MyInput v-model"msg" ref"myInputRef"><template #prepend><el-button>prefix</el-button></…

TCP的连接与断开

三次握手 主动发起连接建立的应用进程叫做客户端(client)。被动等待连接建立的应用进程叫做服务器(server)。 第一次握手&#xff1a;Client将同步比特SYN置为1&#xff08;表示这是一个连接请求或连接接受报文&#xff09;&#xff0c;并发送初始报文段序号seq x&#xff0…

力扣刷题--2180.统计各位数字之和为偶数的整数个数【简单】

题目描述 给你一个正整数 num &#xff0c;请你统计并返回 小于或等于 num 且各位数字之和为 偶数 的正整数的数目。 正整数的 各位数字之和 是其所有位上的对应数字相加的结果。 示例 1&#xff1a; 输入&#xff1a;num 4 输出&#xff1a;2 解释&#xff1a; 只有 2 和…

python实战一:合并多个Excel中数据

看不懂可以跟着视频学一下&#xff0c;关于基础课程项目也可以私聊我&#xff01; 视频源码&#xff1a; 链接&#xff1a;https://pan.quark.cn/s/2055653f735b 之前我们已经学习了如何读取和写入Execl数据&#xff0c;今天我们来用一个实例来进行表格的合并。如下是 2021年…

ThinkPHP之入门讲解

文章目录 1 ThinkPHP1.1 框架1.1.1 目录讲解1.1.1.1 5.x1.1.1.2 6.0以上 1.1.2 配置文件1.1.2.1 5.x1.1.2.2 6.0以上 1.1.3 函数文件1.1.3.1 5.x1.1.3.1 6.0以上 1.2 控制器1.2.1 控制器的后缀1.2.2 框架中的命名空间1.2.3 url访问1.2.4 调试模式1.2.4.1 5.x1.2.4.2 6.0以上 1.…

帅地:秋招入职腾讯,后裸辞创业年入百万,一位全职程序员博主的第六年

这是《开发者说》的第17期&#xff0c;这次我们采访的是知名的程序员博主&#xff1a;帅地。 帅地从大学开始接触公众号&#xff0c;在大学毕业时就沉淀了10w垂直粉丝&#xff0c;月入近10w。在秋招阶段&#xff0c;帅地靠扎实的算法基础和技术功底顺利入职腾讯。“还没折腾够”…

【零知识证明】MiMC哈希函数电路

1 哈希电路 哈希函数电路实现&#xff1a; pragma circom 2.0.0;// y (x k c) ^ 5 // 输入信号x, k &#xff0c;常量c // base x k c // base2 base * base // base4 base2 * base2 // base5 base *base4 // 输出 ytemplate MIMC5(){signal input x;signal input k…

Day-03-信号与槽的三种代码引入方式

一、构造函数引用 1、引出三个按键 2、为了方便区分和编写&#xff0c;对控件进行改名 3、切记切记&#xff0c;注意函数声明 4、注意相关的头文件 5、快捷跳转 二、Lambda函数引用 lambda函数不需要另外再单独声明其他函数 三、函数指针直接连接信号与槽 此种引用需要另外声明…

数据库系统之逻辑设计

数据库的逻辑设计是将概念设计阶段产生的实体关系图&#xff08;ER图&#xff09;转化为具体的数据库表结构的过程。这一阶段的目标是创建一个高效、易于管理和扩展的数据库模式。下面我将通过一个简单的例子来详细介绍数据库逻辑设计的过程。 ### 示例&#xff1a;图书管理系…

C_12_链表

链表 概述&#xff1a; 是一种数据结构 分为单链表与双链表两种 单链表&#xff1a; 链表种节点是离散的在内存中开辟空间的 因为是离散开辟&#xff0c;内存地址通常不是连续的&#xff0c;地址不一定相邻&#xff0c;甚至可能存在其他数据在它们之间。 双链表 1 定义节点 分…

Anaconda的包管理

使用pip命令安装第三方包的方法&#xff0c;其中package-name代表程序包的名字 pip install package-name使用conda下载Python程序包 conda install package-name使用conda list可以查看有哪些包是使用conda进行安装的。 使用pip list可以查看有哪些包是使用pip进行安装的。

【STM32】FMC

FMC功能与FSMC类似&#xff0c;但比FSMC更强大&#xff0c;但仅在F4 / F7 / H7等高级一点的MCU上支持&#xff0c;F1不支持。虽然我的是F103&#xff0c;但顺便都看了。 大部分图片来源&#xff1a;正点原子HAL库课程 专栏目录&#xff1a;记录自己的嵌入式学习之路-CSDN博客 目…

【人工智能】项目案例分析:使用TensorFlow进行大规模对象检测

&#x1f3c6;&#x1f3c6;欢迎大家来到我们的天空&#x1f3c6;&#x1f3c6; &#x1f3c6; 作者简介&#xff1a;我们的天空 &#x1f3c6;《头衔》&#xff1a;大厂高级软件测试工程师&#xff0c;阿里云开发者社区专家博主&#xff0c;CSDN人工智能领域新星创作者。 &…