iT邦幫忙

2023 iThome 鐵人賽

DAY 21
0
Modern Web

FastAPI 入門30天系列 第 21

Day-21 測試與FastAPI

  • 分享至 

  • xImage
  •  

當我們在撰寫程式時,需要對自己的程式碼進行自動化測試時,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_ 開頭。
  • 測試檔一律使用同步的寫法,可以避免許多麻煩。

https://ithelp.ithome.com.tw/upload/images/20230926/20152669PWn3gPA0uJ.png

撰寫完測試檔後,可以直接在 cmd 下指令 python -m pytest 來對你的程式進行測試,成功抓到測試檔案的話便會如上圖所示。

小結

今天與大家分享的方法是適合於測試整個 api 接口,若需要測試單個函式也可以自己改寫測試文件來達成想要的成效,開發之餘也可以多寫點測試,以保障程式碼的妥善率。

參考文件

测试 - FastAPI (tiangolo.com)


上一篇
Day-20 SlowAPI 與 FastAPI
下一篇
Day-22 並發與非同步
系列文
FastAPI 入門30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言