一、pytest收集用例規則:
1、默認從當前文件開始搜索測試用例,即在哪個目錄下運行pytest命令,則從哪個目錄當中搜索
2、搜索規則:
1)符合命名規則test_.py或者test.py
2)以test開頭的函數名
3)以Test開頭的測試類(沒有init函數)當中,以test_開頭的函數
二、pytest-mark
對測試用例打標簽,在運行測試用例的時候,可根據標簽名來過濾運行的用例。
使用方法:在測試用例/測試類前面加上:@pytest.mark.標記名
示例:@pytest.mark.smoke
可在一個用例上打多個標簽,多次使用@pytest.mark.標簽名即可
示例:
@pytest.mark.smoke
@pytest.mark.demo
def test_demo():
print("我是示例啦!!!")
三、pytest-定義fixture
fixture:即測試用例執行的環境準備和清理,在unittest中指setup/teardown/setclass/tearclass
fixture主要目的是提供一種可靠和可重復的手段去運行那些最基本的測試內容。比如在測試網站的功能時,每個測試用例都要登錄和退出,利用fixture就可以只做一次,否則每個測試用例都要做這兩步
定義fixture:
把一個函數定義為fixture很簡單,在函數聲明之前加上@pytest.fixture
,表示此函數為測試環境數據的準備和清理。
那么在一個fixture內部如何區分環境準備、環境清理呢?
在函數內使用yield關鍵字
yield關鍵字以后的代碼,就是環境清理的代碼,即在測試用例執行完成之后會執行的代碼。
fixture返回值:
fixture可以有返回值 以元組、或者列表的形式都可以,放在yield后面。示例:yield (driver,lg)
fixture定義之后的使用
fixture定義之后放在函數或者類的前面,@pytest.mark.usefixture
,函數使用定義的fixture
示例:
在TestCase
文件夾下新建conftest.py
文件,用來存放用到的fixture夾序
定義fixture @pytest.fixture
yield
分離前置和后置,返回值
可以定義多個fixture
測試類、測試用例 @pytest.mark.usefixtures("fixture函數名稱")
四、pytest-參數化
相當于unittest
的ddt
使用方法:
在測試用例的前面加上:
@pytest.mark.parametrize("參數名",列表數據)
參數名:用來接收每一項數據,并作為測試用例的參數
列表數據:一組測試數據
五、pytest-重運行機制
pytest提供了失敗重試機制:
插件名稱: rerunfailures
安裝方法: pip install pytest-rerunfailures
使用方式(命令行參數形式):
命令:pytest --reruns
重復次數
比如:pytest --reruns 2
表示:運行失敗的用例可以重新運行2次
命令:pytest --reruns 重復次數 --reruns-delay 時間
次數之間的延時設置(單位:秒)
比如:pytest --reruns 2 --reruns-delay 5
表示失敗的用例可以重新運行2次,第一次和第二次的間隔時間為5秒。
六、優化-pytest-html
需要安裝pytest-html
插件
pytest可以生成多種樣式的結果:
1、生成JunitXml格式的測試報告:命令:--junitxml=path
2、生成result log 格式的測試報告:命令:--resultlog=report\log.txt
3、生成Html格式的測試報告:命令:--html=report\test_one_func.html
七、pytest-allure報告
需要安裝allure
pytest生成allure測試報告的命令參數 命令:--alluredir=/XXX/my_allure_results
allure安裝方式及allure與Jenkins集成詳見之后文章