使用功能测试协助安装Django
本章节知识分为两部分
一是测试驱动开发(Test-Driven Development,TDD)的基础知识;
二是从零开始写一个Web的应用,并用Selenium进行功能测试和单元测试;
会使用到的Django进行Web应用开发,使用Git进行版本控制
但我们已经决定要开发一个网站。Web 开发的第一步通常是 安装和配置 Web 框架。下载这个,安装那个,配置那个,运行这个脚本……但是,使用 TDD 时要转换思维方式。做测试驱动开发时,你的心里要一直记着测试山羊,像山羊一样 专注,咩咩地叫着:“先测试,先测试!”
在 TDD 的过程中,第一步始终一样:编写测试。
首先要编写测试,然后运行,看是否和预期一样失败,只有失败了才能继续下一步——编 写应用程序。请模仿山羊的声调复述这个过程。我就是这么做的
测试驱动开发的基本思想就是在开发功能代码之前,先编写测试代码。也就是说在明确要开发某个功能后,首先思考如何对这个功能进行测试,并完成测试代码的编写,然后编写相关的代码满足这些测试用例。然后循环进行添加其他功能,直到完全部功能的开发。
本地Django框架搭好后,先进入虚拟空间
workon superlists
创建superlists/functional_tests.py
,检查代码是否一致
注:代码编辑环境可以选择GitBash或者Pycharm,我是前者,需要注意的是,要找到你这段代码的路径
from selenium import webdriver
browser = webdriver.Firefox() #selenium调用浏览器
browser.get("http://localhost:8000") # 访问地址
assert 'Django' in browser.title # 断言浏览器打开后是否有“Django”字段
有了这个Case后,我们现在需要编写功能测试,对代码进行测试
注意: 这里用到了Selenium 库一些方法,具体可以查看:
如果看到关于导入 Selenium 的错误,或者让你查找“geckodriver”错误,需要检查Selnium驱动得版本,我本地的版本是Git bash中运行代码,会在本地打开浏览器,并且输入地址,提示“无法连接”,这里没有启动Django服务,后续还有很多类似的错误,先发现错误,再取解决错误
启动Django服务
启动Django创建项目
$ django-admin.py startproject superlists
Gitbash 里进入自己指定的目录,使用下面命令会自动创建文件夹,并会按目录创建以下子目录,结构如下:
进入项目根目录找到manage.py并启动
我们在superlists目录下,输入下面命令,运行开发服务器
python manage.py runserver
Django 的开发服务器便在设备中运行起来了。让这个命令一直运行着,再打开一个命令行窗口(进入刚刚打开的文件夹),在其中再次运行测试:
新开一个窗口后,进入superlists目录,输入python functional_tests.py
,启动火狐浏览器主页为空白页
手动输入:http://localhost:8000/
会显示下面,表示服务区正在运行
创建Git仓库
我们先把functional_tests.py 移到superlists 文件夹中
然后执行git init 命令,创建仓库并使用功能测试协助安装Django
$ ls
superlists functional_tests.py geckodriver.log
$ mv functional_tests.py superlists/
$ cd superlists
$ git init .
Initialised empty Git repository in /.../superlists/.git/:
将写好的functional_tests.py,移动到相应目录下后,执行初始化空的Git 仓库:
注意:$ git init .
而不是$ git init.
init和.之前有个空格
自此工作目录都是顶层superlists 文件夹
从现在起,我们会把顶层文件夹superlists 作为工作目录。
(简单起见,我在命令列表中都将使用/…/superlists/ 表示这个目录。但实际上,这个目录的真实地址可能是/home/kind-reader-username/my-python-projects/superlists/。)
我提供的输入命令都假定在这个目录中执行。同样,如果我提到一个文件的路径,也
是相对于这个顶层目录而言。因此,superlists/settings.py 是指次级文件夹superlists 中
的 settings.py。
根据书中提示,初始化后,后续所有操作都再顶层superlists 文件夹中
这里有一点很奇怪,按照作者的话,刚才将functional_tests.py从顶级superlists/目录下移动到superlists/superlists/次级目录下,但是下面还有其他操作,有点迷,我只好又移出来了 :)
初始化之后,我们看一下要提交的文件:
$ ls
db.sqlite3 manage.py superlists functional_tests.py
db.sqlite3 是数据库文件,无须纳入版本控制。前面见过的geckodriver.log 是Selenium 的日志文件,也无须跟踪变化。我们要把这两个文件添加到一个特殊的文件.gitignore 中,让Git 忽略它们:
# git提交时忽略db.sqlite3和geckodriver.log
$ echo "db.sqlite3" >> .gitignore
$ echo "geckodriver.log" >> .gitignore
接下来,我们可以添加当前文件夹(“.”)中的其他内容了:
$ git add .
$ git status
这里需要注意的是,我git add .
时,报错如下,提示未初始化,我就git init .
,重新初始化了以下,然后可以正常添加了
添加了很多.pyc 文件,这些文件没必要提交。将其从Git 中删掉,并添加到.gitignore 中:
现在,来看一下进展到哪里了。(你会看到,我使用git status
的次数太多了,所以经常会使用别名git status
)
开始做第一提交:
$ git add .gitignore
$ git commit
输入git commit 后,会弹出一个编辑器窗口,让你输入提交消息。
进入insert编辑输入First commit 后,:wq!保存退出,界面提交信息