干貨 | 一文搞定 pytest 自動化測試框架(一)
pytest 是一個成熟的全功能 Python 測試工具,可以幫助您編寫更好的程序。它與 Python 自帶的 Unittest 測試框架類似,但 pytest 使用起來更簡潔和高效,并且兼容 unittest 框架。pytest 有以下實用特性:
pytest 能夠支持簡單的單元測試和復雜的功能測試;
pytest 本身支持單元測試;
可以結合 Requests 實現接口測試;
結合 Selenium、Appium 實現自動化功能測試;
使用 pytest 結合 Allure 集成到 Jenkins 中可以實現持續集成。工作中一般會使用持續集成來完成代碼集成到主干分支之后的回歸測試,通過自動化測試的手段來實現產品的快速迭代,同時還能保證產品的高質量。
pytest 支持 315 種以上的插件;
參考網站:
http://plugincompat.herokuapp.com/
https://docs.pytest.org/
查看版本
用例編寫規范:
測試文件以 test_ 開頭(以 _test 結尾也可以)
測試類以 Test 開頭,并且不能帶有 init 方法
測試函數以 test_ 開頭
斷言使用基本的 assert 即可
創建一個 python 文件,命名以 test_ 開頭(或者以 test 結尾),創建測試方法以 test 開頭,測試類需要以 Test 開頭。創建文件名為 test_add.py 文件,代碼如下:
運行 test_add.py 文件,在命令行進入到這個文件所在的路徑,可以直接使用 pytest 命令運行,pytest 會找當前目錄以及遞查找子目錄下所有的 test_*.py 或 *_test.py 的文件,把其當作測試文件。在這些文件里,pytest 會收集符合編寫規范的函數,類以及方法,當作測試用例并且執行,執行如下:
結果分析:執行結果中,F代表用例未通過(斷言錯誤),.用例通過。如果有報錯會有詳細的錯誤信息。pytest 也支持 Unittest 模式的用例定義。
pytest 帶有很多參數,可以使用 pytest --help 來查看幫助文檔,下面介紹幾種常用的參數:
無參數
讀取路徑下所有符合規則的文件,類,方法,函數全部執行。使用方法如下:
-v 參數
打印詳細運行日志信息,一般在調試的時候加上這個參數,終端會打印出每條用例的詳細日志信息,方便定位問題。使用方法如下:
-s 參數
帶控制臺輸出結果,當你的代碼里面有 print 輸出語句,如果想在運行結果中打印 print 輸出的代碼,在運行的時候可以添加 -s 參數,一般在調試的時候使用,使用方法如下:
-k 參數
跳過運行某個或者某些用例。
應用場景:在測試場景中,開發人員有一部分功能代碼還沒實現,測試人員已經將測試用例設計出來,或者測試人員發現了某功能上的 bug 需要開發人員修復之后再測試這部分有缺陷的測試用例,可以將這部分測試用例在運行的時候暫時跳過,等功能實現或者 bug 解決之后再加入運行。
使用方法如下:
-x 參數
遇到用例失敗立即停止運行。
應用場景:在回歸測試過程中,假如一共有10條基礎用例,當開發人員打完包提交測試的時候,需要先運行這10條基礎用例,全部通過才能提交給測試人員正式測試。如果有一條用例失敗,都將這個版本打回給開發人員。這時就可以添加 -x 參數,一旦發現有失敗的用例即中止運行。
使用方法如下:
–maxfail 參數
用例失敗個數達到閥值停止運行。具體用法:
應用場景:在回歸測試過程中,假如一共有10條基礎用例,當開發人員打完包提交測試的時候,需要先運行這10條基礎用例,全部通過才能提交給測試人員正式測試。如果運行過程中有 [num] 條用例失敗,即中止運行,后面測試用例都放棄執行,直接退出。這時可以使用 --maxfail 參數。
使用方法如下:
-m 參數
將運行有 @pytest.mark.[標記名] 這個標記的測試用例。
應用場景:在自動化測試過程中可以將測試用例添加標簽進行分類,比如登錄功能、搜索功能、購物車功能、訂單結算功能等,在運行的時候可以只運行某個功能的所有的測試用例,比如這個版本只想驗證登錄功能,那就在所有登錄功能的測試用例方法上面加上裝飾符 @pytest.mark.login ,運行的時候使用命令添加一個 -m 參數,例如執行 pytest -m login 命令就可以只執行登錄功能這部分的測試用例。
使用方法如下:
運行模式
pytest 提供了多種運行模式,讓開發和調試更得心應手。指定某個模塊,執行單獨一個 pytest 模塊。
應用場景:在編寫測試用例的時候,經常會單獨調試某個類,或者某個方法,這時可以使用 Pycharm 里面自帶的調試方式,點擊用例方法名前面的綠色按鈕,也可以使用命令行的方式單獨運行某個用例。
pytest 中可以使用 pytest 文件名.py 單獨執行某個 Python 文件,也可以使用 pytest 文件名.py::類名 單獨執行某個文件中的類,使用 pytest 文件名.py::類名::方法名 單獨執行類中的某個方法。
使用方法如下:
打開 Pycharm -> 設置 -> Tools -> Python Integrated Tools -> Testing: pytest
首先次設置成 pytest ,需要安裝 pytest,可以直接按照這個頁面的提示點擊“fix”,也可以在 Project interpreter 里面添加 pytest 依賴包。安裝完 pytest 之后,編寫的符合規則的測試用例都能被識別出來并且標出一個綠色的執行按鈕,點擊這個按鈕也能執行某個方法或者某個類。例如:
Pycharm 設置運行方式為 pytest 之后,用例左側會顯示綠色按鈕,可以直接點擊這個按鈕來執行這條用例。
與 unittest 類似,執行用例前后會執行 setup,teardown 來增加用例的前置和后置條件。pytest 框架中使用 setup,teardown 更靈活,按照用例運行級別可以分為以下幾類:
模塊級(setup_module/teardown_module)在模塊始末調用
函數級(setup_function/teardown_function)在函數始末調用(在類外部)
類級(setup_class/teardown_class)在類始末調用(在類中)
方法級(setup_method/teardown_methond)在方法始末調用(在類中)
方法級(setup/teardown)在方法始末調用(在類中)
調用順序:
驗證上面的執行順序,看下面的案例。
創建文件名為 test_run_step.py ,代碼如下:
上面的代碼執行完成后,查看測試結果來分析執行測試順序:
從上面的結果可以看出 setup_module 和 teardown_module 在整個模塊只執行一次,setup_class 和 teardown_class 在類里面只執行一次,setup_method 和 teardown_method 在每個方法前后都會調用。
pytest 加載所有的測試用例是亂序的,如果想指定用例的順序,可以使用 pytest-order 插件,指定用例的執行順序只需要在測試用例的方法前面加上裝飾器 @pytest.mark.run(order=[num]) 設置order的對應的num值,它就可以按照 num 的大小順序來執行。
應用場景:有時運行測試用例需要指定它的順序,比如有些場景需要先運行完登錄,才能執行后續的流程比如購物流程,下單流程,這時就需要指定測試用例的順序。通過 pytest-ordering 這個插件可以完成用例順序的指定。
創建一個測試文件“test_order.py”,代碼如下:
執行結果,如下查看執行順序:
從上面的執行結果可以看出,執行時以 order 的順序執行:order=1,order=3,order=-1。
以上,更多進階內容,在后續文章分享。
【相關閱讀】
Python 測試開發實戰進階,挑戰阿里P6+,年薪50W+!
測試面經 | 半年薪資翻倍逆襲大廠,這位“上錯車”的測試媛不簡單!
干貨 | 一文搞定 Linux 常用高頻命令
測試面經 | 從螺絲釘到大廠測試開發,三點學習心得與面試經驗
Python 自動化測試
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。