pytest(3)-測試命名規則


前言

在自動化測試項目中,單元測試框架運行時需要先搜索測試模塊(即測試用例所在的.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自動化項目,命名方式最好如下:

  1. 測試模塊名以test開頭,如 test_login.py
  2. 測試類名以Test開頭,如 TestLogin()
  3. 測試函數/方法名以test開頭,如 test_login()

這樣的命名方式,既簡單又清晰,而自定義命名其實較為少用,除非項目比較特殊。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM