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)
原文地址:https://www.cnblogs.com/yinwenbin/p/10596541.html