『德不孤』Pytest框架 — 1、Pytest測試框架介紹
- 2022 年 1 月 8 日
- 筆記
- 測試基礎技能 - Pytest測試框架
1、什麼是單元測試框架
單元測試是指在軟體開發當中,針對軟體的最小單位(函數,方法)進行正確性的檢查測試。
2、單元測試框架主要做什麼
- 測試發現:從多個文件裡面去找到我們需要的測試用例。
- 測試執行:按照一定的順序和規則去執行測試用例,並生成結果。
- 測試判斷:通過斷言判斷預期結果和實際結果的差異。
- 測試報告:統計測試進度,耗時,通過率等數據,並生成測試報告。
3、單元測試框架和自動化測試框架有什麼關係
(1)自動化測試框架作用:
- 提高測試效率,降低自動化用例的維護成本。
- 減少人工干預,提高測試的準確性,增加程式碼的重用性。
- 核心思想是讓不懂程式碼的人,也能夠通過這個框架去實現自動化測試。
(2)Pytest單元測試框架和自動化測試框架的關係
單元測試框架:只是自動化測試框架中的組成部分之一。
pom
設計模式、數據驅動、關鍵字驅動、全局配置文件的封裝、日誌監控、Selenium
和Requests
的二次封裝、報告郵件、斷言體系的設計封裝等,都是自動化測試框架中的組成部。
4、Pytest測試框架說明
Pytest是Python的一種單元測試框架,全功能且非常成熟,同自帶的Unittest
測試框架類似,相比於Unittest
框架使用起來更簡潔,效率更高。
Pytest測試框架,主要有以下幾個特點:
- Pytest是一個非常成熟的Python的單元框架,比
Unittest
更靈活,容易上手。 - Pytest支援參數化配置。
- Pytest能夠支援簡單的單元測試和複雜的功能測試,還可以和
Selenium
,Requests
,Appium
結合實現Web自動化,介面自動化,APP自動化。 - 執行測試過程中可以將某些測試跳過,或者對某些預期失敗的case標記成失敗,也支援重複執行失敗的
case
。(跳過用例和reruns
失敗用例重試)
即:支援測試用例的skip
和xfail
處理。 - Pytest可以很好的和
Jenkins
進行持續集成。 - Pytest可以和
allure
生成非常美觀的測試報告。 - 在Pytest框架下可以執行
Unittest
框架的用例。 - Pytest有很多非常強大的第三方插件,並且這些插件能夠實現很多實用的操作。
並且也可以自定義Pytest插件。
Pytest官方文檔://docs.pytest.org/en/latest/contents.html
5、Pytest框架和Unittest框架區別
(1)Unittest
Unittest是Python標準庫中自帶的單元測試框架,Unittest有時候也被稱為PyUnit,就像JUnit是Java語言的標準單元測試框架一樣,Unittest框架則是Python語言的標準單元測試框架。
Unittest支援自動化測試,測試用例的初始化、關閉和測試用例的聚合等功能,它有一個很重要的特性:它是通過類(class)的方式,將測試用例組織在一起。
(2)Pytest
Pytest是Python的另一個第三方單元測試庫。它的目的是讓單元測試變得更容易,並且也能擴展到支援應用層面複雜的功能測試。
(3)區別
1)用例編寫規則:
Unittest
測試框架:
1、提供test.cases
,test suites
,test fixtures
,test rurner
相關類,讓測試更加明確、方便、可控。
2、測試文件編寫前,必須先導入Unittest
測試框架,import unittest
。
3、測試類必須繼承unittest.TestCase
類,且測試類要Test_
開頭。(可去掉橫線,下同)
4、測試方法要以test_
開頭。
5、測試類必須要用unittest.main()
方法執行。Pytest
測試框架:
1、基於Unittest的擴展框架,比Unittest更簡潔、更高效。
2、測試文件必須test_
開頭。
3、測試類命名必須以test_
開頭。
4、測試方法必須test_
開頭(函數也一樣)。
(規則可自定義。)- 總結:
Unittest:用例格式複雜,不能兼客Pytest
用例。
Pytest:用例格式簡單,可以兼容Unittest
用例。
2)用例的前置和後置:
Unittest
測試框架:
提供了setUp/tearDowm
方法,只能針對所有用例。Pytest
測試框架:
(1)Pytest提供了模組級、函數級、類級、方法級的setup/teardown
,比Unittest的setup/tearDowm
方法更活。- 模組級
setup_module/teardown_module
:開始於模組始末,全局。 - 類級
setup_class/teardown_class
:只在類中前後運行一次(類中)。 - 函數級
setup_function/teardow_function
:只對函數用例生效(不在類中)。 - 方法級
setup_method/teardown_method
:開始於方法始末(在類中)。 - 類裡面的
setup/teardown
:運行在調用方法的前後。
(2)函數前加@pytest.fixtures()
裝飾器,在測試用例中使用Fixture函數。
可作用於function\module\class\session
中。
fixture
相對於setup/teardown
來說的優勢,如下: - 命名方式靈活,不局限於
setup/teardown
。 conftest.py
配置里可以實現數共享,無需import
就可自動找到配置數據,可供多個.py
文件調用。scope="module"
,可以實現多個.py
文件跨文件共享前置。scope="session"
,可以實現多個.py
文件跨文件使用一個session
來完成用例。- 使用
yeild
返回,相當於teardown
的作用。
- 模組級
3)參數化:
Unittest
測試框架:結合DDT實現參數化。Pytest
測試框架:直接使用@pytest.mark.parametrize
裝飾器。
4)斷言:
Unittest
測試框架:可使用提供的assertEqual
,assertIn
、assertTrue
,assertFalse
斷言方法。Pytest
測試框架:直接使用Python語言內置的assert
表達式。
5)用例分類執行:
Unittest
測試框架:默認執行全部用例,可以通過載入testsuite
執行部分模組的用例。Pytest
測試框架:可以通過@pytest.mark
來標記測試用例,執行命令前加上參數-m
,即可運行標記的用例。
6)失敗重運行:
Unittest
測試框架:無。Pytest
測試框架:支援用例執行失敗重跑,提供了pytest-rerunfailures
插件。
7)報告:
Unittest
測試框架:使用HTMLTestRunnerNew
庫生成測試報告。Pytest
測試框架:使用pytest-HTML
、allure
插件生成測試報告。