Django学习系列19:完成最简单可用的网站——确保功能之间相互隔离
前面遗留的问题,首先时功能测试运行结束后的清理;其次是目前我们的待办清单只允许创建一个大家公用的清单。
如何隔离测试,运行功能测试后待办事项一直存在于数据库中,这会影响下一次测试。
运行单元测试时,Django的测试运行程序会自动创建一个全新的测试数据库(和应用真正使用的数据库不同)。
运行每个单元测试之前都会清空数据库,等所有测试都运行完之后,再删除这个数据库。
功能测试目前使用的时应用真正使用的数据库db.qlite3,在function_test.py中添加执行清理任务的代码,这样的任务最适合在setUp和tearDown方法中完成。
LiveServerTestCase 这个类会自动创建一个测试数据库(跟单元测试一样),并启动一个开发服务器,让功能测试在其中运行。
LiveServerTestCase必须使用manage.py,由Django的测试运行程序运行,测试运行程序查找所有名字以test开头的文件。
为保证文件结构清晰,要新建一个文件夹保存功能测试,让它看起来像一个应用。Django对这个文件夹的要求必须是有效的Python模块,即文件夹中要有一个__init__.py文件。
$ mkdir functional_tests
$ touch functional_tests/__init__.py
要移动功能测试,把独立的function_test.py文件移到function_tests应用中并把他重命名tests.py。
使用git mv命令完成这个操作,让git知道文件移动了。
$ git mv functional_tests.py functional_tests/tests.py
$ git status # shows the rename to functional_tests/tests.py and 新增了__init__.py
现在的目录结构
.
├── db.sqlite3
├── functional_tests
│ ├── __init__.py
│ └── tests.py
├── geckodriver.log
├── lists
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_item_text.py
│ │ ├── __init__.py
│ │ └── __pycache__
│ ├── models.py
│ ├── __pycache__
│ ├── templates
│ │ └── home.html
│ ├── tests.py
│ └── views.py
├── manage.py
└── subperlists
├── __init__.py
├── __pycache__
├── settings.py
├── urls.py
└── wsgi.py
现在运行功能测试不执行python function_tests.py命令,而是使用pythoon manage.py rest function_tests命令。
下面编辑functional_tests/tests.py
class NewVisitorTest(LiveServerTestCase):
def setUp(self): #
self.browser = webdriver.Firefox()
self.browser.implicitly_wait(3)
现在能使用Django的测试运行程序运行功能测试了,指明只运行function_tests应用中的测试
# python manage.py test functional_tests
功能测试和重构前一样,能运行到self.fail。如果再次运行测试,之前的测试不再遗留待办事项了。因为功能测试运行完之后把它们清理掉了。
提交小改动
git status # functional_tests.py renamed + modified, new __init__.py
$ git add functional_tests
$ git diff --staged -M
$ git commit # msg eg "make functional_tests an app, use LiveServerTestCase"
现在,如果执行 python manage.py test命令,Django会运行功能测试和单元测试
如果向运行单元测试,可以指定只运行lists应用中的测试:python manage.py test lists
运行功能测试:python manage.py test functional_tests
另外考虑如何支持多个清单,一个用户不能查看另一个用户的清单,并且每个清单都有自己的URL,以便访问保存的清单。
Django学习系列19:完成最简单可用的网站——确保功能之间相互隔离的更多相关文章
- Django学习系列之Form基础
Django学习系列之Form基础 2015-05-15 07:14:57 标签:form django 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追 ...
- scrapy爬虫学习系列二:scrapy简单爬虫样例学习
系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备: http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...
- .net reactor 学习系列(三)---.net reactor代码自动操作相关保护功能
原文:.net reactor 学习系列(三)---.net reactor代码自动操作相关保护功能 接上篇,上篇已经学习了界面的各种功能以及各种配置,这篇准备学习下代码控制许可证. ...
- Django学习系列6:使用selenium测试用户交互
学习系列5中的单元测试有报错信息,这儿来编写functional_tests.py文件,扩充其中的功能测试 # File: functional_test.py # Author: Rxf # Cre ...
- SpringCloud学习系列之一 ----- 搭建一个高可用的注册中心(Eureka)
前言 本篇主要介绍的是SpringCloud相关知识.微服务架构以及搭建一个高可用的服务注册与发现的服务模块(Eureka). SpringCloud介绍 Spring Cloud是在Spring B ...
- Django学习系列4:编写第一个简单的应用代码
首页视图编写 lists/tests.py from django.test import TestCasefrom django.urls import resolvefrom lists.view ...
- Django 学习笔记之六 建立一个简单的博客应用程序
最近在学习django时建立了一个简单的博客应用程序,现在把简单的步骤说一下.本人的用的版本是python 2.7.3和django 1.10.3,Windows10系统 1.首先通过命令建立项目和a ...
- django学习系列——python和php对比
python 和 php 我都是使用过,这里不想做一个非常理性的分析,只是根据自己的经验谈一下感想. 在web开发方面,无疑 php 更甚一筹. 从某种角度来说,php 就是专门为 web 定制的语言 ...
- Django学习系列13:Django ORM和第一个模型
ORM—对象关系映射器,是一个数据抽象层,描述存储在数据库中的表,行和列.处理数据库时,可以使用熟悉的面向对象方式,写出更好的代码. 在ORM的概念中,类对应数据库中的表,属性对应列,类的单个实例表示 ...
随机推荐
- 使用checked和unchecked来对整数溢出进行检测和忽略
在C#中,整数int32的取值为-2147483648~2147473647(可以通过int.MaxValue和int.MinValue获得)当超出这个范围后,编译器不会进行检查,仍然会进行运算,但得 ...
- pagefile.sys 虚拟内存
当我们使用电脑的时候,有时候需要更多的内存空间,但是内存条的价格又比较昂贵,我们可以用虚拟内存的方法,把一部分硬盘的空间作为内存使用. 进入控制面板---高级系统设置----高级-----更改---- ...
- 【CSS】聊一聊css的选择器
对于css来说,他的基本语法就是 选择器 { K:V; K:V; K:V } 所以css的学习就分为两个部分: * 1 选择器 ...
- javaweb期末项目-stage1-part2-UML设计
UML设计.rar-下载 说明:解压密码为袁老师全名拼音(小写) 相关链接: 项目结构:https://www.cnblogs.com/formyfish/p/10828672.html 需求分析:h ...
- 【Abode Air程序开发】打包并导出
打包并导出 将移动设备应用程序打包并导出到在线商店 导出用于发行的 Android APK 包 导出用于发行的 Apple iOS 包 使用命令行进行创建.测试和部署 使用 mxmlc 编译手机应用程 ...
- IntelliJ IDEA 2019.2.1 破解教程, 最新激活码(激活到2089年8月,亲测有效,持续更新中...)
当前最新版本 IDEA 2019.2.1 本来笔者这边是有个正版激活码可以使用的,但是,2019.9月3号的时候,一些小伙伴反映这个注册码已经失效了,于是拿着自己的 IDEA, 赶快测试了一下,果不其 ...
- [转帖]intel发布会之前,漫谈CPU核心架构:CCX、Ring Bus、Mesh
intel发布会之前,漫谈CPU核心架构:CCX.Ring Bus.Mesh https://baijiahao.baidu.com/s?id=1607585351741429318&wfr= ...
- MySQL+navicat-1064 Error解决方案
MySQL+navicat-1064 Error解决方案 错误 #1064 - You have an error in your SQL syntax; check the manual that ...
- print格式化输出(format)
一. print格式化输出,以及使用format控制 字符串的格式化方法分为两种,分别为占位符(%)和format方式.占位符方式在Python2.x中用的比较广泛,随着Python3.x的使用越来越 ...
- 【已解决】Field injection is not recommended和Could not autowired. No beans of 'xxx' type found.
目录 问题 解决办法 备注 问题 在项目中,我们使用Spring的@Autowired注解去引入其他类时有时候阿里的编码规约插件就会提示:"Field injection is not re ...