unittest模块使用

ps,其他可参考内容:https://www.jianshu.com/p/e50d8f810eab

首先要知道,一个完整的单元测试流程:
完整单元测试流程:

1.写好一个完整的TestCase类
2.多个TestCase 由TestLoder被加载到TestSuite里面, TestSuite也可以嵌套TestSuite
3.由TextTestRunner来执行TestSuite,测试的结果保存在TextTestResult中 TestFixture指的是环境准备和恢复

testcase类完善

1.确定需要测试的模块

#需要测试下面这两个方法
def myadd(a,b):
    return a+b
def myminu(a,b):
    return a-b

2.自己的testcase类

import unittest

class mytest(unittest.TestCase):
    '''TestCase类使用'''
    @classmethod
    def setUpClass(cls):
        '''父类函数重写  必须使用装饰器,是所有case执行的前置条件,只运行一次'''
        ta="hello"
        tb="hi"
        print("前置条件设置")
    @classmethod
    def tearDownClass(cls):
        '''父类函数重写  必须使用装饰器,所有case执行完后只运行一次'''
        print("最后执行")

    def setUp(self):
        '''父类函数重写  环境准备,测试用例执行的前置条件 在每个test的测试函数执行时先跑一次'''
        print("初始化环境变量")
    def tearDown(self):
        '''父类函数重写  环境还原,执行测试用例的后置条件 在每个test的测试函数执行时先跑一次'''
        sa="wo"
        sb="ho"
        print("环境还原")

    def test_mytestadd(self):
        '''自定义测试函数test1  每个测试函数以test开头'''
        self.assertEqual(3,myadd(2,1))  #是否相等
        self.assertNotEqual(2,myadd(3,9))


    def test_mytestmins(self):
        '''自定义测试函数test2  以test开头  若有多个  按从上到下顺序执行'''
        self.assertNotEqual(3,myminu(5,3))
        self.assertEqual(7,myminu(11,4))
        
if __name__=='__main__':
    '''verbosity为0:不用输出测试结果,为1:默认为1,F为测试失败,E是测试出错,S为跳过测试,一个点是测试成功;为2:输出详细测试结果'''
    unittest.main(verbosity=1)

在这里插入图片描述

testsuite使用

def usetestsuit():
    '''TestSuite()类和TestLoad类使用'''
    suite=unittest.TestSuite()  #生成suite类,可以存放testcase
    a="test"
    if a=="testtwo":
        testcases=[mytest("test_mytestadd"),mytest("test_mytestmins")]
        suite.addTests(testcases)  #添加多个testcase到suite
    elif a=="testone":
        suite.addTest(mytest("test_add_with_sikp"))
    elif a=="testall":
        suite.addTests(unittest.TestLoader().loadTestsFromTestCase(mytest))#加载所有mytest类中的test开头的测试用例
    else:
        suite.addTests(unittest.TestLoader().discover('.','test_*.py'))
    import HTMLReport
    report="txt"
    if report == 'terminal':
        runner = unittest.TextTestRunner(verbosity=1)
        runner.run(suite)
    elif report == 'txt':
        with open('ut_log.txt', 'a') as fp:
            runner = unittest.TextTestRunner(stream=fp, verbosity=1)
            runner.run(suite)
    elif report == 'html':
        runner = HTMLReport.TestRunner(report_file_name='test',
                                       output_path='report',
                                       title='测试报告',
                                       description='测试描述',
                                       sequential_execution=True
                                       )
        runner.run(suite)

整个测试环节完整代码如下:

import unittest

def myadd(a,b):
    return a+b
def myminu(a,b):
    return a-b
'''完整单元测试流程:

1.写好一个完整的TestCase类
2.多个TestCase 由TestLoder被加载到TestSuite里面, TestSuite也可以嵌套TestSuite
3.由TextTestRunner来执行TestSuite,测试的结果保存在TextTestResult中
   TestFixture指的是环境准备和恢复
'''

class mytest(unittest.TestCase):
    '''TestCase类使用'''
    @classmethod
    def setUpClass(cls):
        '''父类函数重写  必须使用装饰器,是所有case执行的前置条件,只运行一次'''
        ta="hello"
        tb="hi"
        print("前置条件设置")
    @classmethod
    def tearDownClass(cls):
        '''父类函数重写  必须使用装饰器,所有case执行完后只运行一次'''
        print("最后执行")

    def setUp(self):
        '''父类函数重写  环境准备,测试用例执行的前置条件 在每个test的测试函数执行时先跑一次'''
        print("初始化环境变量")
    def tearDown(self):
        '''父类函数重写  环境还原,执行测试用例的后置条件 在每个test的测试函数执行时先跑一次'''
        sa="wo"
        sb="ho"
        print("环境还原")

    def test_mytestadd(self):
        '''自定义测试函数  每个测试函数以test开头'''
        self.assertEqual(3,myadd(2,1))  #是否相等
        self.assertNotEqual(2,myadd(3,9))


    def test_mytestmins(self):
        '''自定义测试函数  以test开头  若有多个  按从上到下顺序执行'''
        self.assertNotEqual(3,myminu(5,3))
        self.assertEqual(7,myminu(11,4))

    '''
        1.@unittest.skip("不执行当前测试用例"),无条件配置时,无条件跳过当前测试用
        2.@unittest.skipif(condition,reason),提交为真 跳过
        3.@unittest.skipUnless(condition,reason),条件为假,跳过
    '''
    @unittest.skip("不执行当前测试用例")  #装饰器用来跳过测试用例
    def test_add_with_sikp(self):
        self.assertEqual(3,myadd(1,2))
        self.assertEqual(3,myadd(1,2))

def usetestsuit():
    '''TestSuite()类和TestLoad类使用'''
    suite=unittest.TestSuite()  #生成suite类,可以存放testcase
    a="test"
    if a=="testtwo":
        testcases=[mytest("test_mytestadd"),mytest("test_mytestmins")]
        suite.addTests(testcases)  #添加多个testcase到suite
    elif a=="testone":
        suite.addTest(mytest("test_add_with_sikp"))
    elif a=="testall":
        suite.addTests(unittest.TestLoader().loadTestsFromTestCase(mytest))#加载所有mytest类中的test开头的测试用例
    else:
        suite.addTests(unittest.TestLoader().discover('.','test_*.py'))
    import HTMLReport
    report="txt"
    if report == 'terminal':
        runner = unittest.TextTestRunner(verbosity=1)
        runner.run(suite)
    elif report == 'txt':
        with open('ut_log.txt', 'a') as fp:
            runner = unittest.TextTestRunner(stream=fp, verbosity=1)
            runner.run(suite)
    elif report == 'html':
        runner = HTMLReport.TestRunner(report_file_name='test',
                                       output_path='report',
                                       title='测试报告',
                                       description='测试描述',
                                       sequential_execution=True
                                       )
        runner.run(suite)

if __name__=='__main__':
    '''verbosity为0:不用输出测试结果,为1:默认为1,F为测试失败,E是测试出错,S为跳过测试,一个点是测试成功;为2:输出详细测试结果'''
    unittest.main(verbosity=1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值