前面遗留的问题,首先时功能测试运行结束后的清理;其次是目前我们的待办清单只允许创建一个大家公用的清单。

如何隔离测试,运行功能测试后待办事项一直存在于数据库中,这会影响下一次测试。

运行单元测试时,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:完成最简单可用的网站——确保功能之间相互隔离的更多相关文章

  1. Django学习系列之Form基础

     Django学习系列之Form基础 2015-05-15 07:14:57 标签:form django 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追 ...

  2. scrapy爬虫学习系列二:scrapy简单爬虫样例学习

    系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备:      http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...

  3. .net reactor 学习系列(三)---.net reactor代码自动操作相关保护功能

    原文:.net reactor 学习系列(三)---.net reactor代码自动操作相关保护功能         接上篇,上篇已经学习了界面的各种功能以及各种配置,这篇准备学习下代码控制许可证. ...

  4. Django学习系列6:使用selenium测试用户交互

    学习系列5中的单元测试有报错信息,这儿来编写functional_tests.py文件,扩充其中的功能测试 # File: functional_test.py # Author: Rxf # Cre ...

  5. SpringCloud学习系列之一 ----- 搭建一个高可用的注册中心(Eureka)

    前言 本篇主要介绍的是SpringCloud相关知识.微服务架构以及搭建一个高可用的服务注册与发现的服务模块(Eureka). SpringCloud介绍 Spring Cloud是在Spring B ...

  6. Django学习系列4:编写第一个简单的应用代码

    首页视图编写 lists/tests.py from django.test import TestCasefrom django.urls import resolvefrom lists.view ...

  7. Django 学习笔记之六 建立一个简单的博客应用程序

    最近在学习django时建立了一个简单的博客应用程序,现在把简单的步骤说一下.本人的用的版本是python 2.7.3和django 1.10.3,Windows10系统 1.首先通过命令建立项目和a ...

  8. django学习系列——python和php对比

    python 和 php 我都是使用过,这里不想做一个非常理性的分析,只是根据自己的经验谈一下感想. 在web开发方面,无疑 php 更甚一筹. 从某种角度来说,php 就是专门为 web 定制的语言 ...

  9. Django学习系列13:Django ORM和第一个模型

    ORM—对象关系映射器,是一个数据抽象层,描述存储在数据库中的表,行和列.处理数据库时,可以使用熟悉的面向对象方式,写出更好的代码. 在ORM的概念中,类对应数据库中的表,属性对应列,类的单个实例表示 ...

随机推荐

  1. 【计算机视觉】【并行计算与CUDA开发】GPU硬解码---DXVA

    前面介绍利用NVIDIA公司提供的CUVID库进行视频硬解码,下面将介绍利用DXVA进行硬解码. 一.DXVA介绍 DXVA是微软公司专门定制的视频加速规范,是一种接口规范.DXVA规范制定硬件加速解 ...

  2. 【VS开发】VS2010中导入ActiveX控件

    方法1: 1.首先在在项目上面右击添加类,如下图所示: 2.点击添加ActiveX控件中的MFC类 3.找到需要添加的ActiveX类. 4.点击完成即可. 5.此时转到资源视图,打开如下视图.可能工 ...

  3. kubenetes 的svc从ClusterPort 改为NodePort

    1.yaml文件如下 spec: clusterIP: 10.233.43.125 ports: - name: http-metrics port: protocol: TCP targetPort ...

  4. Linux文件属性之时间戳及文件名知识详解

    ls  -lhi 7.8.9三列是时间(默认是修改时间) modify    修改时间 -----mtime     一般是修改文件内容 change   改变时间----ctime      文件的 ...

  5. 腾讯云CentOS 7搭建简单Tomcat+nginx集群

    1.安装Tomcat 进入 /usr/local/ 目录 cd /usr/local 下载 wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-9/v ...

  6. airflow的web任务管理

    ariflow里绿的代表都跑完了:红的表示有问题:点红的图标进去: 点tree view 红色表示那一天失败: 点进去看可以看log: 点clear则是重跑任务:

  7. E.XKC's basketball team(The Preliminary Contest for ICPC Asia Xuzhou 2019)

    https://nanti.jisuanke.com/t/41387 解: 离散化+线段树. #define IOS ios_base::sync_with_stdio(0); cin.tie(0); ...

  8. Go语言Mac、Linux、Windows 下交叉编译

    在很多时候,由于开发的方便,会有这样的场景出现,使用Mac开发或使用Windows开发,需要编译成Linux系统的执行文件,那么如何做到?Go语言提供了非常方便的命令行操作,即可实现. 1.Mac下编 ...

  9. ale.js 对比其他框架

    欢迎!我们相信你来这里的目的就是为了解 Ale 与其他大型框架的区别,这也正是我们想要在此回答的. 客观来说,作为 Ale 的核心开发者,我们肯定会更偏爱 Ale,认为对于某些问题来讲用 Ale 解决 ...

  10. Java 常提到的自然序(Natural Ordering)

    Natural Ordering常在容器中被提到,和迭代器一起出现. 在Comparable接口的API规范中找到了描述. (https://docs.oracle.com/javase/8/docs ...