unittest测试框架的使用方法

import unittest

class myclass(object):

	@classmethod
	def sum(cls,a,b):
		return a + b

	@classmethod
	def sub(cls,a,b):
		return a - b

class myTest(unittest.TestCase):
	
	@classmethod
	def setUpClass(cls):
		print("---所有测试前的准备工作")

	@classmethod
	def tearDownClass(cls):
		print("---所有测试完成后的清理")

	#初始化工作
	def setUp(self):
		self.a = 3
		self.b = 1
		print("---初始化完成")

	#退出清理
	def tearDown(self):
		print("退出清理工作")

	#具体的测试用例
	def testsum(self):
		self.assertEqual(myclass.sum(self.a,self.b),4,'test_sum_fail')

	def testsub(self):
		self.assertEqual(myclass.sub(self.a,self.b),2,'test_sub_fail')

if __name__ == '__main__':
	unittest.main()

'''
四要素:
	1.test fixture(测试固件)
		一个test fixture代表一个或者多个测试执行前的准备动作和测试结果后的清理动作
	2.test case(测试用例)
		一个test case就是一个最小测试单元,也就是一个完整的测试流程,通过继承unittest.TestCase创建新的测试用例
	3.test suite(测试套件)
		一个test suite就是一组测试用例,一组测试套件或者两者共同组成的集合
	4.testrunner(测试运行器)
		一个testrunner由执行设定的测试用例和将测试结果提供给用户两部分功能组成

单元测试加载方法:
	1.直接通过unittest.main()方法加载,测试方法的执行顺序按照方法名的ASCII码升序排序
	2.将所有的单元测试用例(Test Case)添加到测试套件(Test suite)中一次性加载所有的对象
	
TestCase类中定义的特殊方法:
	setUp();每个测试方法运行前执行,测试前的初始化工作
	tearDown();每个测试方法结束后执行,测试的清理工作
	setUpclass();所有测试方法执行前运行,单元测试前期准备,必须使用classmethod装饰器进行修饰,setUp()执行前
	执行,整个测试过程只执行一次
	tearDownClass();所有测试方法运行结束后执行,单元测试后期清理,必须使用classmethod装饰器进行修饰,tearDown()执行后
	执行,整个测试过程只执行一次

TestLoader()类:测试用例加载器,返回一个测试用例的集合
loadTestFromTestCase():根据给定的测试类,获取其中所有以test开头的测试方法,并返回一个测试集合
TestSuite()类:组装测试用例的实例。支持添加和删除用例,最后将传递给testrunner进行测试执行
TestTestRunner()类:测试用例执行类,其中Test表示以文本形式输出测试结果

设置verbosity <= 0数字,输出结果不显示执行成功的用例数
设置verbosity = 1 ,输出结果仅以(.)表示成功的用户数
设置verbosity >= 2的数字,输出每个测试用例的详细信息

TestTestRunner.run()方法会返回一个TestResult实例对象,存储用例执行的详细信息。


加载测试集合步骤:
    1.TestLoader(测试用例加载器)根据传入的参数获取相应的测试用例的测试方法 
    2.make suite(由单元测试框架调用,用于生产test suite对象的实例)把所有的测试用例组装成test suite集合
    3.将test suite集合传递给test runner执行
    
测试用例按照顺序执行
    if __name__ == '__main__':
        suite = unittest.TestSuite()
        
        #将测试用例添加到测试容器当中
        suite.addTest(Mytest("test_name1"))
        suite.addTest(Mytest("test_name2"))
        suite.addTest(Mytest("test_name3"))
        suite.addTest(Mytest("test_name4"))
        suite.addTest(Mytest("test_name5"))
        
        #创建TestTestRunner对象
        runner =  unittest.TestTestRunner()
        runner.run(suite)

忽略某个测试方法
    无条件忽略
    有条件忽略
    
    @unittest.skip('skipping') 无条件忽略
    @unittest.skipIf(a > 5,'condition is not satisfied') 如果a > 5则忽略该条测试用例
    @unittest.skipUnless(sys.platform.startswith("linux"),'requires Windows') 除非平台为Windows,否则忽略该用例

批量执行测试模块
    import unittest
    if __name__ == '__main__':
        testSuite = unittest.TestLoader().discover(".")
        unittest.TestTestRunner(verbosity=2).run(testSuite)
        文件必须放在测试脚本目录

断言方法:
   assertEqual(a,b,msg='sss') 测试a == b,否则抛出信息msg
   assertTrue(expr,msg='sss') 测试表达式expr为True
   assertIs(a,b,msg=None)     测试a和b为同一个对象
   assertIsNone(expr,msg)     测试expr为None
   assertIn(a,b,msg)          测试a包含在b中
   assertIsInstance(obj,cls,msg) 测试obj为cls类型,可用isinstance(obj,cls)或assertIs(type(obj),cls)代替
   assertRaises(exc [,fun,*args,**kwds]) 测试函数fun(*args,**lwds)抛出exc异常,否则抛出断言异常
   assertRaiseRegexp(exc,r [,fun,*args,**kwds]) 测试函数fun抛出exc异常,同时可用正则r匹配异常信息,否则抛出断言异常

生成HTML测试报告(需要下载HTMLTestRunner文件,自行百度)
    filename = '路径+文件名+后缀'
    with open(filename,'wb') as f:
        runner = HTMLTestRunner.HTMLTestRunner(stream = f,title = 'testname',description = '描述')
        rnner.run()   

'''

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值