目录
8.2、defaultTestLoader通过类名、模块名加载
1、什么是UnitTest框架
概念:UnitTest是Python自带的一个单元测试框架,可以用它来做单元测试
2、为什么使用UnitTest框架
-
能够组织多个用例去执行
-
提供丰富的断言方法
-
能够生成测试报告
3、UnitTest核心要素
-
TestCase(测试用例)
-
TestSuite(测试套件,把多个TestCase集成到一个测试TestSuite)
-
TextTestRunner(执行测试用例)
-
Fixture(测试夹具)
4、UnitTest使用流程
第一步:导入unittest模块
第二步:创建一个类,这个类必须继承自UnitTest.TestCase类
第三步:类中每个方法代表一个测试用例,方法名必须以test开头
第四步:将测试用例加入到TestSuite
第五步:使用TextTestRunner执行
5、unittest断言
让程序代替人判断程序执行结果是否符合预期结果的过程,需要在测试用例中对测试结果进行断言。
assertEqual(a, b, msg=None) | # a == b 断言a和b是否相等,相等则测试用例通过 |
assertNotEqual(a, b,msg=None) | # a != b 断言a和b是否相等,不相等则测试用例通过 |
assertTrue(x,msg=None) | # x is True 断言x是否True,是True则测试用例通过 |
assertFalse(x,msg=None) | # x is False 断言x是否False,是False则测试用例通过 |
assertIn(a, b,msg=None) | # a in b 断言a是否在b中,在b中则测试用例通过 |
assertNotIn(a, b,msg=None) | # a not in b 断言a是否在b中,不在b中则测试用例通过 |
-
assertEqual(参数1,参数2,msg=None)
-
如果参数1和参数2相等,断言成功,否则断言失败
-
参数1存放实际结果,参数2存放预期结果
-
msg默认信息为None,可以给msg指定信息,当断言失败时,会作为错误信息返回
-
6、TestCase测试用例
在编写测试用例之前,我们需要创建一个存放测试用例的类,导入unittest,并且要继承unittest.TestCase类,该类中的方法必须要以test开头
下面创建两个测试类,StringTest和NumberTest,分别写了两个测试方法
StringTest类
import unittest
class StringTest(unittest.TestCase):
def test_Method1(self):
self.assertIn("hello","hello world")
def test_Method2(self):
self.assertEqual("H","Happy")
NumberTest类
import unittest
class NumberTest(unittest.TestCase):
def test_funa(self):
self.assertEqual(1,2,"两个参数不相等")
def test_funb(self):
self.assertEqual(2,2)
这两个类可以直接运行,直接在该类中,右键点击Run Unittests for 模块名.类名,就可以直接查看测试结果,或者也可以加入如下代码,直接调用unittest.main()来执行
if __name__ == "__main__":
unittest.main()
单独执行NumberTest类,一共两条测试用例,一条通过,一条不通过,并打印了错误信息
7、TestSuit测试套件
上面介绍了如何执行单个测试类里面的测试用例,但是测试是不可能只写一个测试类,当需要执行多个测试类中的测试方法时,需要用到测试套件,把测试用例组装起来。
1、实例化:suite = unittest.TestSuit() (suite:为TestSuit实例化的名称)
2、添加单个用例:
suit.addTest(ClassName("MethodName")) (ClassName:为类名 MethodName:为方法名)
3、添加多个测试用例,参数为列表suit.addTests([ClassName("MethodName1"),ClassName("MethodName2")])
4、TestSuit需要配合TextTestRunner才能被执行,
还以StringTest和NumberTest为例,介绍TestSuit的使用