1. 程式人生 > >基於Pytest豆瓣自動化測試【1】

基於Pytest豆瓣自動化測試【1】

—— Pytest基礎使用教程【1】 ###引言 Pytest 是一個非常實用的自動化測試框架,目前來說資料也是非常多了。最近某友人在學習 Python的一些測試技術,幫其網上搜了下教程;發現大多數文章多是在介紹入門 又或者 多是聚焦在 Pytest 的一些語法 和 提供的功能上。對於如何實際功能中使用方面教程介紹不多。介於此,寫這篇教程選豆瓣網來作為 黑盒評測 物件為例。 ###功能服務分析 一個社群網站登陸往往是比較常用功能之一,因此選取登陸作為本次自動化測試教程場景。由於本人非豆瓣研發,對其功能服務實現不瞭解,首先簡單分析下豆瓣登陸相關流程,不用特別專業的工具 普通的 Chrome瀏覽器 就行。 先開啟一個隱身標籤瀏覽器,訪問豆瓣使用者登陸頁面。除開一些資原始檔,最關鍵處第一次訪問後會在 Cookie 裡面寫入一個 bid 的變數,推測這個變數應該是用來辨識訪問使用者的唯一性,主流網站的常見設計之一。 ![](https://img2020.cnblogs.com/blog/409098/202005/409098-20200527101453174-944350265.png) 接下來,輸入一個錯誤的賬號/密碼(jack/123456) 看下登陸互動的服務鏈路以及相關介面。 ![](https://img2020.cnblogs.com/blog/409098/202005/409098-20200527101530484-1563578330.png) . 輸入賬號**觸發 stat.html(login_start) 請求;** . 點選按鈕**發起 stat.html(login_click) 請求;** . 同時**發起 login/basic 登陸驗證 請求;** . 再次**進行 stat.html(login_error) 請求;** 整體推測 stat 應該 通過 bid 用來記錄唯一使用者行為的狀態服務,同時也為賬號安全場景辨識(比如:無使用者行為連續發起 login/basic 驗證請求可能是惡意程式訪問等)提供基本的行為資料。最後整體梳理下功能服務。 ![](https://img2020.cnblogs.com/blog/409098/202005/409098-20200527101848205-463433011.png) ###測試服務用例設計 通過以上的功能服務分析,登陸鏈路中核心的服務為 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等,唯一使用者標識生成可能會用到。 ![](https://img2020.cnblogs.com/blog/409098/202005/409098-20200527102013001-2047636013.png) 定義一個函式來模擬剛剛分析過程中訪問豆瓣使用者中頁面的場景。同時,把Cookie 打印出來用於檢查 bid 引數。 ![](https://img2020.cnblogs.com/blog/409098/202005/409098-20200527102035506-428139754.png) 類似的,定義一個函式來模擬訪問測試的服務 login/basic,考慮到其需要 Cookie 裡的相關引數,為此單獨 拎出 來作為引數。 ![](https://img2020.cnblogs.com/blog/409098/202005/409098-20200527102052759-2033358944.png) 從功能服務分析來看,stat 的訪問比較多,為了方便 寫測試用例複用程式碼,用一個 class 物件來進行統一管理。通過定義物件相關方法,來模擬相關 stat服務請求,詳細可以看具體程式碼。 ![](https://img2020.cnblogs.com/blog/409098/202005/409098-20200527102109488-761437786.png) 測試登陸過程中,賬號往往是很多測試用例會使用到的,因此使 @pytest.fixture()機制來進行復用 ![](https://img2020.cnblogs.com/blog/409098/202005/409098-20200527102122266-1472423641.png) 最後是測試 Case 的實現了,這裡往往會是最簡單的。主要對 Http服務狀態進行assert 判斷 和 先前列出的 3個 Case 中業務返回 message 進行檢驗。詳細的見程式碼邏輯以及註解。 ![](https://img2020.cnblogs.com/blog/409098/202005/409098-20200527102137442-1385739620.png) ###最終測試報告 最後將寫好的自動化測試指令碼 使用pytest 執行,藉助 pytest-html 外掛自動生成測試報告: ![](https://img2020.cnblogs.com/blog/409098/202005/409098-20200527102152065-235116944.png) 具體相關case測試相關詳細日誌 ![](https://img2020.cnblogs.com/blog/409098/202005/409098-20200527102206274-403002366.png) 如果對程式碼感興趣的可以關注公眾號,私信程式碼。 ###其他 > 黑盒測試也稱功能測試,它是通過測試來檢測每個功能是否都能正常使用。在測試中,把程式看作一個不能開啟的黑盒子,在完全不考慮程式內部結構和內部特性的情況下,在程式介面進行測試,它只檢查程式功能是否按照需求規格說明書的規定正常使用,程式是否能適當地接收輸入資料而產生正確的輸出資訊。 > 百度百科 > 在軟體測試中, 自動化測試指的是使用獨立於待測軟體的其他軟體來自動執行測試、比較實際結果與預期並生成測試報告這一過程。在測試流程已經確定後,測試自動化可以自動執行的一些重複但必要測試工作。也可以完成手動測試幾乎不可能完成的測試。對於持續交付和持續整合的開發方式而言,測試自動化是至關重要的。 > 維基百科 https://mp.weixin.qq.com/s/7kDu5yQz36mvG9