1、pytest介紹
基於unittest之上的單元測試框架
(1)、自動發現測試模組和測試方法;
(2)、斷言使用assert+表示式即可;
(3)、可以設定會話(從執行所有用例開始-用例結束)級,模組(.py)級,類級(setupclass/teardownclass),
函式(測試用例)級的fixtures,資料準備+清理工作
(4)、有豐富的外掛程式,300+以上。==allure
(5)、測試用例不一定要放在測試類當中。
安裝命令:pip install pytest
安裝html報告外掛程式:pip install pytest-html
pytest收集測試用例的規則:
(1)、預設從當前目錄中收集測試用例,即在哪個目錄下執行pytest命令,則從哪個目錄當中搜尋;
(2)、搜尋規則:
a、符合命名規則,test_*.py 或者 *_test.py的檔案;
b、以test_開頭的函式名;
c、以test開頭的測試類,(沒有__init__函式)當中,以test_開頭的函式;
d、斷言使用基本的assert即可;
pytest的特點:
1、簡單靈活,容易上手,文件豐富;
2、支援引數化,可以細粒度地控制要測試的測試用例;
3、能夠支援簡單的單元測試和複雜的功能測試,
介面自動化測試(pytest+requests);
4、pytest具有很多第三方外掛程式,並且可以自定義擴充套件,比較好用的如:
pytest-selenium(整合selenium)、
pytest-html(完美html測試報告生成)、
pytest-rerunfailures(失敗case重複執行)、
pytest-xdist(多cpu分發)等;
5、測試用例的skip和xfail處理;
6、可以很好的和ci工具結合,例如jenkins
2、pytest之mark功能
mark機制 4.6
先註冊 pytest.ini [pytest] markers=標籤名:說明
去給用例打標籤
@pytest.mark.已註冊的標籤名
測試類和模組: 類下面設定類屬性值,模組下面設定全域性變數。
pytestmarker=pytest.mark.已註冊的標籤名
多個標籤:pytestmarker=[pytest.mark.已註冊的標籤名,pytest.mark.已註冊的標籤名]
3、pytest之命令執行用例
4、pytest之fixture功能
(1)、定義fixture
1.1 建立了乙個conftest.py檔案
1.2 在conftest中,建立fixture
1.3 定義函式,函式前面加上@pytest.fixture(scope=作用域)
函式內部:yield 隔開前置後後置的**,之前是前置,之後是後置
yield 返回值(後面跟上返回值用於呼叫)
(2)、呼叫fixture
在測試用例.測試類 前面加上(@pytest.mark.usefixtures("fixture對應的函式名稱"));
fixture對應的函式名稱=它的返回值;
fixture對應的函式名稱作為測試用例的引數,將返回值傳給測試用例;
fixure 在conftest.py當中,定義的時候,就已經決定了他的用例域,決定了它的命運;
fixture可以有很多個;
無論在測試類、測試用例去主動呼叫fixture,都不能夠改變它的命運;
呼叫就是決定在哪兒去使用它。在哪個測試類?
pytest的用例執行順序:
基本原則:按照搜尋規則,先匹配到的先執行。
1、檔名稱:按名稱名稱順序去搜尋。先找到的,先去內部找用例。
2、在py檔案內部:按照**順序去找用例。先找到的先執行。
(3)、fixture暫不支援與unittest同用,斷言都用assert.
(4)、pytest之fixture引數化-多執行,pytest層級覆蓋。測試用例與其同級或者在其子目錄
(5)、fixture的scope引數
scope引數有四種,分別是'function','module','class','session',預設為function。
function:每個test都執行,預設是function的scope
class:每個class的所有test只執行一次
module:每個module的所有test只執行一次
session:每個session只執行一次
(6)、setup和teardown操作
setup,在測試函式或類之前執行,完成準備工作,例如資料庫鏈結、測試資料、開啟檔案等
teardown,在測試函式或類之後執行,完成收尾工作,例如斷開資料庫鏈結、**記憶體資源等
備註:也可以通過在fixture函式中通過yield實現setup和teardown功能
(7)、fixture定義與呼叫
定義 == 定命運。session、modle、class、function
呼叫 == 你準備把它在哪兒用?
session:整個會話都有效。
module:模組內有效。
class:類內有效。
function:測試用例內有效。
conftest.py檔案。 === 定義多個fixture.
5、pytest之引數化—ddt
引數化 ddt 引數名 = 用例的引數名稱
在測試用例的前面加上:
@pytest.mark.parametrize("引數名",列表)
引數名:用來接收每一項資料,並作為測試用例的引數;
@pytest.mark.parametrize("引數1,引數2",[(數1,數2),(數1,數2)]);
排列組合。多個引數的值排列組合。在乙個用例前面 ,使用多個@pytest.mark.parametrize
示例:用例有4個:0,2/0,3/1,2/1,3
@pytest.mark.parametrize("x", [0, 1])
@pytest.mark.parametrize("y", [2, 3])
def test_foo(x, y):
pass
6、pytest之重執行
外掛程式名稱:rerunfailures
安裝方法:pip install pytest-rerunfailures(失敗case重複執行)
使用方式:
命令列引數形式:
命令:pytest -reruns 重試次數
比如:pytest --reruns 2 表示:執行失敗的用例可以重新執行兩次
命令:pytest --reruns 重試次數 --reruns-delay 次數之間設定的延時(單位:秒)
pytest --reruns 2 --reruns-delay 5
表示失敗的用例可以重新執行2次,第一次和第二次的時間間隔為5秒;
7、pytest之html報告
測試報告 = junitxml,html,allure
1、先裝外掛程式
2、命令列的引數:
--html=相對路徑/report.html # 相對於pytest命令執行時,所在的根目錄。
--alluredir=相對路徑
4、生成allure檔案之後,用命令:allure serve alluredir
os.system("")
allure與jenkins的整合、重執行機制、pytest中的失敗截圖。
1、生成junitxml格式的測試報告:命令:--junitxml = path
2、生成result log格式的測試報告:命令:--resultlog=report、log.txt
3、生成html格式的測試報告:命令:--html=report\test_one_func.html(相對路徑)
# pytest -v -s -m demo --html=demo/po_v6/outputs/reports/pytest_run_reports.html
8、pytest之allure測試(allure測試報告)
Pytest Pytest基礎(持續學習更新)
fixture 優勢 1 命名方式靈活,不侷限於 setup 和 teardown 返幾個命名 2 conftest.py 配置裡可以實現資料共享,不需要 import 就能自動找到一些配置 3 scope module 可以實現多個.py 跨檔案共享前置 4 scope session 以實現多個...
目標檢測框架mmdetection框架的安裝與測試
1 框架介紹 這個框架還是非常清晰的,整個 從骨架,模型,bbox處理,推斷等都有專門的專案資料夾。而且提供了當前許多主流的目標檢測模型的實現。2 安裝 建議使用conda的方式來安裝,用 重新編譯的方式會出現一些bug。在conda環境下有一些支援的lib容易有,而用傳統的python包的方式,在...
框架的概念,框架與庫的區別
框架,庫的區別?庫,供我們呼叫。比如,檔案處理類。處理類。框架,組織controller。框架是 的半成品。成熟的框架往往包含大量的常用庫 處理庫,檔案上傳庫等 為什麼用框架?接收引數 驗證引數 拼接sql語句 考慮安全性,是否有sql注入 執行sql等等。mysql connect mysql q...