UnitTest介绍: unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例
UnitTest介绍:
unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果。
UnitTest框架的优点:
- 能够组织多个用例去执行
- 提供丰富的断言方法
- 提供丰富的日志与测试结果
使用UnitTest框架需要注意的地方:
- UnitTesrt框架是python自带库不需要下载,使用时import即可
- 新建一个测试类是需要继承unittest.TestCase类
UnitTest框架使用:
TestCase类中定义的几个特殊方法:
- setUp():每个测试方法运行前运行,测试前的初始化工作。
- tearDown():每个测试方法运行结束后运行,测试后的清理工作。
- setUpClass():所有的测试方法运行前运行,单元测试前期准备,必须使用 @classmethod装饰器进行修饰,setUp()函数之前执行,整个测试过程只执行一次。比如:实例化浏览器、浏览器最大化、隐式等待设置
- tearDownClass():所有的测试方法运行结束后执行,单元测试后期清理,必须使用 @classmethod装饰器进行修饰,tearDown()之后执行,整个测试过程只执行一次。
执行用例:
将功能相关的测试用例组合到一起成为一个测试用例集,unittest框架中通过TestSuite类来组装所有的测试用例集。(也就是说,使用测试集合可 以同时执行同一个py文件中的多个测试用例类)
- TestLoader类:测试用例加载器,返回一个测试用例集合
- loadTestsFromTestCase类:根据给定的测试类,获取其中的所有以‘test’开头的测试方法,并返回一个测试集合
- TestSuite类:组装测试用例的实例,支持添加和删除用例,最后将传递给test runner进行测试执行
- TextTestRunner类:测试用例执行类,其中Text 表示以文本形式输出测试结果
运用以上所述做个练习:
# 导入unittest模块 import unittest # 继承unittest.TestCase类 class NumberTest(unittest.TestCase): def setUp(self): # 在每个测试用例执行前都需要键盘输入一个数字 self.number = input("-->请输入数字") # 将每个接受的数字转换成int self.number = int(self.number) # Unittest默认运行以test开头的测试用例 def test_a(self): print(self.number) # 使用unittest.TestCase类下面的断言方法对测试结果的判断 self.assertEqual(self.number, 10, msg="输入的数字不是10") # @unittest.skip(‘跳过用例b‘) def test_b(self): print(self.number) self.assertEqual(self.number, 20, msg="输入的数字不是20") def test_c(self): print(self.number) self.assertEqual(self.number, 30, msg="输入的数字不是30") # 在每个测试用例执行完成后都打印"结束" def tearDown(self): print("结束") class LoaderTest(unittest.TestCase): def test_d(self): print("测试LoaderTest") if __name__ == "__main__": # # 执行用例的方法:unittest.main() # # 搜索该模块下所有以test开头的测试用例方法,并按照ASCLL码排序执行用例。 # unittest.main() ‘‘‘ # 执行用例的方法:测试套件 suite = unittest.TestSuite() # 一次添加多个用例 testlist = [NumberTest("test_a"), NumberTest("test_b")] suite.addTests(testlist) # # 一次添加一个用例 # suite.addTest(NumberTest("test_a")) # suite.addTest(NumberTest("test_b")) runner = unittest.TextTestRunner() runner.run(suite) ‘‘‘ # 测试套件运行测试类中的测试方法 ‘‘‘ # 将两个测试类实例化 testCase = unittest.TestLoader().loadTestsFromTestCase(NumberTest) testCase01 = unittest.TestLoader().loadTestsFromTestCase(LoaderTest) # 将实例对象加入suite suite = unittest.TestSuite([testCase, testCase01]) # 运行suite unittest.TextTestRunner().run(suite) ‘‘‘ # 测试套件运行测试类