—— Pytest基礎使用教程【1】
引言
Pytest 是一個非常實用的自動化測驗框架,目前來說資料也是非常多了,最近某友人在學習 Python的一些測驗技術,幫其網上搜了下教程;發現大多數文章多是在介紹入門 又或者 多是聚焦在 Pytest 的一些語法 和 提供的功能上,對于如何實際功能中使用方面教程介紹不多,介于此,寫這篇教程選豆瓣網來作為 黑盒評測 物件為例,
功能服務分析
一個社區網站登陸往往是比較常用功能之一,因此選取登陸作為本次自動化測驗教程場景,由于本人非豆瓣研發,對其功能服務實作不了解,首先簡單分析下豆瓣登陸相關流程,不用特別專業的工具 普通的 Chrome瀏覽器 就行,
先打開一個隱身標簽瀏覽器,訪問豆瓣用戶登陸頁面,除開一些資源檔案,最關鍵處第一次訪問后會在 Cookie 里面寫入一個 bid 的變數,推測這個變數應該是用來辨識訪問用戶的唯一性,主流網站的常見設計之一,

接下來,輸入一個錯誤的賬號/密碼(jack/123456) 看下登陸互動的服務鏈路以及相關介面,

. 輸入賬號觸發 stat.html(login_start) 請求;
. 點擊按鈕發起 stat.html(login_click) 請求;
. 同時發起 login/basic 登陸驗證 請求;
. 再次進行 stat.html(login_error) 請求;
整體推測 stat 應該 通過 bid 用來記錄唯一用戶行為的狀態服務,同時也為賬號安全場景辨識(比如:無用戶行為連續發起 login/basic 驗證請求可能是惡意程式訪問等)提供基本的行為資料,最后整體梳理下功能服務,

測驗服務用例設計
通過以上的功能服務分析,登陸鏈路中核心的服務為 login/basic ,可以通過一些測驗方法論,對其設計出很多的 Case 來,本篇就以 3個 Case 作為用例進行自動化測驗實踐:
1、訪問 login/basic 沒有bid相關引數時,服務回傳 parameter_missing 缺少引數的資訊;
2、訪問 login/basic 用戶/密碼不匹配正確時,回傳 unmatch_name_pas_word 用戶密碼不匹配的資訊;
3、訪問 login/basic 用戶/密碼正確時,完成豆瓣用戶登陸,回傳個人相關資訊;
還可以考慮更多的 Case 比如考慮到安全,如果連續不斷請求 login/basic 時,應該進行驗證碼驗證,還可以結合用戶行為測驗等等,在此就不展開了,
基于Pytest實作
首先建立 test-01.py,來作為腳本檔案,對于測驗一個 HTTP服務 來說,一般都需要模擬一些頭部資訊,這里簡單設定下,來源于Mac OS X 、AppleWebKit等,唯一用戶標識生成可能會用到,

定義一個函式來模擬剛剛分析程序中訪問豆瓣用戶中頁面的場景,同時,把Cookie 列印出來用于檢查 bid 引數,

類似的,定義一個函式來模擬訪問測驗的服務 login/basic,考慮到其需要 Cookie 里的相關引數,為此單獨 拎出 來作為引數,

從功能服務分析來看,stat 的訪問比較多,為了方便 寫測驗用例復用代碼,用一個 class 物件來進行統一管理,通過定義物件相關方法,來模擬相關 stat服務請求,詳細可以看具體代碼,

測驗登陸程序中,賬號往往是很多測驗用例會使用到的,因此使 @pytest.fixture()機制來進行復用

最后是測驗 Case 的實作了,這里往往會是最簡單的,主要對 Http服務狀態進行assert 判斷 和 先前列出的 3個 Case 中業務回傳 message 進行檢驗,詳細的見代碼邏輯以及注解,

最終測驗報告
最后將寫好的自動化測驗腳本 使用pytest 運行,借助 pytest-html 插件自動生成測驗報告:

具體相關case測驗相關詳細日志

如果對代碼感興趣的可以關注公眾號,私信代碼,
其他
黑盒測驗也稱功能測驗,它是通過測驗來檢測每個功能是否都能正常使用,在測驗中,把程式看作一個不能打開的黑盒子,在完全不考慮程式內部結構和內部特性的情況下,在程式介面進行測驗,它只檢查程式功能是否按照需求規格說明書的規定正常使用,程式是否能適當地接收輸入資料而產生正確的輸出資訊,
百度百科
在軟體測驗中, 自動化測驗指的是使用獨立于待測軟體的其他軟體來自動執行測驗、比較實際結果與預期并生成測驗報告這一程序,在測驗流程已經確定后,測驗自動化可以自動執行的一些重復但必要測驗作業,也可以完成手動測驗幾乎不可能完成的測驗,對于持續交付和持續集成的開發方式而言,測驗自動化是至關重要的,
維基百科
https://mp.weixin.qq.com/s/7kDu5yQz36mvG95azk5AKw
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/142358.html
標籤:Python
下一篇:Kivy主表單大小的控制
