import unittest
defmy_sum(a,b):return a + b
classmy_test(unittest.TestCase):defsetUp(self):print("setUp被自动调用了")deftearDown(self):print("testDown被自动调用了")deftest_001(self):print(my_sum(5,6))deftest_002(self):print(my_sum(0,3))
类级
不管类中有多少方法,一个类开始的时候自动调用函数,结束之后自动调用函数
类级的fixture一定要是类方法
@classmethond def setUpClass(cls)类开始时自动调用的方法
@classmethond def tearDownClass(cls)类结束时自动调用的方法
mytest.py修改如下:
import unittest
defmy_sum(a,b):return a + b
classmy_test(unittest.TestCase):@classmethoddefsetUpClass(cls):print("setupclass自动调用了")@classmethoddeftearDownClass(cls):print("tearDownClass自动调用了")defsetUp(self):print("setUp被自动调用了")deftearDown(self):print("testDown被自动调用了")deftest_001(self):print(my_sum(5,6))deftest_002(self):print(my_sum(0,3))
模块级
不管py文件中有多少个类,以及类中有多少方法,只自动执行一次
def setUpModule()在py文件开始时自动调用
def tearDownModule()在py文件结束时自动调用
mytest.py文件修改如下:
import unittest
defsetUpModule():print("setUpModule自动调用了")deftearDownModule():print("tearDwonModule自动调用了")defmy_sum(a,b):return a + b
classmy_test1(unittest.TestCase):@classmethoddefsetUpClass(cls):print("setupclass自动调用了")@classmethoddeftearDownClass(cls):print("tearDownClass自动调用了")defsetUp(self):print("setUp被自动调用了")deftearDown(self):print("testDown被自动调用了")deftest_001(self):print(my_sum(5,6))deftest_002(self):print(my_sum(0,3))classmy_test2(unittest.TestCase):@classmethoddefsetUpClass(cls):print("setupclass自动调用了")@classmethoddeftearDownClass(cls):print("tearDownClass自动调用了")defsetUp(self):print("setUp被自动调用了")deftearDown(self):print("testDown被自动调用了")deftest_001(self):print(my_sum(5,6))deftest_002(self):print(my_sum(0,3))
小结
一定要在继承于unittest.TestCase这个类的子类中使用
setUp,tearDown,每个方法执行开始和完毕后自动调用
setUpClass,tearDwonClass,每个类开始时和结束时自动调用
setUpModule,tearDownModule,每个py文件开始和结束的时候自动调用
断言
让程序来判断测试用例执行结果是否符合预期
UnitTest常用断言方法
assertEqual(参数1,参数2),参数顺序可以颠倒
如果参数1(实际结果)与参数2(预期结果)的值相同,断言成功没否则断言失败
修改后的mytest.py:
import unittest
defsetUpModule():print("setUpModule自动调用了")deftearDownModule():print("tearDwonModule自动调用了")defmy_sum(a,b):return a + b
classmy_test1(unittest.TestCase):@classmethoddefsetUpClass(cls):print("setupclass自动调用了")@classmethoddeftearDownClass(cls):print("tearDownClass自动调用了")defsetUp(self):print("setUp被自动调用了")deftearDown(self):print("testDown被自动调用了")deftest_001(self):
num1 =print(my_sum(5,6))#定义变量num1得到函数的返回值
self.assertEqual(num1,11)# num1存在实际结果,11时预期结果# 实际结果与预期结果相符,代表测试用例测试通过deftest_002(self):
num1 =print(my_sum(0,3))
self.assertEqual(num1,3)
assertIn(参数1,参数2)
如果参数1在参数2里面,则断言成功,否则断言失败。修改后的mytest.py如下:
import unittest
import random
defsetUpModule():print("setUpModule自动调用了")deftearDownModule():print("tearDwonModule自动调用了")defmy_sum(a,b):return a + b
defmy_rand():# 返回1到5之间的随机数return random.randint(10,50)classmy_test1(unittest.TestCase):@classmethoddefsetUpClass(cls):print("setupclass自动调用了")@classmethoddeftearDownClass(cls):print("tearDownClass自动调用了")defsetUp(self):print("setUp被自动调用了")deftearDown(self):print("testDown被自动调用了")deftest_001(self):
num1 = my_sum(1,6)#定义变量num1得到函数的返回值
self.assertEqual(num1,7)# num1存在实际结果,11时预期结果# 实际结果与预期结果相符,代表测试用例测试通过deftest_002(self):
num1 = my_sum(0,3)
self.assertEqual(num1,3)deftest_003(self):
num1 = my_rand()
self.assertIn(num1,[1,2,3,4,5])