一、前言
從文章標題可以看出,就是初始化和釋放的操作,根據我的java習慣來學習pytest,個人感覺沒差太多,理解上也不是很難。
哦,對了,差點跑題了,這個框架是基於Python語言的,在學習的時候難免總會用java的類比思想來學習,下面言歸正傳哈。
我們還從 unittest與pytest來對比學習吧
二、unittest用法
unittest有兩個前置方法,兩個後置方法,分別是:
- setup()
- setupClass()
- teardown()
- teardownClass()
個人始終覺得unittest和Junit像極了。
三、pytest用法
當然,Pytest也提供了類似setup、teardown的方法,分別是:
- 模組級別:setup_module、teardown_module
- 函式級別:setup_function、teardown_function,不在類中的方法
- 類級別:setup_class、teardown_class
- 方法級別:setup_method、teardown_method
- 方法細化級別:setup、teardown
我總感覺學習pytest像是在學習testng一樣,難道是我的錯覺嗎,啊啊啊啊,不能吧。
四、unittest示例
unittest的setupClass和teardownClass,需要配合@classmethod裝飾器一起使用,也就是我們java說的註解呀,這塊是翻譯給java學Python的同學的,可忽略哈。
示例程式碼如下:
# -*- coding: utf-8 -*-
# @Time : 2020/10/21 20:09
# @Author : longrong.lang
# @FileName: test_setup_teardown_unittest.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
'''
unittest程式碼示例
'''
import unittest
class TestUnitTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("所有用例執行前執行")
def setUp(self):
print("每個用例開始前執行")
def tearDown(self):
print("每個用例結束後執行")
@classmethod
def tearDownClass(cls):
print("所有用例執行後執行")
def testA(self):
'''用例A'''
print("用例A執行了")
self.assertEquals(1, 1)
def testB(self):
'''用例B'''
print("用例B執行了")
self.assertTrue(True)
if __name__ == "__main__":
unittest.main()
執行結果
可以看出執行順序為:
setUpClass
setUp
testA
tearDown
setUp
testB
tearDown
tearDownClass
用例之間按用例名稱ASCII碼的順序載入,數字與字母順序為0~9,A~Z,a~z, 所以testA會在testB之前執行。
五、pytest示例
函式級的setup_function、teardown_function只對函式用例生效,而且不在類中使用
依舊還是把類和函式都有的情況放在一起,示例程式碼如下:
# -*- coding: utf-8 -*-
# @Time : 2020/10/21 20:27
# @Author : longrong.lang
# @FileName: test_setup_teardown_pytest.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
'''
pyetest示例
'''
import pytest
def setup_module():
print("setup_module():在模組最之前執行,且只執行一次")
def teardown_module():
print("teardown_module:在模組之後執行,且只執行一次")
def setup_function():
print("setup_function():每個方法之前執行")
def teardown_function():
print("teardown_function():每個方法之後執行")
def test_1():
print("正在執行用例1")
x = "this"
assert 'h' in x
def test_2():
print("正在執行用例2")
assert 1 == 1
class TestClass(object):
def setup_class(self):
print("setup_class(self):每個類之前執行一次,只執行一次")
def teardown_class(self):
print("teardown_class(self):每個類之後執行一次,只執行一次")
def test_A(self):
print("正在執行用例A")
x = "this"
assert 'h' in x
def test_B(self):
print("正在執行B")
assert 1 == 1
if __name__ == "__main__":
pytest.main(["-q", "test_setup_teardown_pytest.py"])
執行結果
可以看出來,互不影響,執行順序為:
setup_module()
setup_function()
test_1
teardown_function()
setup_function()
test_2
teardown_function()
setup_class(self)
test_A
test_B
teardown_class(self)
teardown_module
main方法中的-q,為pytest列印測試用例的執行結果級別。
如不清楚,請移步到《Pytest學習(一)- 入門及基礎》。
系列參考文章:
https://www.cnblogs.com/poloyy/category/1690628.html