FastAPI 學習之路(三十九)對開發接口進行測試



        對於開發好的接口需要進行測試之后次才能發布。當我們在開發的時候,沒有提測前,我們也要對我們自己的接口進行測試,那么FastAPI 自身也帶了針對開發的接口的測試的。我們看下FastAPI官方給我們了什么樣的支持呢。

        接口還是基於FastAPI 學習之路(三十七)元數據和文檔 URL實現。我們看下如何測試。

from fastapi import FastAPI
from fastapi.testclient import TestClient
from routers.user import usersRouter
from routers.items import itemsRouter

app = FastAPI(docs_url="/openapi",
              redoc_url="/apidoc")
app.include_router(usersRouter, prefix="/user", tags=['users'])
app.include_router(itemsRouter, prefix="/items", tags=['Itmes'])

client = TestClient(app)
def test_read_main():
    response = client.get("/items/items/")
    assert response.status_code == 200
    assert response.json() == []
if __name__=="__main__":
    test_read_main()

 其實很簡單,fastapi里面有個模塊,我們直接導入進來,編寫用例即可。

        可是我們簡單的寫的,運行后只是沒有報錯而已。證明執行成功,但是在實際中,我們做還是不夠的,我們想要看着是否執行通過。如何實現呢。

    我們可以python自帶的unittest來組織測試用例。

    我們看下改造后的。

from fastapi import FastAPI
from fastapi.testclient import TestClient
from routers.user import usersRouter
from routers.items import itemsRouter
import  unittest
app = FastAPI(docs_url="/openapi",
              redoc_url="/apidoc")
app.include_router(usersRouter, prefix="/user", tags=['users'])
app.include_router(itemsRouter, prefix="/items", tags=['Itmes'])

class FastApiTest(unittest.TestCase):
    def setUp(self) -> None:
        self.client = TestClient(app)
    def tearDown(self) -> None:
        self.client=None


    def test_read_main(self):
        response = self.client.get("/items/items/")
        self.assertEqual(response.status_code,200)
        self.assertEqual(response.json(),[])
    def test_read_one(self):
        response = self.client.get("/items/items/?limit=1")
        self.assertEqual(response.status_code, 200)
        self.assertEqual(len(response.json()), 1)


if __name__=="__main__":
    unittest.main()

    我們看下執行結果

 

 我們可以改造下,單獨放在一個test文件中。

 

 改造后的測試文件

from  main import app
import  unittest
from fastapi.testclient import TestClient


class FastApiTest(unittest.TestCase):
    def setUp(self) -> None:
        self.client = TestClient(app)

    def tearDown(self) -> None:
        self.client = None

    def test_read_main(self):
        response = self.client.get("/items/items/")
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.json(), [])

    def test_read_one(self):
        response = self.client.get("/items/items/?limit=1")
        self.assertEqual(response.status_code, 200)
        self.assertEqual(len(response.json()), 1)


if __name__ == "__main__":
    unittest.main()

我們可以執行以下

 

 

這樣我們就實現了對fastapi在開發過程中的接口測試,很簡單,我們也不用啟動服務端。

        

文章首發在公眾號,歡迎關注。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM