介面自動化測試框架 HttpFPT

wu-clan發表於2024-03-12

前言

作為一名軟體測試工程師來講,很大程度上,都會有一個預知的成長過程:點點點 -> 自動化測試 -> 測試開發 -> 點點點

很久以前,在我剛剛接觸 unittest 的時候,我一直看不起 pytest,什麼東西!於是就用 unittest 做了一些簡單的東西,享受著自動化帶來的迴歸體驗,久而久之,漸漸的體會到了 unittest 的臃腫,但是一切基於程式碼的呼叫仍然讓我感覺很愜意(如果你也喜歡閱讀原始碼)

後來我接觸到了小菠蘿(這個部落格園自建主題,相信很多人都找不到了吧),是的,她發公告轉移到了語雀,剛開始的語雀,我不得不吐槽,卡的要死,載入東西載入半天,不過,好在小菠蘿的文章寫的是真不錯,我從中學到了很多,包括 pytest

某個年初,一波新型變異冠狀病毒席捲魔都,從剛開始的日增幾十幾百到不可控制,讓 99% 以上的人在二十一世紀的上海吃不上飯,居家隔離從剛開始通知的 7 天迎來了未知,出租屋中,我開啟電腦,無聊的逛著 Github, 瀏覽著技術文章,這時我看到了 pytest,這不正好是個機會麼,讓對 pytest 感興趣的我找到了事情做,基礎的 pytest 程式碼實在是太方便了,比 unittest 靈活太多,於是根據我原有的 unittest api 框架,開始著手進行 pytest 改造

HttpFPT

一款基於資料驅動的 HTTP 介面自動化測試框架

命名:HTTP + Fast(Favorite)+ Python + Test

簡稱:HttpFPT

發展

pytest 很好入門,邊看邊改造,基於 pytest 的介面自動化框架它就改造完成了,我最初的 unittest api 框架僅僅包含介面的請求資料,雖然是資料驅動,但是僅僅包含傳送請求,像前後置,引數化,環境化等等什麼都沒有,固然,此時的 pytest api 亦是如此;

疫情那段時間 httprunner 非常火爆,很多大佬們都將它作為了基礎請求程式碼開發測試平臺,於是我有了加入了 httprunner 群體的想法,httpfpt 被擱置了... httprunner 確實好用,而且開源,用了沒多久,我產生了繼續更新 httpfpt 的想法,在無敵哥的交流群裡面,包括龍哥大君等眾多小夥伴都有推薦過七月小姐姐的自動化測試框架,於是我將七月的程式碼 clone 到了本地,開始閱讀原始碼

小插曲:在建立 httpfpt 期間,我在吃不飽飯的上海還順便學習了 fastapi 和 django-ninja,並且使用 django-ninja 直接開始了自動化測試平臺的實驗:NinjaXia,但這對於我來講是跨越性的,並且在沒有足夠技術支撐的情況下,我在這上面花費了大量時間,同時也是隻有簡單的傳送請求

七月當時的程式碼風格我不是很喜歡,感覺 J 裡 J 氣的,受到 PEP8 的影響,並且我有高度強迫症,體會了一些框架設計的思路,我便沒再繼續閱讀了

在此期間,國內也同時出現了一個介面平臺廣告巨頭:Apifox,不過,說實話,我挺喜歡它的設計的,並且很多功能抄 postman 抄的爐火純青,為此,結合 Apifox 和 postman,我開始繼續改造 httpfpt 了

設計

(由於平臺顯示限制,點選下載流程圖,檢視高畫質版)

httpfpt\_flowchart

因為最初我的程式碼提交習慣:一次性提交,所以,我直接來了一個版本升級一次性提交,迎來了 0.0.2 版本標記,現在它開始支援資料引數化和 python 鉤子函式了

緊接著請求前後置,用例關聯,webhook,redis,jwt-token 陸續進行了更新,感興趣的小夥伴可以檢視提交網路圖

現在,我以發版的形式進行更新記錄,這樣也更有利於提供我持續更新它的動力

功能點

1. 多專案支援

不確定這是不是一個有用的功能,但我一直在使用它,從最初的 UI 自動化測試框架設計開始,它就被作為我的一個標磚設計進行實施;基本原理是透過配置檔案設定專案名稱,從而達到控制一切路徑和路由的目的,目的是可以將多個專案統一存放在一個框架中,並且測試資料互不干擾

2. 測試資料隔離

測試資料完全與測試用例分離,無需進行測試用例修改,只需要修改測試資料就能完成測試,並且測試資料經過嚴格的自動解析與驗證,我在資料驗證上面花費了大量時間,儘可能可以在日誌和測試報告中能輕鬆地精確定位到錯誤觸發點

3. 環境配置

在使用介面測試工具 postman,apifox 等工具的時候,環境切換是我經常使用的一個功能,於是,我將它整合到了框架中,這對目前比較流行的 openapi / restful 來說,是非常友好的,並且,同一個專案中的用例,對於不同的測試資料,可以選擇不同的環境,同時支援在環境檔案中設定變數

4. 動態引數化

變數支援是一個非常好的功能,參考 apifox,我新增了全域性變數,區域性變數,快取變數;另外還新增了關聯變數

5. 資料依賴

這是關聯變數的另一個說法,就是一個介面的資料依賴另一個介面請求後的資料,從而達到資料依賴,前提是,上一個介面請求成功,否則都將失敗

6. 鉤子函式

目前,它僅僅是支援基於 python 程式碼的,我並沒有在原始碼中新增大量方法,這裡需要你自由發揮,對於基礎的 faker 資料,很容易新增,但是我認為,它不僅侷限於此,或許,後期還會進行改造,目前,faker 資料應該是一個比較常見的使用方法

7. 日誌記錄

日誌記錄是自動的,對於請求而言,請求資料是完全記錄的,包括文字中,測試報告中,同時,你可以透過開關控制是否開啟

8. 斷言

常見的斷言型別包含 json 斷言(jsonpath),sql 斷言(jsonpath), jsonschema 斷言,正則斷言,我還自己編寫了一個原生 assert 斷言方法,它可以支援絕大部分簡單形式的 python assert,並且還透過 dirty-equals 進行了擴充套件支援,請注意,未進行大量測試

9. 測試用例自動生成

測試用例支援透過 CLI 自動生成,不需要頻繁的手動建立,你不需要擔心它們的檔案,類,方法命名,他們是基於測試資料檔案建立的

10. 自動測試報告

這是一個基本功能,不需要過多說明,支援 html, allure

11. 自動測試結果通知

基本功能,支援飛書,釘釘,企業微信,郵箱

xx. (more and more)

......

文件

使用文件是基於 vuepress 編寫的,好看,好用,感謝龍哥推薦

See documentation for more details.

更多

需要更多說明請留言吧,我將進行補充😆

相關文章