精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

FastAPI 之自動化測試數據庫接口

運維 數據庫運維 自動化
今天的文章分享如下在 FastAPI 框架下,使用 pytest 來自動化測試數據庫相關的接口,文章的最后給出全部代碼。

[[442950]]

今天的文章分享如下在 FastAPI 框架下,使用 pytest 來自動化測試數據庫相關的接口,文章的最后給出全部代碼。

最近越來越喜歡使用 FastAPI 來寫后端服務了,因為它是 Python 領域性能最好的 Web 框架,它專注于提供高性能的 Web API,其他方面并不限制你的手腳,可以隨意使用你喜歡的三方庫,這點類似于 Flask,可以量身定制你的后端架構,以滿足自己的需求。

需要說明的是,后端服務基本是離不開關系型數據庫的,我之前是使用 Django,Django 的 ORM 太優秀了,以至于我從 Django 轉 FastAPI 有點很不適應。在 ORM 領域,可以說除了 Django 的 ORM,就是 SQLAlchemy 了。所以不用 Django,就必須會用 SQLAlchemy,要快速了解,看看廖雪峰的官方網站的使用 SQLAlchemy[1] 來快速入門。

FastAPI 涉及數據庫的接口寫起來并不難,跟著官方文檔sql_databases[2],5 分鐘,我們就可以生成關于數據庫的增刪改查的 Restful 風格的 API,難的是如何自動化的測試,

通常情況下,我們會使用 pytest 進行自動化單元測試,根據數據庫的記錄數來斷言,但是,每測試一次,數據庫中的記錄就保存了下來,你下次測試時如果不手動清理,那測試仍然可能失敗。

那怎么解決呢?

那就是利用數據庫的回滾功能,會改變數據庫記錄的接口測試完成后讓事務回滾,這樣每次測試完成后,數據庫的記錄數是不變的,每次運行 pytest,數據庫的記錄數是不變的,這樣就可以進行自動化測試。

要想實現這一點,我們需要借助于 pytest 的 fixture 功能。

pytest.fixture 是一個裝飾器,用于聲明函數是一個 fixture。如果測試函數的參數列表中包含 fixture 名,那么 pytest 會檢測到,并在測試函數運行之前執行 fixture。

比如:

  1. import pytest 
  2.  
  3. @pytest.fixture() 
  4. def some_data(): 
  5.     return 42 
  6.  
  7. def test_some_data(some_data): 
  8.     assert some_data==42 

fixture 包含一個 scope 的可選參數,用于控制 fixture 執行配置和銷毀邏輯的頻率:

  • scope='function' 函數級別的 fixture 每個測試函數只運行一次。配置代碼在測試用例運行之前運行,銷毀代碼在測試用例運行之后執行。function 是 fixture 參數的默認值。
  • scope='class' 類級別的 fixture 每個測試類只運行一次,不管測試類中有多少個類方法都可以共享這個 fixture
  • scope='module' 模塊級別的 fixture 每個模塊只運行一次,不管模塊里有多少個測試函數,類方法或其他 fixture 都可以共享這個fixture
  • scope='session' 會話級別的 fixture 每次會話只運行一次。一次 pytest 會話中的所有測試函數、方法都可以共享這個 fixture

比如說讓數據庫回滾的,我們就可以寫一個這樣的 fixture:

  1. @pytest.fixture(scope="function"
  2. def db(db_engine): 
  3.     connection = db_engine.connect() 
  4.     # begin a non-ORM transaction 
  5.     connection.begin() 
  6.     # bind an individual Session to the connection 
  7.     db = Session(bind=connection
  8.     # db = Session(db_engine) 
  9.     app.dependency_overrides[get_db] = lambda: db 
  10.     yield db 
  11.     db.rollback() 
  12.     connection.close() 

當然還有很多 fixture,比如說創建數據庫引擎:

  1. @pytest.fixture(scope="session"
  2. def db_engine(): 
  3.     engine = create_engine(SQLALCHEMY_DATABASE_URL) 
  4.     if not database_exists: 
  5.         create_database(engine.url) 
  6.  
  7.     Base.metadata.create_all(bind=engine) 
  8.     yield engine 

再比如,在測試前,數據庫中先插入 2 條數據:

  1. @pytest.fixture 
  2. def items(db): 
  3.     create_item(db, schemas.ItemCreate(title="item 1")) 
  4.     create_item(db, schemas.ItemCreate(title="item 2")) 

把這些 fixture 函數放在文件名conftest.py 中,pytest 會自動讀取并執行。至于為什么放在 conftest.py中,請查閱 pytest 文檔,這里不展開,

接下來,利用這些 fixture,編寫單元測試用例,一個示例如下:

  1. from fastapi.testclient import TestClient 
  2. from . import crud 
  3. from .main import app 
  4.  
  5. def test_post_items(db): 
  6.     client = TestClient(app) 
  7.     client.post("/items/", json={"title""Item 1"}) 
  8.     client.post("/items/", json={"title""Item 2"}) 
  9.     client.post("/items/", json={"title""Item 3"}) 
  10.  
  11.     items = crud.get_items(db) 
  12.     assert len(items) == 3 
  13.  
  14.  
  15. def test_list_items(items, client): 
  16.     response = client.get("/items"
  17.     assert len(response.json()) == 2 

其中 test_post_items,測試的是提交了 3 個數據,然后斷言數據庫中的記錄數為 3。test_list_items 有個參數是 items,會調用之前的 fixture,提前往數據庫插入了 2 條記錄,因此斷言記錄數為 2。

每個測試函數執行時互不影響,執行完成后,數據庫都會回滾,測試前 items 是空的,測試之后 表仍然是空的,這樣就可以自動進行數據庫的測試了。

完整代碼

不能選擇 sqlite 數據庫進行測試,因為它不支持并發訪問。

 

代碼的數據庫配置為 mysql,用戶名、密碼、數據庫名請自行修改后執行。

 

責任編輯:武曉燕 來源: Python七號
相關推薦

2013-06-07 19:04:15

測試

2018-05-11 08:29:10

Python自動化測試數據驅動

2018-05-11 13:39:05

PythonCSV接口測試

2023-05-18 14:01:00

前端自動化測試

2017-01-17 15:14:49

MySQL數據庫自動化

2011-04-01 15:07:29

數據庫自動化

2023-09-13 11:40:12

2022-12-26 12:30:28

接口測試

2022-02-17 10:37:16

自動化開發團隊預測

2012-02-27 17:34:12

Facebook自動化

2021-09-03 09:56:18

鴻蒙HarmonyOS應用

2013-05-16 10:58:44

Android開發自動化測試

2014-04-16 14:15:01

QCon2014

2010-12-21 13:13:10

BMC數據庫自動化服務

2011-12-23 17:09:57

自動化測試

2021-06-30 19:48:21

前端自動化測試Vue 應用

2012-12-24 22:54:31

2024-11-01 15:05:12

2016-09-23 09:22:12

2022-08-14 16:11:23

Python自動化測試數據
點贊
收藏

51CTO技術棧公眾號

蜜臀久久精品久久久久| 福利所第一导航| 99riav视频一区二区| 中文字幕一区二区不卡 | 久久久久久蜜桃| 日韩欧美四区| 在线不卡欧美精品一区二区三区| 国产毛片久久久久久国产毛片| 飘雪影院手机免费高清版在线观看 | av电影在线观看完整版一区二区| 国产成人中文字幕| 黄色一级视频免费观看| 国产精品亚洲人成在99www| 3d成人h动漫网站入口| 激情六月丁香婷婷| 日韩另类在线| 亚洲欧洲精品一区二区精品久久久 | 97人人做人人爱| 三级黄色录像视频| 一区二区美女| 精品国产凹凸成av人网站| 福利在线一区二区三区| 懂色av一区| 国产精品不卡在线| 日韩成人av网站| 国产综合无码一区二区色蜜蜜| 青青草伊人久久| 欧美在线欧美在线| 国产精品19乱码一区二区三区| 国产精品毛片久久| 在线播放日韩专区| 亚洲专区区免费| 成人爽a毛片| 欧美一区二区三区视频| 成人免费在线观看视频网站| 伊人久久av| 香蕉影视欧美成人| 国产一区二区三区在线免费| 国产原创在线观看| 国产精品传媒视频| 亚洲一区美女| 三级外国片在线观看视频| 久久精品欧美日韩| 欧美三级网色| 黄色毛片在线看| 91麻豆免费看| 久久综合福利| 你懂的在线观看视频网站| 波多野结衣在线aⅴ中文字幕不卡| 亚洲自拍欧美色图| 国产成人精品一区二区无码呦| 狠狠色丁香婷综合久久| 成人网在线观看| 国产露脸国语对白在线| 精品在线亚洲视频| 成人欧美一区二区三区黑人孕妇 | 日韩精品在线观看网站| 一级欧美一级日韩片| 精品综合久久88少妇激情| 亚洲成av人片在线观看香蕉| 男女一区二区三区| 亚洲宅男网av| 中文字幕欧美专区| 黄色录像一级片| 欧美激情第二页| 欧美极品欧美精品欧美视频| www.国产高清| 日日摸夜夜添夜夜添精品视频 | 欧美高清在线观看| 日韩成人免费在线观看| 欧美亚洲一区| 国产精品欧美久久久| 国产一区二区小视频| 国产寡妇亲子伦一区二区| 国产精品青青草| 久草福利在线| 日韩一区欧美一区| 久草免费福利在线| 怡红院成人在线| 欧美精品乱码久久久久久| 韩国三级hd中文字幕有哪些| 精品女人视频| 在线观看国产成人av片| 欧美丰满艳妇bbwbbw| 国产亚洲福利| 国产日韩精品视频| 亚洲国产精品一| 久久九九影视网| 欧洲美女和动交zoz0z| 春色校园综合激情亚洲| 欧美色爱综合网| 国产chinesehd精品露脸| 日韩美脚连裤袜丝袜在线| 中国人与牲禽动交精品| 国产性猛交普通话对白| 日本伊人午夜精品| 成人免费视频视频在| 免费福利在线视频| 一区二区三区国产豹纹内裤在线| 99999精品视频| 日本免费精品| 国产亚洲精品成人av久久ww| 好吊色视频在线观看| 久久中文精品| 国产高清自拍99| avtt亚洲| 欧美日韩在线一区| 黑人巨大猛交丰满少妇| 成人精品影院| 欧美在线视频一二三| 国产成人毛毛毛片| 中文字幕不卡的av| 国产视频九色蝌蚪| 免费观看在线一区二区三区| 在线播放国产一区中文字幕剧情欧美| 精品亚洲永久免费| 国产综合色在线视频区| 日本一区不卡| 日韩精品美女| 精品日韩一区二区三区免费视频| 人人爽人人爽人人片| 日韩视频中文| 91入口在线观看| 黄页视频在线播放| 欧美三级视频在线观看| 在线免费看黄视频| 新67194成人永久网站| 国产日韩精品推荐| 欧美黄色视屏| 欧美一区二区三区免费| 日本黄区免费视频观看| 日日夜夜精品免费视频| 日本一区不卡| 日韩制服一区| 亚洲天堂男人天堂女人天堂| www日韩精品| k8久久久一区二区三区| 日本人体一区二区| 成人香蕉社区| 欧美劲爆第一页| 成人免费公开视频| 一级做a爱片久久| 亚洲天堂小视频| 欧美日韩免费观看一区=区三区| 成人av资源在线播放| 欧洲不卡视频| 7777精品伊人久久久大香线蕉完整版 | 亚洲永久无码7777kkk| 亚洲国产精品一区| 精品国产一区二区三| 99爱在线观看| 日韩不卡在线观看| 久久精品视频5| 久久婷婷国产综合国色天香 | 国内成+人亚洲+欧美+综合在线| 日韩精品一区二区三区外面 | 国产精品夜夜夜| 欧美大香线蕉线伊人久久| 中文字幕在线高清| 国产亚洲精品久久久久久牛牛| 中文字幕观看视频| 亚洲日穴在线视频| 熟女人妻一区二区三区免费看| 国产一区观看| 久久久久久草| 高清在线一区| 久久精品在线视频| 亚洲av永久无码国产精品久久| 亚洲成人自拍网| 日韩精品卡通动漫网站| 蜜臀精品一区二区三区在线观看| 中国人体摄影一区二区三区| 香蕉大人久久国产成人av| 欧美亚洲第一页| 国产在线播放av| 5858s免费视频成人| 中文字幕一区二区三区手机版| 99免费精品在线| www.天天射.com| 中文字幕免费一区二区三区| 韩日午夜在线资源一区二区| 91九色综合| 欧美激情久久久久久| 毛片网站在线| 日韩一区二区在线观看| 五月婷婷视频在线| 中文字幕一区免费在线观看| 亚洲黄色小说在线观看| 视频在线观看91| 久久综合亚洲精品| 精品久久电影| 福利视频一区二区三区| 亚洲va中文在线播放免费| 久久av中文字幕| 免费在线黄色电影| 欧美成人性福生活免费看| 天天综合久久综合| 亚洲国产欧美另类丝袜| gv天堂gv无码男同在线观看| 成人av午夜电影| 亚洲精品自拍网| 国产视频一区免费看| 99久久久无码国产精品性色戒| 日韩有码中文字幕在线| 91中文字幕在线观看| 欧美羞羞视频| 97国产真实伦对白精彩视频8| av在线免费观看网站| 亚洲国产小视频| 国产精品一级视频| 在线欧美日韩国产| 亚洲精品视频在线观看免费视频| 中文字幕在线不卡| 欧洲美熟女乱又伦| 99久久夜色精品国产网站| www.色.com| 美女尤物国产一区| 日韩一级免费在线观看| 亚洲一卡久久| 日本wwwcom| 欧美国产免费| 国产一区一区三区| 99re66热这里只有精品8| 免费在线一区二区| 日本国产精品| 国产一区免费视频| 岛国av一区| 国产精品 日韩| 9国产精品午夜| 亚洲最大福利网| 精品久久国产一区| 亚洲一区亚洲二区| 伊人亚洲精品| 成人激情视频在线| 深夜福利亚洲| 成人国产在线激情| av在线亚洲一区| 国产色婷婷国产综合在线理论片a| 性高爱久久久久久久久| 国产不卡av在线| 男人皇宫亚洲男人2020| 欧美在线xxx| 性爽视频在线| 国产91在线播放精品91| 欧美日韩视频网站| 国产精品女人网站| 成人在线视频www| 亚洲一区国产精品| 国产香蕉精品| 久久本道综合色狠狠五月| 午夜精品福利影院| 神马影院午夜我不卡| 欧美日韩精品一区二区视频| 亚洲高清精品中出| 68国产成人综合久久精品| 日本一道在线观看| 影音先锋中文字幕一区| 欧美性久久久久| 石原莉奈在线亚洲三区| 日本黄色的视频| 国产精品羞羞答答xxdd| 久草视频福利在线| 2020国产精品| 毛片aaaaaa| 亚洲欧美激情在线| 日本少妇在线观看| 在线观看一区二区精品视频| 亚洲手机在线观看| 欧美成人乱码一区二区三区| 亚洲色欧美另类| 国产一区二区三区精品久久久| 在线看黄色av| 午夜精品www| 91在线亚洲| 国产精品一区二区欧美| 国产成人三级| 影音先锋男人的网站| 日韩一区二区免费看| 在线观看的毛片| 国产成人av一区二区三区在线| 一本色道综合久久欧美日韩精品| 日本一区二区动态图| 亚洲色图综合区| 欧美色播在线播放| 一二区在线观看| 亚洲精品国产成人| 麻豆网站在线观看| 97在线视频国产| 久久青草视频| 久久99久久99精品蜜柚传媒| 天天综合国产| 欧美色图另类小说| 国产盗摄女厕一区二区三区| 97伦伦午夜电影理伦片| 亚洲伦理在线精品| 看黄色一级大片| 亚洲а∨天堂久久精品喷水| 日韩美女网站| 66m—66摸成人免费视频| 四虎精品在线观看| 九九九九久久久久| 亚洲自拍偷拍网| 国产情侣av自拍| 成人va在线观看| 国产美女福利视频| 色先锋资源久久综合| 超碰在线人人干| 日韩一区二区av| 韩漫成人漫画| 国产美女精品在线观看| 999精品在线| 欧美日韩在线免费播放| 成a人片国产精品| 日韩在线观看视频一区二区| 在线观看视频91| 天堂91在线| 九色精品美女在线| 天堂久久一区| 亚洲欧洲日韩精品| 日韩电影在线一区| 熟女少妇一区二区三区| 亚洲成人免费电影| www.亚洲黄色| 九九热这里只有精品免费看| 91精品一区| 亚洲资源视频| 久久99精品视频| 亚洲一级理论片| 在线观看免费亚洲| 精品一二三区视频| 日本aⅴ大伊香蕉精品视频| 国产精品chinese在线观看| 国风产精品一区二区| 国产一区二区不卡在线| 搜索黄色一级片| 91精品在线麻豆| 精品自拍一区| 亚洲最大福利网站| 欧美激情aⅴ一区二区三区| 特黄特色免费视频| 一区二区三区高清在线| 亚洲精品97久久中文字幕| 久操成人在线视频| 草莓视频一区二区三区| 免费av手机在线观看| 99国产精品视频免费观看| 亚洲久久在线观看| 亚洲人av在线影院| 国产精品亚洲一区二区三区在线观看| 久久精品aaaaaa毛片| 久久性天堂网| 亚洲一二三四视频| 777亚洲妇女| 污片视频在线免费观看| 国产精品视频免费观看| 亚洲激情网址| 午夜时刻免费入口| 欧美理论电影在线| 欧美xxxx少妇| 精品久久久久久亚洲| 欧美资源在线| 国产精品久久久久久成人| 337p亚洲精品色噜噜噜| 青春草视频在线| 久久久久九九九| 久久精品久久综合| 久久黄色免费网站| 日韩麻豆第一页| 国产精品无码久久久久| 欧美交换配乱吟粗大25p| 91免费在线视频观看| 中文字幕黄色片| 精品激情国产视频| 老司机在线精品视频| av丝袜天堂网| 亚洲激情成人在线| 青青青草原在线| 成人网中文字幕| 国产亚洲福利| 91精品国产闺蜜国产在线闺蜜| 精品国产一区二区三区久久影院| 国产伦理精品| 中日韩在线视频| 99re6这里只有精品视频在线观看| 波多野结衣视频免费观看| 欧美情侣性视频| 精品72久久久久中文字幕| 69久久精品无码一区二区| 精品美女国产在线| 思思99re6国产在线播放| 狠狠干一区二区| 久久99这里只有精品| 日韩精品无码一区二区| 日韩中文字幕免费视频| 老司机精品在线| 日韩欧美中文视频| 在线一区二区三区四区五区| 久久一卡二卡| 亚洲一区二区三区欧美| 91蝌蚪porny九色|