1. 程式人生 > 其它 >pytest 基礎

pytest 基礎

一、pytest 的預設發現測試用例規則
1.模組名必須以 test_ 或 _test 開頭或結尾;
2.測試類必須以 Test 開頭,並且不能有 init 方法;
3.測試方法必須以 test_ 開頭;

二、pytest 執行方式詳解
1.命令列執行方式
執行命令:pytest
引數:
-v 輸出更詳細的資訊;
-s 輸入除錯資訊;
-n 多執行緒
--reruns 失敗用例重跑
--html 生成簡易報告

pytest -vs --reuns 2

2. 主函式執行方式
if __name__=='__main__':
pytest.main(['-vs'])

3. 通過 pytest.ini 檔案執行(全域性配置檔案)
注意:
1). 命令列方式執行或主函式方式執行,均會自動讀取配置檔案 pytest.ini ;
2). pytest.ini 檔案可以改變 pytest 預設的測試用例規則;
3). pytest.ini 檔案一般放在專案的根目錄下;
pytest.ini 檔案內容如下:
[pytest]
#配置引數
addopt = -vs
#配置測試用例資料夾
testpaths =./testcases
#配置測試模組的規則
python_files = test_*.py
#配置測試用例的規則
python_classes = Test*
#配置測試方法的規則
python_functions = test_*
#配置介面測試的基礎路徑;base_url 就是一個函式級別的韌體;多個基礎路徑需要封裝
base_url = http://xx.xxx.xxx.xx/ (ip)
#給用例分組
maker =
smokes:冒煙測試
usermanage:使用者管理

分組使用:
1. 在用例上面加上 @pytest.mark.smoke
2. 在執行時需要使用 -m 分組名
故:addopts = -vs -m "smoke or usermanage"

三、pytest 用例執行順序
1. 預設:從上到下;
2. 可以通過如下標記改變測試執行順序:@pytest.mark.run(order=1)

四、pytest 前後置條件(所有類、所有用例之前或之後)
類前: setup_class
類後: teardown_class
用例之前: setup
用例之後: teardown

希望在部分用例之前或之後執行,使用 Fixture
Fixture 裝飾器完整結構如下:
@pytest.fixture(scope="作用域", params="資料驅動",autouse="自動執行",ids="引數別名",name="fixture別名")
1). scope:標記 fixture 作用域;
function(函式級別,手動或自動)、
class(類級別,一般自動)、
module(模組級別,一般自動)、
package/session(會話級別,一般自動)

2). autouse=True 自動執行

3). params 資料驅動
新建一個 fixture
@pytest.fixture(scope="module",autouse=False,params=method_read_yaml())
def execute_sql(request):
print("執行資料庫查詢")
yield request.param
print("關閉資料庫連線")

這裡的request 引數 和 request.param 值都是固定寫法。
ps.來自網路: fixture(params=data) 裝飾器的 data 是函式返回值 yield request.param,將帶到下面呼叫為引數的函式中;

4). ids 引數別名

5). name 表示 fixture 的別名
當使用了 name 起別名後,原來的 fixture 的名稱就失效了;

6). 一般情況下 fixture 會和 contenst.py 檔案 一起使用;
注意:
1). contenst.py 是專門用於存放 fixture 的,是固定名稱;
2). contenst.py 檔案的方法,使用時不需要導包;

一個用例可以使用個韌體(韌體是 fixture),同級的按順序執行;
def methodName(韌體1, 韌體2,韌體3)