一、单元测试框架简介
说明:简介部分参考了这篇博文
1、什么是单元测试?
单元测试就是对单个模块或者单个类或者单个函数进行测试,一般是研发做的,也就是常说的白盒测试;按照阶段来分,测试一般分为一般就是单元测试、集成测试、系统测试、验收测试。
2、为什么要做单元测试?
单元测试之后,是集成测试,只有单个功能模块测试通过之后,才能把单个功能模块集成起来做集成测试;从底层发现bug,可以减少合成后出现的很多问题;另外越早发现bug越好,因为如果到了后期才发现就要推倒重来,对于时间和成本来说,非常浪费。
3、单元测试对于测试人员来说需要做什么?
简单来说,就是为了执行测试用例-输入测试数据-输出测试结果,进而会用到python中的unittest模块
4、单元测试框架的作用?
- 提供用例组织与执行:
当测试用例只有几条时,可以不必考虑用例的组织,但是当测试用例达到成百上千条时,大量的测试用例堆砌在一起,就产生了扩展性与维护性等问题,需要考虑用例的规范与组织问题了。 - 提供丰富的断言方法:
不论是功能测试,还是单元测试,在用例执行完成之后都需要将实际结果与进行预期结果的进行比较(断言),从而断定用例是否执行通过。单元测试框架一般会提供丰富的断言方法。 例如判断相等/不等、包含/不包含、True/False 的断言方法等。 - 提供丰富的日志:
当测试用例执行失败时能抛出清晰的失败原因, 当所有用例执行完成后能提供丰富的执行结果。 例如总执行时间、失败用例数、成功用例数等。
所以从这些特性来看,单元测试框架可以 帮助我们更好的完成自动化测试。
5、单元测试框架有哪些
每个语言都有自己对应的单元测试框架
Java—Junit
c+±–gtest
Python—unittest
二、unittest的使用
1、使用规则
- 定义一个类继承继承unittest.TestCase
- 实现setUp /tearDown方法 或 setUpClass/tearDownClass方法
- 定义测试方法,方法名以test开头,若要各个方法按特定顺序 执行可在test后加数字
2、断言
若断言失败,则断言后的代码不会执行
- 常用的断言有:
(1)self.assertEqual(预期结果,实际结果) 断言预期结果等于实际结果
(2)self.assertNotEqual(预期结果,实际结果) 断言预期结果不等于实际结果
(3)self.assertTrue(实际结果) 断言预期结果为真(True)
(4)self.assertFalse(实际结果) 断言预期结果为假(False)
(5)self.assertIsNone(实际结果) 断言预期结果为空(None)
(6)self.assertIsNotNone(实际结果) 断言预期结果不为空(NotNone)
3、执行顺序
-
若多个测试方法之间没有业务上的先后顺序,则用setUp/tearDown,每个测试方法前后都会执行一次setUp/ tearDown;多个测试方法顺序: 按方法名ascii码从小到大;
-
若多个测试方法之间有业务上的先后顺序,则用setUpClass/tearDownClass;只执行一次setUpClass/tearDownClass;多个测试方法顺序: 按方法名ascii码从小到大;
# setUp/ tearDown使用举例
import unittest
from test1 import JSQ
class JSQTest(unittest.TestCase): # 定义一个 类 去继承 单元测试框架类 ,这个类不调用也会执行里边的类方法
def setUp(self): # 实现setUp方法 一般用于打开浏览器
print("-----setUp---")
self.jsq=JSQ()
def test2Jia(self): # 测试方法以test开头,可在test后加数字规定测试方法测试的顺序
print("-----testJia----")
# jsq=JSQ()
rr=self.jsq.jia(1,2)
er=3
self.assertEqual(er,rr) # 断言相等
# self.assertNotEqual(er,rr)
# self.assertTrue(rr)
# self.assertFalse(rr)
# self.assertIsNone(rr)
# self.assertIsNotNone(rr)
print("aaaaaaaaaaaa")
def test1Jian(self):
print("-------testJian----")
# jsq=JSQ()
self.jsq.jian(1,2)
def tearDown(self):
print("-----tearDown---")
# setUpClass/tearDownClass 使用举例
import unittest
from test1 import JSQ
class TaobaoTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.jsq=JSQ()
print("-----setUpClass----")
def test1LoginSucce(self):
print("----testLoginSucce----")
def test2Buy(self):
print("---testBuy-----")
@classmethod
def tearDownClass(self):
print("-----tearDown---")