UnitTest框架
2020-03-10 本文已影响0人
清水秋香
UnitTest概念与用法
UnitTest是python自带的单元测试框架,主要适用于单元测试,可以对多个测试用例进行管理和封装
UnitTest也叫PyUnit,它提供了很多类和方法来处理各种测试工作
- 测试用例----testcase
测试用例必须在类中
测试用例所在的类,必须集成TestCase
测试用例的方法名称必须以test开头
测试用例的执行顺序,按照Ascill码顺序(0-9,A-Z,a-z)
利用父类TestCase的assertxxxx方法来断言
用@unittest.skip(reason)装饰来跳过测试用例 - 测试固件----testfixture
也叫测试夹件,主要工作是初始化和善后
测试固件分为两种,一种是类级别的,一种是方法级别的
类级别的测试固件,所有测试用例执行之前与之后运行一次
方法级别的测试固件,每个测试用例执行之前与之后都运行一次 - 测试套件----testsuite
是用来组织测试用例的
如:
方法一:用例逐个添加到suite
suite = unittest.TestSuite()
suite.addTest(MyTest('test1'))
suite.addTest(MyTest('test2))
方法二:用例放入列表中,在添加到suite
suite = unittest.TestSuite()
list = [类名1("方法名1"),类名2("方法名2")]
suite.addTests(list)
方法三:通过TestLoader类的discover方法来
unittest.defaultTestLoader.discover('用例所在模块',pattern='*通配*.py')
discover(start_dir,pattern="test*.py",top_level_dir=None)
case_dir: 这个是待执行用例的目录
pattern:这个是匹配脚本名称的规则。test*.py意思是匹配test开头的所有脚本
top_lever_dir: 这个是顶层目录的名称,一般默认等于None就行。
- 测试运行器----testrunner
用来执行测试用例的
runver = unittest.TestTestRunner() #实例化TestRunner类
runner.run(suite)#执行用例
- 生成HTMLTestRunner报告
reportFile = open('./report/report.html,'wb')
runner = HTMLTestRunner(stream=reportFile,verbosity=1,description='用例执行详细信息',title = '测试报告')
runner.run(suite)
基本操作
import unittest
class Testmode1(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
@classmethod
def setUpClass(cls):
pass
@classmethod
def tearDownClass(cls):
pass
#条件判断,是否跳过
@unittest.skipIf(6 > 5, '这个case不执行')
def test_01(self):
print('test1')
@unittest.skip()
def test_02(self):
print('test2')
def test_03(self):
print('test3')
if __name__ == '__main__':
#运行顺序1 3 2
suite = unittest.TestSuite()
suite.addTest(Testmode1('test_01'))
suite.addTest(Testmode1('test_03'))
suite.addTest(Testmode1('test_02'))
runner = unittest.TextTestRunner()
runner.run(suite)
#运行顺序1 3 2
suite = unittest.TestSuite()
suite.addTests([Testmode1('test_01'),Testmode1('test_03'),Testmode1('test_02')])
runner = unittest.TextTestRunner()
runner.run(suite)
- 执行多个类下的case
from Unittest.mode1 import Testmode1
from Unittest.mode2 import Testmode2
from Unittest.mode3 import Testmode3
import unittest
case_01 = unittest.TestLoader().loadTestsFromTestCase(Testmode1)
case_02 = unittest.TestLoader().loadTestsFromTestCase(Testmode2)
case_03 = unittest.TestLoader().loadTestsFromTestCase(Testmode3)
suite = unittest.TestSuite([case_01,case_02,case_03])
unittest.TextTestRunner().run(suite)
- 将规则目录下的全部执行
import unittest
suite = unittest.defaultTestLoader.discover('Unittest',pattern='mode*.py' )
unittest.TextTestRunner().run(suite)