【pytest系列】- pytest測試框架介紹與運行


如果想從頭學起pytest,可以去看看這個系列的文章!

https://www.cnblogs.com/miki-peng/category/1960108.html

前言​

​ 目前有兩種純測試的測試框架,就是unittest和pytest。

​ unittest這個已經是老框架了並且廣為人知,很多人都是用它來做接口自動化或web自動化。它是python內嵌的測試框架,是標准庫,即python自帶的,安裝python以后可以直接導入。unittest提供了test cases、test suites、test fixtures、test runner相關的類,讓測試更加明確、方便、可控。

​ 而pytest則是python的第三方庫,是基於unittest開發的擴展框架,需要獨立安裝,但要注意兼容性,不是一定要安裝最新版,最新版如果會與你的python版本不兼容,可能會存在安裝不成功,或者是某些庫的功能使用不了。pytest比unittest更簡潔更高效

  • 📕 不需要像unittest需要使用TestSuite去收集、加載用例添加到測試套件再運行,它會自動發現用例自動執行
  • 📘 使用assert斷言更簡潔:assert 表達式
  • 📙 靈活運行指定的測試用例,可以給用例打上各種各樣的標簽,如:回歸、正向、冒煙
  • 📔 可以將某些用例跳過(skip),或者對某些預期失敗的case標記成失敗
  • 📒 fixture夾具靈活管理環境,可以指定哪些類、方法使用與否,功能相當於unittest的setup,teardown
  • 📔 插件非常豐富,如returnfailures用例失敗重運行機制,allure更美觀的測試報告等
  • 📘 較好的兼容性,支持運行unittest/nose編寫的測試用例

安裝

​ 安裝:pip install -U pytest

​ 查看版本:pytest --version

用例命名規則

發現用例規則

​ pytest是自動發現、收集、執行測試用例的,當你在哪個目錄下執行pytest.main()指令,那么pytest就會自動發現當前目錄下所有符合規則的py文件,將這些文件當成測試用例文件,根據以下規則去發現用例:

​ 🔸 模塊名: test_*.py或者是 *_test.py(即以test_開頭或_test結尾的py文件)

​ 🔸類名:Test開頭,且類里沒有__init__函數(否則容易報錯)

​ 🔸方法名:test_開頭

注意:pytest是以方法為單位發現用例的,因此,測試用例並不一定要以類的形式存在,可以直接以函數方法的形式存在;並且它是根據規則按順序匹配先:模塊 > > 類名 > > 方法名,如果你的方法名符合規則,但方法寫在一個不符合規則的類名或者模塊名下,那么該方法是不會被發現也不會被執行的。

# test_search.py
def login_test():
    print(11111)


def test_login():
    print(22222)


class TestClass:
    def test_one(self):
        print(33333)

    def test_two(self):
        print(44444)
    
    def test3(self):
        print(44444)

​ 如上,會查找到3個測試用例,分別為test_logintest_onetest_two

自定義查找規則

​ 我們還可以自定義查找的規則,但自定義的規則配置文件要放在你要運行的項目的根目錄下(見上圖),且配置文件要嚴格以pytest.ini命名,pytest.ini文件內容舉例如下:

[pytest]	# 只能修改=右邊的值
python_files = demo_*.py	# 模塊名以demo_開頭
python_functions = demo_*	# 方法名以demo_開頭
python_classes = Demo*	# 類名名以Demo開頭

運行方式

代碼形式

if __name__ == '__main__':
	pytest.main()	# 直接寫在py文件中運行,()里可以填寫運行的參數,也可以不寫

命令行的形式

​ 在pycharm中調出控制台,輸入pytest,會自動去搜索當前目錄下所有符合規則的測試用例,也可以指定運行某個文件,如:pytest start.py

或者使用windows的cmd命令行,但要先切換到項目的目錄下

pycharm運行

​ 右擊選擇以pytest運行,但一次只能運行單個py文件,除非該文件中有pytest.main()指令,才會去搜索所在目錄的所有測試用例。

​ 運行前在模塊中右擊可以查看運行是否是以pytest形式運行:

​ 若顯示是以unittest形式則會以unittest框架去運行,可以在設置中修改運行方式:

執行代碼

​ 以下均為命令行中執行的pytest命令

  • 直接執行,在當前目錄即子目錄搜索用例:pytest
  • 指定某個模塊:pytest test_module.py
  • 指定某個目錄及子目錄下的所有測試文件:pytest testcase
  • 指定某個模塊的某個方法,用兩個英文冒號分隔:pytest test_module::test_function
  • 指定某個模塊的某個類中的某個用例,用兩個英文冒號分隔:pytest test_model.py::test_class::test_method

一些執行參數

  • -q:簡單打印執行日志,只打印測試用例的執行結果
  • -s:詳細打印執行日志
  • -x:遇到錯誤時停止測試
  • --maxfail=num:當用例錯誤個數達到指定數量時,停止測試
  • -k:匹配用例名稱
    • 執行用例名稱包含http的所有用例:pytest -s -k http start.py
    • 排除用例名稱包含http的用例:pytest -s -k "not http" start.py
    • 同時匹配不同的用例名稱:pytest -s -k "method or weibo" start.py

用例執行順序

​ unittest用例的執行順序是按照方法名的ASCII碼順序執行的,而pytest有自己內置的執行順序規則,一般是從上往下,即同一個py文件中,從上往下執行測試用例。


免責聲明!

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



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