當我們在撰寫程式時,需要對自己的程式碼進行自動化測試時,FastAPI 可以使用 Pytest 進行測試。
由於 FastAPI 是基於 Starlette 開發的,Starlette 的網路通訊又是基於 httpx 這個套件,所以說可以輕鬆的使用 Pytest 進行測試。
pip install httpx
pip install pytest
首先我們先需要安裝這兩個套件,以利於後續測試進行。
.
├── src
│ ├── __init__.py
│ ├── main.py
│ └── test_main.py
我們將測試與主程式分離,額外寫一個檔案,而檔案取名要注意,一定要用 test_
開頭,否則 pytest 抓取不到你的測試程式。
# src/main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_main():
return {"msg": "Hello World"}
首先我們有一個簡單的主程式,“/”
路徑可以獲取到 Hello World 訊息。
# src/test_main.py
from fastapi.testclient import TestClient
from src.main import app
client = TestClient(app)
def test_read_main():
response = client.get("/")
assert response.status_code == 200
assert response.json() == {"msg": "Hello World"}
我們在測試檔中使用 TestClient 實體化一個測試用戶端,接著在下面的測試函式中使用它來進行網路通訊 CRUD,接著使用 assert
來確認結果是否符合預期,若 assert
的條件未通過,則該測試便不會成功。
有幾點需要注意:
test_
開頭。撰寫完測試檔後,可以直接在 cmd 下指令 python -m pytest
來對你的程式進行測試,成功抓到測試檔案的話便會如上圖所示。
今天與大家分享的方法是適合於測試整個 api 接口,若需要測試單個函式也可以自己改寫測試文件來達成想要的成效,開發之餘也可以多寫點測試,以保障程式碼的妥善率。