『德不孤』Pytest框架 — 1、Pytest測試框架介紹

1、什麼是單元測試框架

單元測試是指在軟體開發當中,針對軟體的最小單位(函數,方法)進行正確性的檢查測試。

2、單元測試框架主要做什麼

  • 測試發現:從多個文件裡面去找到我們需要的測試用例。
  • 測試執行:按照一定的順序和規則去執行測試用例,並生成結果。
  • 測試判斷:通過斷言判斷預期結果和實際結果的差異。
  • 測試報告:統計測試進度,耗時,通過率等數據,並生成測試報告。

3、單元測試框架和自動化測試框架有什麼關係

(1)自動化測試框架作用:

  1. 提高測試效率,降低自動化用例的維護成本。
  2. 減少人工干預,提高測試的準確性,增加程式碼的重用性。
  3. 核心思想是讓不懂程式碼的人,也能夠通過這個框架去實現自動化測試。

(2)Pytest單元測試框架和自動化測試框架的關係

單元測試框架:只是自動化測試框架中的組成部分之一。

pom設計模式、數據驅動、關鍵字驅動、全局配置文件的封裝、日誌監控、SeleniumRequests的二次封裝、報告郵件、斷言體系的設計封裝等,都是自動化測試框架中的組成部。

4、Pytest測試框架說明

Pytest是Python的一種單元測試框架,全功能且非常成熟,同自帶的Unittest測試框架類似,相比於Unittest框架使用起來更簡潔,效率更高。

Pytest測試框架,主要有以下幾個特點:

  • Pytest是一個非常成熟的Python的單元框架,比Unittest更靈活,容易上手。
  • Pytest支援參數化配置。
  • Pytest能夠支援簡單的單元測試和複雜的功能測試,還可以和SeleniumRequestsAppium結合實現Web自動化,介面自動化,APP自動化。
  • 執行測試過程中可以將某些測試跳過,或者對某些預期失敗的case標記成失敗,也支援重複執行失敗的case。(跳過用例和reruns失敗用例重試)
    即:支援測試用例的skipxfail處理。
  • 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.casestest suitestest fixturestest 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測試框架:可使用提供的assertEqualassertInassertTrueassertFalse斷言方法。
  • Pytest測試框架:直接使用Python語言內置的assert表達式。

5)用例分類執行:

  • Unittest測試框架:默認執行全部用例,可以通過載入testsuite執行部分模組的用例。
  • Pytest測試框架:可以通過@pytest.mark來標記測試用例,執行命令前加上參數-m,即可運行標記的用例。

6)失敗重運行:

  • Unittest測試框架:無。
  • Pytest測試框架:支援用例執行失敗重跑,提供了pytest-rerunfailures插件。

7)報告:

  • Unittest測試框架:使用HTMLTestRunnerNew庫生成測試報告。
  • Pytest測試框架:使用pytest-HTMLallure插件生成測試報告。

參考://www.cnblogs.com/cuitang/p/11635103.html