zoukankan      html  css  js  c++  java
  • UnitTest基础

    一、unittest模块

    import unittest
    from Template_Log.log import LOG,logger #这里是引用的日志打印模板
    
    class test(unittest.TestCase):
    
        def setUp(self):
            LOG.info('前置条件')
    
        def tearDown(self):
            LOG.info('后置条件')
    
        @logger('测试test_1')
        def test_1(self):
            self.assertTrue('OOP'.isupper())
    
        @logger('测试test_2')
        @unittest.skipUnless(1<5,'为假跳过')
        def test_2(self):
            self.assertTrue('OOP'.isupper())
    
        @unittest.skipIf(1>0,'为真跳过')
        def test_3(self):
            self.assertTrue('OOP'.isupper())
    
        @unittest.skip('无条件跳过')
        def test_4(self):
            print('====无条件跳过====')
    
        @unittest.expectedFailure
        def test_5(self):
            self.assertNotEqual(6,6)
    
    if __name__ == '__main__':
        unittest.main(verbosity=2)
    '''
    @unittest.skip(reason):无条件跳过测试,reason描述为什么跳过测试 
    @unittest.skipif(conditition,reason):condititon为true时跳过测试 
    @unittest.skipunless(condition,reason):condition不是true时跳过测试
    @unittest.expectedFailure
    
    0 (静默模式): 你只能获得总的测试用例数和总的结果, 比如: 总共100个 失败20 成功80
    1 (默认模式): 非常类似静默模式 只是在每个成功的用例前面有个“.” 每个失败的用例前面有个 “F”
    2 (详细模式): 测试结果会显示每个测试用例的所有相关的信息
    '''

     二、加载用例集的几种方式

    1、简单的添加,入门了解用

    注:Demo3是模块名,test3是类名,test11、test22是单个用例名

    import unittest
    from unittest_ABC import Demo3
    from unittest_ABC.Demo3 import test3
    
    if __name__ == '__main__':
        # 创建用例集合,这里是一个空对象,也有可能用不上
        s=unittest.TestSuite()
    
        # 加载用例对象de几种方法
        s1 = unittest.TestLoader().loadTestsFromModule(Demo3) # 模块
        s2 = unittest.TestLoader().loadTestsFromTestCase(test3) # 类名
        s3 = unittest.TestLoader().loadTestsFromName('Demo3.test3.test_11') # 单个用例
        s4 = unittest.TestLoader().loadTestsFromNames(['Demo3.test3.test_11','Demo3.test3.test_22']) # 多个用例
    
        # 将加载的用例添加到集合中
        s4.addTest(Demo3.test3('test_11')) # 直接添加1个单用例,或者1个加载用例对象
        s4.addTests([s3]) # 直接添加多个单用例,或者多个加载用例对象
    
        tests = ['test_11', 'test_22']
        s5 = unittest.TestSuite(map(test3, tests)) # 这种很少用,也不好用
    
        # 运行用例集合
        unittest.TextTestRunner().run(s4)

    2、路径加载的方式

    import unittest
    
    f=open('test.txt','w')
    '''
    默认匹配test开头的py文件,可以通过pattern来修改匹配规则;
    暂时不知道下面2种加载方式的区别和优缺点;
    2个用例集在下面2中运行方式都能运行。
    '''
    s1 = unittest.TestLoader().discover(r"H:PycharmProjects接口unittest_ABC",pattern='Demo*.py')
    s2 = unittest.defaultTestLoader.discover(r"H:PycharmProjects接口unittest_ABC",pattern='Demo*.py')
    
    #运行方式1,可以通过文件流输出运行结果
    unittest.TextTestRunner(stream=f,verbosity=2).run(s2)
    
    #运行方式2,只可以在控制台输出运行结果。个人认为一般主要用在单个模块调试时用
    unittest.main(defaultTest='s2', verbosity=2)

    三、用测试报告输出测试结果

     这里有引用测试模板的方法来运行用例集,并生成html测试报告

    import unittest
    import time,os
    from Template_Report.ATestRunner import ATestRunner
    
    now=time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))#获取当前时间
    suit=unittest.defaultTestLoader.discover('unittest_ABC',pattern='lianxi1.py')#创建测试集
    
    basedir=os.path.abspath(os.path.dirname(__file__))#获取当前目录a
    file_dir=os.path.join(basedir,'report_dir')    #拼接目录basedir+'report_dir'
    
    if not os.path.exists(file_dir):#在当前目录创建文件夹
        os.makedirs(file_dir)    #创建文件夹
    
    file=os.path.join(file_dir,now+'.html')#拼接目录basedir+'report_dir'+now+'.html'
    fl_open=open(file,'wb')     #创建文件
    
    if __name__ == '__main__':
        #unittest.TextTestRunner().run(suit)
        runner = ATestRunner(stream=fl_open, title='接口测试报告',
                                         description='测试结果:')
        runner.run(suit)
  • 相关阅读:
    C#反射实现
    Oracle游标解析
    Oracle触发器详解
    C#委托、事件剖析(下)
    C#委托、事件剖析(上)
    Oracle子查询相关内容(包含TOP-N查询和分页查询)
    Oracle多表查询
    Oracle分组函数以及数据分组
    鸟哥的linux私房菜整理(1)---文件系统、磁盘
    golang面向对象整理
  • 原文地址:https://www.cnblogs.com/yinwenbin/p/10596541.html
Copyright © 2011-2022 走看看