使用過unittest的小伙伴們都知道,setup和teardown是用來處理用例的開始前工作和結束后的工作,其中還有setupclass和teardownclass是保證執行所以的用例都只執行1次前置和后置,使用起來非常方便,那么學習pytest強大的測試框框,肯定也有這個功能,並且還比unittest的簡單不少。
pytest中的前置
pytest比較強大,提供了不僅僅一種方法的前置和后置:
- setup_module、teardown_module
- setup_function、teardown_function
- setup_class、teardown_class
- setup_method、teardown_method
- setup、teardown
光看上面的內容,肯定一臉懵逼,不知道到底什么時候使用,安靜來通過舉例一個個介紹
setup、teardown
先介紹第一個大家都比較熟悉的與unittest中的書寫一直,這個可以在類中使用,也可以在類外進行使用。
該方法每條用例都會執行
import pytest def setup(): print('這是測試用例的前置') def teardown(): print('這是測試用例的后置') def test01(): print('用例01') def test02(): print('用例02') if __name__ == '__main__': pytest.main(['-s'])
setup_module、teardown_module
該方法表示只能類外面執行用例過程中,只執行1次。相當於unittest中的setupclass和teardownclass方法
import pytest def setup_module(): print('這是測試用例的前置') def teardown_module(): print('這是測試用例的后置') def test01(): print('用例01') def test02(): print('用例02') if __name__ == '__main__': pytest.main(['-s','test_02.py'])
setup_function、teardown_function
該方法表示在類外面執行用例過程中,每次都會執行前置和后置。
import pytest def setup_function(): print('這是測試用例的前置') def teardown_function(): print('這是測試用例的后置') def test01(): print('用例01') def test02(): print('用例02') if __name__ == '__main__': pytest.main(['-s','test_02.py'])
setup_method、teardown_method
該方法表示在類中每次執行測試用例前,測試前置和測試后置都會執行一次
# coding:utf-8 import pytest class Test(): def setup_method(self): print('這是setup函數前置內容') def teardown_method(self): print('這是teardown函數后置內容') def test01(self): print('這是測試用例1') def test02(self): print('這是測試用例2') if __name__ == '__main__': pytest.main(['-s','test_01.py'])
setup_class、teardown_class
該方法表示在類中執行測試用例前,只執行1次測試前置和測試后置
# coding:utf-8 import pytest class Test(): def setup_class(self): print('這是setup函數前置內容') def teardown_class(self): print('這是teardown函數后置內容') def test01(self): print('這是測試用例1') def test02(self): print('這是測試用例2') if __name__ == '__main__': pytest.main(['-s','test_01.py'])
組合混用
上面介紹了每種方法的單獨用法,那么如果這些方法都一起使用?會怎么樣?
setup_class和setup_method、setup混合
# coding:utf-8 import pytest class Test(): def setup_method(self): print('這是setup_method用例前置內容') def setup_class(self): print('這是setup_class用例前置內容') def setup(self): print('這是setup用例前置內容') def teardown_class(self): print('這是teardown_class用例后置內容') def teardown_method(self): print('這是teardown_method用例后置內容') def teardown(self): print('這是teardown用例后置內容') def test01(self): print('這是測試用例1') def test02(self): print('這是測試用例2') if __name__ == '__main__': pytest.main(['-s','test_01.py'])
通過上面測試結果可以看出來,其中執行順序:setup_class>>setup_method>>setup,其中setup和setup_method都是表示執行每條用例前都需要進行執行前置內容
setup_module、setup_function組合
import pytest def setup(): print('這是setup測試用例前置內容') def setup_function(): print('這是setup_function測試用例前置內容') def setup_module(): print('這是setup_module測試用例前置內容') def teardown_module(): print('這是teardown_module測試用例后置內容') def teardown(): print('這是teardown測試用例后置內容') def teardown_function(): print('這是teardown_function測試用例后置內容') def test01(): print('用例01') def test02(): print('用例02') if __name__ == '__main__': pytest.main(['-s','test_02.py'])
通過上述測試發現,執行順序:setup_module>>setup_function>>setup。其中setup_module表示執行用例只執行一次前置。
總結:
1、setup_class和setup_module執行用例時,只執行一次前置和后置
2、setup_class,setup_method,setup是在類中執行的
3、setup_module,setup_function,setup是在類外執行的
4、其中setup類中,類外都可以執行。
安靜通過簡單的例子介紹了pytest的setup和teardown的使用方法和類型,最主要的是大家動手進行操作。實踐是檢驗正確的唯一標識。