一 、用例編寫規則
- 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.uinttest 提供了 setUp/tearDown ,每個用例運行前,結束后運行一次.setUpClass 和 tearDownClass,用例執行前
\結束后,只運行一次
2.pytest提供了模塊級(setup_module/teardown_module)開始與模塊始末,全局的
- 模塊級(setup_module/teardown_module)開始于模塊始末,全局的
- 函數級(setup_function/teardown_function)只對函數用例生效(不在類中)
- 類級(setup_class/teardown_class)只在類中前后運行一次(在類中)
- 方法級(setup_method/teardown_method)開始于方法始末(在類中)
- 類里面的(setup/teardown)運行在調用方法的前后
pytest 還可以在函數前加@pytest.fixture()裝飾器,在測試用例中裝在fixture函數.fixture的使用范圍可以是
@pytest.fixture(scope ='fuction')
@pytest.fixture(scope ='fuction')
fuction,module,class,session
firture 相對于setup 和teardown 來說有一下幾點優勢:
命名方式靈活,不局限setup 和teardown 這幾個命名
contest.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插件
六 參數化
- unittest 需依賴ddt庫
2.pytest 直接使用@pytest.mark.parametrize裝飾器
七 用例分類執行
1.unittest默認執行全部用例,也可以通過加裝TestSuite,執行部分用例
2.pytest 可以通過@pytest.mark 來標記類和方法,pytes.main加入參數("-m")可以只運行標記的類和方法