zoukankan      html  css  js  c++  java
  • 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):  # 1
            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,以便访问保存的清单。

  • 相关阅读:
    this,static,执行程序的顺序等等留意点
    PHP 中的 $this, static , self ,parent 等等关键字的总结
    css的继承之width属性(容易忽略)
    SDK和API之间有什么关系呢?
    JDK8下载账号分享
    Google大数据三篇著名论文-中文版
    HBase性能优化方法总结
    Hbase原理解析
    Java多线程
    XMind 是一个全功能的思维导图和头脑风暴软件,为激发灵感和创意而生
  • 原文地址:https://www.cnblogs.com/ranxf/p/11697420.html
Copyright © 2011-2022 走看看