Flask Web 測試驅動開發最佳實踐 之 開篇

前言


一直都有聽到 TDD 測試驅動開發的開發方式,之前看了一本 《Python Web開發測試驅動方法》,這本書基於 Django 框架嚴格遵循測試驅動開發(TDD)的方式去實現一個簡單網站。一直都很想嘗試這種方式進行一次簡單的TDD實踐,這篇文章就使用我之前的 仿V2EX 網站項目來一步步實踐。

TDD


測試驅動開發(Test-driven development)簡稱 TDD,是一種軟件開發過程中的應用方法,,由極限編程中倡導,以其倡導先寫測試程序,然後編碼實現其功能得名。

測試驅動開發是戴兩頂帽子思考的開發方式:先戴上實現功能的帽子,在測試的輔助下,快速實現其功能;再戴上重構的帽子,在測試的保護下,通過去除冗餘的代碼,提高代碼質量。測試驅動着整個開發過程:首先,驅動代碼的設計和功能的實現;其後,驅動代碼的再設計和重構。以上概念來源於維基百科

需求分析


相信各位讀者都已經知道 V2EX 社區,首先一個技術社區需要有以下幾個功能:

  • 話題:發佈話題、修改話題、追加話題等
  • 節點:話題的歸類
  • 用戶:標識你在社區的身份
  • 評論:評論話題,技術社區最主要的功能
  • 用戶關係:用戶之間能相互關注

以上幾個功能對一個技術社區來說是十分重要的,本文是要使用 TDD 方式實現這樣一個社區,因此在這裏介紹一下

編寫測試


首先測試驅動開發的第一步就是:編寫測試。上一節已經提到了一些需求,這裏就根據這些需求寫一個簡單的測試,並設法讓其通過。首先是用戶功能,一個用戶需要有註冊、驗證、登錄等步驟後才能真正在社區中發佈話題等功能。

本文使用 GitHub 來託管項目代碼,這裏新建一個項目名稱叫 v2ex, 初始結構如下:

v2ex
├── LICENSE
└── README.md

然後新建一個 tests 文件夾,用於保存測試代碼,爲什麼要建 tests 文件夾,而不是在根路徑下建個測試文件就好了,這不是良好的項目結構,本文根據項目最佳結構來實踐。然後在tests 文件夾下新建測試文件test_user.py, 下面是項目的當前結構:

v2ex
├── LICENSE
├── README.md
└── tests
    └── test_user.py

1 directory, 3 files

項目已經存在了,先彆着急編寫測試代碼,先把開發環境搭建起來,下一節介紹如何搭建一個完美的 Python 開發環境。

虛擬環境


本文基於 python3.7 版本,使用 pipenv 來管理開發環境,可能有些人沒有使用過 pipenv。這東西對於管理虛擬環境而言太好用了,具體使用可參照官網或者 使用pipenv管理你的項目 這篇文章來使用。
本文假設你已經存在了 Python3.7 環境了,然後可以通過pip 來安裝pipenv

pip install pipenv -i https://pypi.tuna.tsinghua.edu.cn/simple(如果配了就不要-i後面的)

如果不瞭解 pipenv,可以通過下面來參考相關命令:

$ pipenv -h
........(省略)
Usage Examples:
   Create a new project using Python 3.6, specifically:
   $ pipenv --python 3.6

   Install all dependencies for a project (including dev):
   $ pipenv install --dev

   Create a lockfile containing pre-releases:
   $ pipenv lock --pre

   Show a graph of your installed dependencies:
   $ pipenv graph

   Check your installed dependencies for security vulnerabilities:
   $ pipenv check

   Install a local setup.py into your virtual environment/Pipfile:
   $ pipenv install -e .

   Use a lower-level pip command:
   $ pipenv run pip freeze

安裝後 pipenv 後,在 v2ex 根路徑下創建虛擬環境,即是通過

$ pipenv --python 3.7

執行完這條命令後,就默認幫你創建好一個Python虛擬環境了,然後可以通過

$ pipenv shell 進入虛擬環境中

仔細觀察 v2ex 根路徑多了個 Pipfile 文件,該文件其實和以前的 requirements.txt 文件一樣保存項目的各種依賴庫的信息, 這個Pipfile 文件結構如下:

[[source]]
url = "https://pypi.tuna.tsinghua.edu.cn/simple" # 修改成國內源
verify_ssl = true
name = "pypi"

[packages]

[dev-packages]

[requires]
python_version = "3.7"

so,因爲使用的是 Flask 框架,那就先安裝一下 Flask 吧,使用以下命令安裝,注意不是使用 pip 安裝了

$ pipenv install flask

如果安裝過程出現TypeError: 'module' object is not callable 錯誤
你需要

$ pipenv run pip install pip==18.0
$ pipenv install

最簡單的 Flask 環境已經搭建好了,可以使用 git 進行一次提交了,本文會基於 git 來分階段提交代碼,不瞭解 git 的同學要自己反省一下了。
下面看看當前項目的文件結構

v2ex
├── LICENSE
├── Pipfile
├── Pipfile.lock
├── README.md
└── tests
    └── test_user.py

然後使用Git提交至遠程倉庫

在 v2ex 的根路徑下
$ git add .
$ git commit -m "add tests and pipfile"
$ git push origin master

總結


本文主要介紹了使用 TDD 方式實現一個技術社區,並初步介紹了 TDD 的概念,然後構建了項目的測試結構,介紹了社區的相關需求,後續會根據需求來開發,最後搭建了一個Python 開發環境來隔離本地環境。本文主要兼顧各層次的讀者,所以就介紹了一些最基本的東西,後續主要以 TDD 開發實現爲主了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章