一、用例編寫規則
1.unittest提供了test cases、test suites、test fixtures、test runner相關的類,讓測試更加明確、方便、可控。使用unittest編寫用例,必須遵守以下規則:
(1)測試文件必須先import unittest
(2)測試類必須繼承unittest.TestCase
(3)測試方法必須以“test_”開頭
(4)測試類必須要有unittest.main()方法
2.pytest是python的第三方測試框架,是基於unittest的擴展框架,比unittest更簡潔,更高效。使用pytest編寫用例,必須遵守以下規則:
(1)測試文件名必須以“test_”開頭或者"_test"結尾(如:test_ab.py)
(2)測試方法必須以“test_”開頭。
(3)測試類命名以"Test"開頭。
總結: pytest可以執行unittest風格的測試用例,無須修改unittest用例的任何代碼,有較好的兼容性。 pytest插件豐富,比如flask插件,可用於用例出錯重跑;還有xdist插件,可用於設備並行執行。
二、用例前置和后置
1.unittest提供了setUp/tearDown,只能針對所有用例。
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的執行
三、斷言
1.unittest提供了assertEqual、assertIn、assertTrue、assertFalse。
2.pytest直接使用assert 表達式。
四、報告
1.unittest使用HTMLTestRunnerNew庫。
2.pytest有pytest-HTML、allure插件。
五、失敗重跑
1、unittest無此功能。
2、pytest支持用例執行失敗重跑,pytest-rerunfailures插件。
六、參數化
1、unittest需依賴ddt庫,
2、pytest直接使用