unittest與pytest對比

---相同點:     測試框架:經過python代碼來編寫用例、蒐集用例、運行用例、生成報告---編寫用例:    unittest:繼承TestCase   unittest.testcase    pytest:函數/類裏面的方法,用例名稱必須以test_開頭,若是用例在類中,類名必須以Test開頭---前置後置:    unittest:setup/teardown    setupClass,tearDownClass      setup:當中獲得的變量,如何從傳遞給測試用例   self.xxx      setupClass:cls.xxx    pytest:        方案一:沿用unittest的風格            一、用例級別:setup teardown    類和類外部的用例均可以使用            二、類級別:setup_class  teardown_class                @classmethod                def setup_class(self):                    print("類前置-01")                @classmethod                def teardown_class(self):                    print("類後置01")             三、模塊級別:                setup_module   teardown_module        方案二:fixture              先定義再調用                    定義:@pytest.fixture() def init()                    調用:@pytest.mark.usefixtures("init")            一、函數實現的,函數名稱不固定---如何知道它是前置/後置                @pytest.fixture                def fix():                    pass            二、前置和後置操做,寫在一個函數裏面 ---如何區分哪些是前置代碼 哪些是後置代碼                @pytest.fixture                def fix():                    前置代碼                    yeild #分隔線                    後置代碼            三、4個做用域 測試函數(function)、測試類(class)、測試模塊文件(module)、測試會話(session)                @pytest.fixture(scope=function/class/module/session)                def fix():                    前置代碼                    yield #分隔線                    後置代碼            四、不須要跟測試類/測試函數放在一塊兒,須要時再調用            五、前置操做獲得的一些數據,如何傳遞給測試用例                yield 返回值                在測試用例當中,以fixture函數名做爲用例參數,用例參數接收返回值                    def init():                        print("做用於爲測試函數的======前置======代碼")                        a = [1,2,3,4,5,6]                        yield a                    class TestDay:                        def test_new01(self,init):                            print("===類下的用例1===")                            for i in init:                                print(i)                測試函數的參數有兩種:fixture 參數化-case                若是fixture有返回值,那麼將它做爲測試函數的參數時,則能夠不用使用:@pytest.mark.usefixtures("init")  程序會自動找            六、共享機制:conftest.py                conftest.py:定義fixture,能夠定義多個                共享的範圍:當前conftest.py所在目錄下(包括子孫目錄)的全部測試用例共享                若是須要在test01基礎上增長內容,變成test02。須要在test02上引用test01---僞繼承                  @pytest.fixture()                  def fix01():                     pass                  @pytest.fixture()                  def fix02(fix01):                     新增的代碼                     yield fix01                  執行順序:fix01前置   fix02前置   fix02後置   fix01後置                  嵌套的前提:fix01 與fix02  要麼同級,要麼fix01>fix02---斷言   unittest:self.assert   pytest:assert 表達式,根據表達式的結果判斷經過/失敗---收集用例   用例分散在多個文件中   unittest:TestLoad.discover(目錄)---收集到套件中,run方法執行   pytest:不須要寫代碼去搜集用例,自動收集-查找用例的方式。執行用例時會自動收集           pytest命令行:pytest[參數]     如何自動收集用例:        一、目錄--從哪一個目錄下開始搜索用例:            rootdir:在哪一個路徑下運行,則pytest自動在當前路徑下進行查找-rootdir        二、文件名--命名符合test_*.py或者*_test.py條件的文件名        三、函數/類下方法:-函數名以test_開頭                       -以Test開頭(不含__init__)的類下的test_開頭方法        蒐集並運行用例          方式一:pytest -s -v 控制檯顯示詳細用例執行狀況          方式二:python文件中-pytest.main()---執行順序        一、文件名:ASCALL碼順序從上到下        二、文件內部:按照代碼前後順序-即從上到下執行---測試報告      unittest:HTMLTestRunner   BeautifulReport      pyteest:allure
相關文章
相關標籤/搜索