unittest.TestCase 包含了 setUp() 和 tearDown() 两个方法,其中 setUp() 方法用于初始化测试固件;而 tearDown() 方法用于销毁测试固件。程序会在运行每个测试用例(以 test_ 开头的方法)之前自动执行 setUp() 方法来初始化测试固件,在每个测试用例(以 test_ 开头的方法)运行完成之后自动执行 tearDown() 方法来销毁测试固件。
setUp()函数是在众多函数或说是在一个类里最先被调用的函数,每执行完一个函数都要从setUp()调用开始后再执行下一个函数,有几个函数几次,与位置无关,随便放在那里都是他先被调用。
tearDown()函数是在众多函数执行完后他才被执行,不管这个类里面有多少函数,他总是最后一个被执行,与位置无关,放在那里都行,最后不管测试函数是否执行成功都执行tearDown()方法;如果setUp()方法失败,则认为这个测试项目失败,不会执行测试函数也不执行tearDown()方法。
1、setUp()和tearDown()方法都是非必要条件,如果没有也可以写pass
2、setUp()和tearDown()方法每个测试用例都会执行,先执行前置setUp,然后执行的用例(test*),最后执行的后置tearDown
3、setUp():setUp()方法用于测试用例执行前初始化工作。如测试用例中需要访问数据库,可以在setUp中建立数据库连接并进行初始化。如测试用例需要登录web,可以先实例化浏览器
4、tearDown():tearDown()方法用于测试用例执行之后的善后工作。如关闭数据库连接、关闭浏览器
unittest 在运行每个测试用例(以 test_ 开头的方法)之前都执行了 setUp() 方法,在每个测试用例(以 test_ 开头的方法)运行完成之后都执行了 tearDown() 方法,setUp() 方法和tearDown() 方法执行多次
#!/usr/bin/env python
# _*_coding:utf-8_*_
import unittest
class Test(unittest.TestCase):
def setUp(self):
print("执行setUp初始化固件")
def tearDown(self):
print("调用tearDown销毁固件")
def test_001_a(self):
print("this is test_001_a用例")
def test_002_b(self):
print("this is test_002_b用例")
def test_003_a(self):
print("this is test_003_a用例")
def login(self):
print("this is login用例")
if __name__ == '__main__':
unittest.main()
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test02.py
...
执行setUp初始化固件
this is test_001_a用例
----------------------------------------------------------------------
调用tearDown销毁固件
Ran 3 tests in 0.000s
执行setUp初始化固件
this is test_002_b用例
OK
调用tearDown销毁固件
执行setUp初始化固件
this is test_003_a用例
调用tearDown销毁固件
Process finished with exit code 0
setUpClass() 方法和tearDownClass()前加了@classmethod, unittest 在运行(以 test_ 开头的方法)测试用例之前执行setUpClass() 方法1次,最后运行完成(以 test_ 开头的方法)之后执行 tearDownClass() 方法1次,setUpClass() 方法和tearDownClass() 方法分别执行1次
#!/usr/bin/env python
# _*_coding:utf-8_*_
import unittest
class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("执行setUpClass初始化固件")
@classmethod
def tearDownClass(cls):
print("调用tearDownClass销毁固件")
def test_001_a(self):
print("this is test_001_a用例")
def test_002_b(self):
print("this is test_002_b用例")
def test_003_a(self):
print("this is test_003_a用例")
def login(self):
print("this is login用例")
if __name__ == '__main__':
unittest.main()
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test02.py
...
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
执行setUpClass初始化固件
this is test_001_a用例
this is test_002_b用例
this is test_003_a用例
调用tearDownClass销毁固件
Process finished with exit code 0