前言
在自動化測試項目中,單元測試框架運行時需要先搜索測試模塊(即測試用例所在的.py文件),然后在測試模塊中搜索測試類或測試函數,接着在測試類中搜索測試方法,最后加入到隊列中,再按執行順序執行測試。
所以,只有測試模塊、測試類/測試函數、測試方法都符合命名規則,框架才能去識別測試用例。
那么,接下來我們來了解 pytest 框架中的測試命名規則。
命名規則
在了解pytest的測試命名規則之前,我們先需要知道 pytest 搜索用例的規則,它默認搜索規則如下:
- 如果pytest執行命令中指定了目錄,則從該指定目錄中開始查找測試用例文件,如果沒有指定,則從當前運行目錄開始查找文件,最終的結果是找到整個項目中符合命名規則的測試用例。
- 會查找整個項目中符合命令規則的測試模塊,再由 測試模塊-->測試類/測試函數-->測試方法 一層一層遞歸查找。
默認命名規則
pytest 的測試命名規則如下:
- 測試模塊:以 test_ 開頭命名,如:test_login.py,或以 _test 結尾,如:login_test.py
- 測試類:必須以
Test
開頭命名,且測試類中不能有 init 方法 - 測試方法/測試函數:必須以test開頭,如:test_login() 或 testRegister()
最好是將測試模塊、測試方法/函數都以 test_ 開頭命名,這樣可讀性更強,如下圖:
自定義命名規則
pytest 框架可以通過pytest.ini
配置文件自定義命名規則,在某些特定場景下可能會用到。
在測試項目的根目錄下創建pytest.ini
文件,並進行如下配置:
[pytest]
# 更改測試模塊命名規則
python_files = CS*
# 更改測試類命名規則
python_classes = CS*
# 更改測試方法/測試函數命名規則
python_functions = CS*
注意,在.ini文件中直接使用中文注釋執行的時候會報錯,實際使用如上代碼時,需要將中文注釋去掉。
新建測試模塊CS_register.py
,示例如下:
import pytest
import requests, json
class CSRegister:
def CS_register(self):
'''注冊用戶'''
headers = {"Content-Type": "application/json;charset=utf8"}
url = "http://127.0.0.1:5000/register"
data = {
"username": "張學友",
"password": "123456",
"sex": "0",
"telephone": "13823456789",
"address": "北京東城區"
}
res = requests.post(url=url, headers=headers, json=data).text
res = json.loads(res)
assert res['code'] == 0
if __name__ == '__main__':
pytest.main()
執行結果如下:
除非是特殊情況,否則不太建議自定義命名規則。
總結
從個人實際經驗來看,不管是pytest
還是unittest
自動化項目,命名方式最好如下:
- 測試模塊名以test開頭,如 test_login.py
- 測試類名以Test開頭,如 TestLogin()
- 測試函數/方法名以test開頭,如 test_login()
這樣的命名方式,既簡單又清晰,而自定義命名其實較為少用,除非項目比較特殊。