UnitTest核心的要素
Fixture-用例执行顺序
Fixture分为方法级别、类级别和模块级别
方法级Fixture
1、每个测试用例之前要调用setUp
2、每个测试用例执行后要调用tearDown
3、TestCase中有多少测试用例,那么setUp和tearDown就被调用多少次
代码演示
# 导包
import unittest
class Test_Start(unittest.TestCase):
def setUp(self):
print("setup被调用!!!")
def tearDown(self):
print("teardown被调用!!!")
def test1_case(self):
print('2222222')
def test2_case(self):
print('33333333')
执行结果为:
setup被调用!!!
2222222
teardown被调用!!!
setup被调用!!!
33333333
teardown被调用!!!
通过结果可以看出来,在每个测试用例执行前会调用setUp方法,在每个用例执行结束的时候会调用tearDown方法,不管有多少用例,每次都会调用。
类级Fixture
1、一个类不管有多少个方法, 在方法执行前,执行一次setUpClass
2、一个类不管有多少个方法,在方法执行后,执行一次tearDownClass
3、因为setUpClass和tearDownClass都是类级别的方法,所以在方法前面加@classmethod修饰
代码演示
import unittest
class Test_Start(unittest.TestCase):
def setUp(self):
print("setup被调用!!!")
def tearDown(self):
print("teardown被调用!!!")
@classmethod
def setUpClass(cls):
print("setUpClass被调用!!!")
@classmethod
def tearDownClass(cls):
print("tearDownClass被调用!!!")
def test1_case(self):
print('2222222')
def test2_case(self):
print('33333333')
运行结果为:
setUpClass被调用!!!
setup被调用!!!
2222222
teardown被调用!!!
setup被调用!!!
33333333
teardown被调用!!!
tearDownClass被调用!!!
通过结果不难看出setUpClass和tearDownClass在整个过程中就是在类运行前运行了一次和运行结束时运行了一次。
模块级Fixture
1、在python中模块就是py文件, 一个py文件就是一个模块
2、在一个模块中不管有多少类,多少测试用例, 所有测试用例执行前,执行一次setUpModule
3、在一个模块中不管有多少类,多少测试用例, 所有测试用例执行后,执行一次tearDownModule
代码演示
import unittest
def setUpModule():
print("setUpModule被调用了")
def tearDownModule():
print("tearDownModule被调用了")
class Test_Start1(unittest.TestCase):
def setUp(self):
print("setup被调用!!!")
def tearDown(self):
print("teardown被调用!!!")
@classmethod
def setUpClass(cls):
print("setUpClass被调用!!!")
@classmethod
def tearDownClass(cls):
print("tearDownClass被调用!!!")
def test01_case(self):
print('2222222')
def test02_case(self):
print('33333333')
class Test_Start2(unittest.TestCase):
def setUp(self):
print("setup被调用!!!")
def tearDown(self):
print("teardown被调用!!!")
@classmethod
def setUpClass(cls):
print("setUpClass被调用!!!")
@classmethod
def tearDownClass(cls):
print("tearDownClass被调用!!!")
def test1_case(self):
print('2222222')
def test2_case(self):
print('33333333')
运行结果为:
setUpModule被调用了
setUpClass被调用!!!
setup被调用!!!
2222222
teardown被调用!!!
setup被调用!!!
33333333
teardown被调用!!!
tearDownClass被调用!!!
setUpClass被调用!!!
setup被调用!!!
2222222
teardown被调用!!!
setup被调用!!!
33333333
teardown被调用!!!
tearDownClass被调用!!!
tearDownModule被调用了
通过结果也是可以明显的看出执行顺序,模块级别的只在最开始和结束时被调用了一遍。
断言
1、在自动化测试中,测试用例是否测试通过,不是人为观察,而是通过程序去判断
2、断言的作用就是判断测试用例是否执行通过
3、测试用例都有实际结果与预期结果, 如果实际结果与预期结果相同,断言通过, 否则断言失败
assertEqual-判断实际结果与预期结果是否相等
asserEqual(预期结果, 实际结果):①预期结果与实际结果相同,断言通过;②预期结果与实际结果不同,断言失败
代码演示
import unittest
def sum(a, b):
return a + b
class Test_Case(unittest.TestCase):
def test_01(self):
result = sum(1,2)
self.assertEqual(3,result)
def test_02(self):
result = sum(2, 2)
self.assertEqual(4, result)
assertIn-判断值是否在结果中
assertIn(值, 结果):①如果值在结果中, 断言通过;②如果值不在结果中,断言失败
代码演示
import unittest
def sum(a):
if a == "想你了":
return "我也想你了,亲爱的!!"
if a == "喜欢你":
return "我也喜欢你,宝贝!!"
class Test_Case(unittest.TestCase):
def test_01(self):
result = sum("想你了")
self.assertIn("亲爱的",result)
def test_02(self):
result = sum("喜欢你")
self.assertIn("宝贝",result)
常见断言
1、assertTrue(条件)
如果条件成立,断言通过,否则断言失败
2、assertFalse(条件)
如果条件不成立,断言通过,否则断言失败
assertEqual(预期结果, 实际结果)
如果预期结果与实际结果相等,断言通过,否则失败
3、assertNotEqual(预期结果, 实际结果)
如果预期结果与实际结果不相等,断言通过, 否则失败
4、assertIsNone(值)
如果值为None,断言通过,否则失败
5、assertIsNotNone(值)
如果值不为None,断言通过,否则失败
6、assertIn(值1, 值2)
如果值1包含在值2内, 断言通过,否则失败
7、assertNotIn(值1, 值2)
如果值1不包含在值2内,断言通过,否则失败
下期继续介绍参数化和生成测试报告的说明还有跳过测试用例的方法