pytest與unittest區別

1、用例編寫規則python

    1.unittest提供了test cases、test suites、test fixtures、test runner相關的類,讓測試更加明確、方便、可控。使用unittest編寫用例,必須遵照如下規則:flask

  (1)測試文件必須先import unittestsession

  (2)測試類必須繼承unittest.TestCase框架

  (3)測試方法必須以「test_」開頭函數

  (4)測試類必需要有unittest.main()方法測試

 2.pytest是python的第三方測試框架,是基於unittest的擴展框架,比unittest更簡潔,更高效。使用pytest編寫用例,必須遵照如下規則:ui

       (1)測試文件名必須以「test_」開頭或者"_test"結尾(如:test_ab.py)spa

  (2)測試方法必須以「test_」開頭。插件

  (3)測試類命名以"Test"開頭。code

 總結: pytest能夠執行unittest風格的測試用例,無須修改unittest用例的任何代碼,有較好的兼容性。 pytest插件豐富,好比flask插件,可用於用例出錯重跑;還有xdist插件,可用於設備並行執行。      

 pytest與unittest的比較_Python

 

2、用例前置和後置

    1.unittest提供了setUp/tearDown,每一個用例運行前、結束後運行一次。setUpClass和tearDownClass,用例執行前、結束後,只運行一次。

2.pytest提供了模塊級、函數級、類級、方法級的setup/teardown,比unittest的setUp/tearDown更靈活。
  • 模塊級(setup_module/teardown_module)開始於模塊始末,全局的

  • 函數級(setup_function/teardown_function)只對函數用例生效(不在類中)

  • 類級(setup_class/teardown_class)只在類中先後運行一次(在類中)

  • 方法級(setup_method/teardown_method)開始於方法始末(在類中)

  • 類裏面的(setup/teardown)運行在調用方法的先後

pytest還能夠在函數前加@pytest.fixture()裝飾器,在測試用例中裝在fixture函數。fixture的使用範圍能夠是function,module,class,session。
firture相對於setup和teardown來講有如下幾點優點:
  • 命名方式靈活,不侷限於setup和teardown這幾個命名
  • conftest.py 配置裏能夠實現數據共享,不須要import就能自動找到一些配置,可供多個py文件調用。
  • scope="module" 能夠實現多個.py跨文件共享前置
  • scope="session" 以實現多個.py跨文件使用一個session來完成多個用例
  • 用yield來喚醒teardown的執行

 

3、斷言

     1.unittest提供了assertEqual、assertIn、assertTrue、assertFalse。

 2.pytest直接使用assert 表達式。

 

4、報告

      1.unittest使用HTMLTestRunnerNew庫。

  2.pytest有pytest-HTML、allure插件。

 

5、失敗重跑

  一、unittest無此功能。

  二、pytest支持用例執行失敗重跑,pytest-rerunfailures插件。

 

6、參數化

  一、unittest需依賴ddt庫,

  二、pytest直接使用@pytest.mark.parametrize裝飾器。

 

7、用例分類執行

  一、unittest默認執行所有用例,也能夠經過加載testsuit,執行部分用例。

  二、pytest能夠經過@pytest.mark來標記類和方法,pytest.main加入參數("-m")能夠只運行標記的類和方法。

相關文章
相關標籤/搜索