pytest和自帶的unittest對比
-
unittest
1、是python集成的,使用方便,也更廣泛。
2、可以使用@ddt參數化
3、最多針對(模塊)類級別的setup/teardown -
pytest
1、支持參數化,但是沒有unittest靈活
2、用例失敗自動截圖,pytest-html + conftest.py
3、全局的setup/teardown conftest.py
4、用例失敗重跑,pytest-rerunfailures 重跑的插件
pytest使用
安裝
默認源安裝:
pip install pytest
用國內清華大學的源:
pip install pytest -i https://pypi.tuna.tsinghua.edu.cn/simple
參考:
下載安裝慢,使用使用國內清華大學的源
pytest用例
# AddFunc.py
class AddFunc:
def __init__(self,a,b,*args):
self.a = a
self.b = b
self.other = args
def add(self):
sum_a = self.a + self.b
if self.other:
for o in self.other:
sum_a += o
return sum_a
# test_add.py
from com.**.** import AddFunc
def test_add_2num():
a = AddFunc.AddFunc(1,2)
result = a.add()
assert result == 3
def test_add_3num():
a = AddFunc.AddFunc(1,2,3)
result = a.add()
assert result == 6
def test_add_4num():
a = AddFunc.AddFunc(1,2,3,5)
result = a.add()
assert result == 11
pytest命令
1、 pytest默認查找當前路徑下(遞歸查)所有test_*.py和*_test.py文件中所有的test_開頭的用例

2、 在測試文件中查找Test開頭的類,以及類中以test開頭的方法,查找測試文件中test開頭的函數。
tips: 測試類的不應該有構造函數。
3、執行指定文件中的用例pytest test_case/test_add.py::test_add_2num

-s: 顯示程序中的print/logging輸出
-v: 豐富信息模式, 輸出更詳細的用例執行信息
-q: 安靜模式, 不輸出環境信息
-k:關鍵字模糊匹配,用and區分:匹配范圍(文件名、類名、函數名)
4、 直接使用python命令python run.py
# run.py
if __name__ == '__main__':
pytest.main(['-s', '-v']) #執行文件所在目錄下的所有用例
fixture及conftest.py使用
- 有獨立的命名,並通過聲明它們從測試函數、模塊、類或整個項目中的使用來激活。
- 按模塊化的方式實現,每個fixture都可以互相調用。
- fixture的范圍從簡單的單元擴展到復雜的功能測試,允許根據配置和組件選項對fixture和測試用例進行參數化,或者跨函數function、類class、模塊module或整個測試會話session范圍。
import pytest
from selenium import webdriver
@pytest.fixture(scope="session", autouse=True)
def browser():
'''
開啟瀏覽器
定義全局瀏覽器驅動
:return:
'''
global driver
driver = webdriver.Chrome()
driver.maximize_window()
return driver
@pytest.fixture(scope="session", autouse=True)
def closebrowser():
print("關閉瀏覽器")
yield # 執行到這需要暫停
driver.quit()
