什么是unitTest?
- UnitTest是python自带的自动化测试框架
- UnitTest主要包含的内容
- TestCase:测试用例
- TestSuite:测试套件,把多个TestCase集成到一个测试TestSuite
- TestRunner:执行测试用例
- TestLoader:自动从代码中加载多个测试用例TestCase
- Fixture:Test特性
TestCase
- 第一步:导入unittest模块
- 第二步:实现一个类,必须继承unittest.TestCase类
- 第三步:类中每一个方法代表一个测试用例,方法名必须以test开头
import unittest
def my_sum(a,b):
return a + b
class my_test(unittest.TestCase):
def test_001(self):
print(my_sum(5,6))
def test_002(self):
print(my_sum(0,3))

- 如果鼠标右键不出现unittest选项,如下操作之后按下OK键


TestSuite
- 把多个测试用例整合成一个测试套件
- 使用方法
- import导入unittest
- import导入其他的包含测试用例的py文件
- 实例化unittest.TestSuite类的对象
- 调用对象的addTest方法
import unittest
import testcase_01
suite = unittest.TestSuite()
suite.addTest(testcase_01.my_test("test001"))
suite.addTest(testcase_01.my_test("test002"))
- 用unittest.makeSuite一次导入一个类中的所有测试方法
import unittest
import testcase_01
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(testcase_01.my_test))
TextTestRunner
- 作用:TextTestRunner是用来执行测试用例
- 使用方法
- 先实例化TextTestRunner的对象
- 调用对象的run方法
import unittest
import testcase_01
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(testcase_01.my_test))
runner = unittest.TextTestRunner()
runner.run(suite)
TestLoader
- 可以从指定目录查找指定py文件中的所有测试用例,自动加载到TestSuite中
import unittest
suite = unittest.TestLoader().discover(".","my*.py")
runner = unittest.TextTestRunner()
runner.run(suite)
TestSuite与TestLoader区别
- TestSuite需要手动添加测试用例,可以添加测试类,也可以添加测试类中某个测试方法
- 当要执行py文件中多个测试用例的几个,而不是全部执行,那么适合用TestSuite的addTest加载指定的测试用例
- TestLoader搜索指定目录下指定开头.py文件,并添加测试类中的所有测试方法,不能指定添加测试方法
- 当要执行py文件中的所有测试用例,适合使用TestLoader
小结
- 所有的测试用例最终都是用TextTestRunner来执行的
- TextTestRunner指定的是TestSuite
- 一个TestSuite中可以有多个TestCase
Fixture
- 可以在测试用例执行之前自动调用指定的函数,在测试用例执行之后自动调用指定的函数
- 控制级别
- 方法级
- 类级
- 模块级
- 不管一个模块(一个模块就是一个py文件)中有多少类,模块执行前后自动调用函数
方法级
- 在TestCase,也就是测试用例所在的class中定义方法
- def setUp(self)当测试用例执行前,自动被调用
- def tearDown(self)当测试用例执行后,自动被调用
- 如果一个TestCase中有多个测试用例,那么setUp和tearDown就会被自动调用多次。mytest.py内容修改如下:
import unittest
def my_sum(a,b):
return a + b
class my_test(unittest.TestCase):
def setUp(self):
print("setUp被自动调用了")
def tearDown(self):
print(