一、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)