测试驱动开发(TDD)是一个迭代的开发周期,强调编写实际代码之前编写自动化测试。

这个过程很简单:

详尽讲述用Python的Django框架测试驱动开发的教程(python中django框架)  详尽 讲述 Python Django 框架 测试 驱动 开发 教程 脚本之家 第1张

为什么要用TDD?

使用TDD,你将学会把你的代码拆分成符合逻辑的,简单易懂的片段,这有助于确保代码的正确性。

这一点非常重要,因为做到下面这些事情是非常困难的:

TDD帮助我们定位问题。它不能保证你的代码完全没有错误;然而,你可以写出更好的代码,从而能更好地理解理解代码。这本身有助于消除错误,并且至少,你可以更容易的定位错误。

TTD实际上也是一种行业标准。

说的够多了。让我们来看看代码吧。

在这个教程里,我们将创建一个存储用户联系人的app。

请注意: 这篇教程假设你运行在一个基于Unix的环境里 - 例如, Mac OSX, Linux, 或者在Windows下的Linux VM。 我将使用Sublime 2作为文本编辑器。并且,确保你已经完成了官方的Django教程并且基本了解Python语言. 此外,在这个第一篇post里,我们不会涉及到Django1.6提供的新工具。这篇文章将为之后的post打好基础来处理不同形式的测试。

第一个测试

在开始做一些事情之前,我们需要首先创建一个测试。为了这个测试,我们需要让Django正确安装。为此我们将使用一个函数测试——这在下面会详细解释。

    创建一个新目录存放你的项目:
   

$ mkdir Django-tdd $ cd django-tdd

    再建立一个目录存放函数测试
 
     

$ mkdir ft $ cd ft

    创建一个新文件 "tests.py"并加入以下代码:
 

from selenium import webdriver browser = webdriver.Firefox()browser.get('http://localhost:8000/')body = browser.find_element_by_tag_name('body')assert 'Django' in body.text browser.quit()

    现在运行测试:
   

$ Python tests.py

        确认安装selenium(译注:自动化测试软件)时是使用 installed -pip安装的

    你将看到 FireFox弹出来试图打开 :8000/。在你的终端上面你会看到:
   
  

Traceback (most recent call last):File "tests.py", line 7, in <module>assert 'Django' in body.textAssertionError

    祝贺!你完成了第一个失效测试。

    现在我们写足够的代码来让它通过,这些代码量约相当于设置一个 Django 开发环境。


设置Django

1. 激活一个virtualenv:
 

$ cd .. $ virtualenv --no-site-packages env $ source env/bin/activate

2. 安装Django并且建立一个项目
 

$ pip install django==1.6.1$ django-admin.py startproject contacts

你当前的项目结构应该是下面这个样子:

 

复制代码 代码如下:


├── contacts
│   ├── contacts
│   │   ├── __init__.py
│   │   ├── settings.py
│   │   ├── urls.py
│   │   └── wsgi.py
│   └── manage.py
└── ft   
    └── tests.py

3. 安装 Selenium:
 

pip install selenium==2.39.0

4. 运行server
 

$ cd contacts $ python manage.py runserver

5. 接着,打开一个新终端窗口,定位到"ft"文件夹下,再运行一次测试:
 
$ python tests.py

你将看到FireFox又一次窗口导航到了:8000/。这次应该没有错误了。你刚刚已经通过了你的第一个测试!现在,让我们完成环境设置。

6. 版本控制,首先添加一个".gitignore"并且在里面添加下面的代码:
 

复制代码 代码如下:


.Pythonenv
bin
lib
include.DS_Store.pyc

现在来创建一个Git仓库然后提交吧

$ git init $ git add .$ git commit -am "initial"

7. 项目建完了,现在我们回头讨论一下功能测试吧。

功能测试

我们通过用 Selenium 来进行第一次测试。这样的测试会使我们使用web浏览器就像我们是最终用户一样,来看看应用程序实际上是怎么运行的。因为这些测试是遵循最终用户的行为习惯——也可以说是用户用例——这个包含了对一系列产品特点进行测试,而不仅仅对单一功能进行测试——这种更适合单元测试。有一点非常需要注意的是,当这部分测试代码你还没开始写,那么你必须先从功能测试开始。由于我们基本上是测试Django的代码,所以功能测试是一个正确的方法去做的。