前言
十一也趕上自己剛出院,本想在十一放假前用假期刷完Pytest的,結果被希洛克神話吸引,再次迴歸毒奶粉,一直奮鬥到距離上班還有兩天,引導石刷沒了,就沒了智慧。
當然也沒出過神話,結果一怒之下解除安裝,開始收收心,準備學習,用了兩個下午時間看了下pytest的官方文件,全是英文的,用谷歌翻譯看的也是一知半解,基於理解產出文章兩篇。
十一節後上班,直到現在遲遲一直未更文學習。因為一些事,導致無法專心學習,但是刷完pytest這個事,我還是記得,畢竟2020年結束還有倆約,是時候在年底衝刺一波未完成的知識了。
一、關於環境搭建
可以參考文章《使用IDEA寫Python之pytest環境搭建及第一個程式編寫》
二、關於開發工具
作為一個java黨,對於IDEA的喜歡程度,不用我多說,相信每個java編碼的同學,都是愛不釋手的。
上篇文章提及到用IDEA進行Python的編碼,雖然能滿足簡單學習的需求,但IDEA支援也是作為一種外掛的存在,所以作為長久想學習Python的話,那我們還是“跟風”選擇pycharm吧。
三、為什麼要使用Pytest
就Python的測試框架而言,目前比較流行的就是pytest和unittest,unittest廣為人知,但就現在而言是老框架了,但是依舊有那麼多喜歡使用他來做自動化測試,我猜想大部分人都和我一樣,早期是從蟲師開始接觸和熟悉Python自動化的
。
pytest是基於unittest開發的另一款更高階更好用的單元測試框架,作為知識更新,也更該去學習新知識了,它就和Testng和junit一樣,無論從逼格和好用程度來看,都是完勝後者。
四、pytest特點
- 非常容易上手,入門簡單,文件豐富,文件中有很多例項可以參考
- 能夠支援簡單的單元測試和複雜的功能測試
- 支援引數化
- 執行測試過程中可以將某些測試跳過(skip),或者對某些預期失敗的case標記成失敗
- 支援重複執行(rerun)失敗的 case
- 支援執行由 nose, unittest 編寫的測試 case
- 可生成 html 報告
- 方便的和持續整合工具 jenkins 整合
- 可支援執行部分用例
- 具有很多第三方外掛,並且可以自定義擴充套件
五、快速入門
示例程式碼如下:
# -*- coding: utf-8 -*-
# @Time : 2020/10/15 20:10
# @Author : longrong.lang
# @FileName: test_demo.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
def add(x):
return x + 2;
class TestClass(object):
# 測試是否相等
def test_add(self):
assert add(2) == 5
# 測試包含
def test_in(self):
a = 'hello world'
b = 'he'
assert b in a
# 測試不包含
def test_not_in(self):
a = 'Hello'
b = 'hi'
assert b not in a
1、執行
命令列當前檔案同級目錄下,輸入如下命令:
pytest
說明:
- 只執行 pytest ,會查詢當前目錄及其子目錄下以 test_*.py 或 *_test.py 檔案,找到檔案後,在檔案中找到以 test 開頭函式並執行
- 只想執行某個檔案,可以 pytest test_demo.py
- 加上-q,就是顯示簡單的結果: pytest -q test_demo.py
用Pytest寫用例時候,一定要按照下面的規則去寫,否則不符合規則的測試用例是不會執行的
六、Pytest用例的設計原則
- 檔名以 test_.py 檔案和_test.py
- 以 test_ 開頭的函式
- 以 Test 開頭的類,不能包含 init 方法
- 以 test_ 開頭的類裡面的方法
- 所有的包 pakege 必項要有__init__.py 檔案
七、Pytest執行用例規則
下面以windows系統為例,使用命令來來執行pytest
1、指定目錄下的所有用例
pytest
2、執行某一個py檔案下用例
pytest 檔名.py
3、執行test_demo.py檔案中模組裡面的某個函式,或者某個類,某個類裡面的方法
說明:加v和不加-v都可以,加-v的話,列印的資訊更詳細
pytest -v test_demo.py::TestClass::test_add
pytest test_demo.py::TestClass::test_not_in
pytest test_demo.py::test_in
4、執行test_demo.py 模組裡面,測試類裡面的某個方法
pytest test_demo.py::test_in
5、-m 標記表示式(後面有詳解)
pytest -m login
將執行用 @pytest.mark.login 裝飾器修飾的所有測試,後面有詳解!
6、-q 簡單列印,只列印測試用例的執行結果
pytest -q test_demo.py
7、-s 詳細列印
pytest -s test_demo.py
8、-x 遇到錯誤時停止測試
pytest test_demo.py -x
9、—maxfail=num,當用例錯誤個數達到指定數量時,停止測試
pytest test_demo.py --maxfail=1
10、-k 匹配用例名稱
pytest -s -k _in test_demo.py
11、-k 根據用例名稱排除某些用例
pytest -s -k "not _in" test_demo.py
12、-k 同時匹配不同的用例名稱
pytest -s -k "add or _in" test_demo.py
八、使用Pycharm執行pytest
1、File->settings->python integrated tools->Testing下的default testrunner修改為Pytest
注意:
pytest相容unittest指令碼,所以不影響之前使用unittest編寫的指令碼
2、並不是修改完以上配置,就一定好用,如上面方法修改完仍不好用,參考下面方案:
- 檢查pycharm中的python interpreter是否設定為Python安裝目錄下的Python.exe
- pycharm設定為國內源,如豆瓣、清華、阿里雲等等!
3、如果和我一樣之前使用IDEA中pytest外掛編碼的話,在進行完以上兩步操作後,執行如下操作:
- 開啟IDEA,將settings->python integrated tools->Testing下的default testrunner修改為Pytest
- 你會在開啟的.py檔案右上角看到提示,提示你選擇Python的sdk路徑,選擇為Python安裝目錄下的Python.exe,確定後,會自動編譯更新,更新完你會發現使用IDEA可以使用pytest執行了
- 再回頭檢視pycharm這時候也提示你選擇sdk的安裝目錄,同上選擇好Python安裝目錄,也會自動編譯更新,更新完後,你會發現使用pycharm也可以使用pytest執行了
系列參考文章:
https://www.cnblogs.com/poloyy/category/1690628.html