千纸鹤

  博客园  ::  :: 新随笔  ::  ::  :: 管理
  5 随笔 :: 70 文章 :: 0 评论 :: 9301 阅读
《一》unittest中的skip装饰器使用
(1)四种不同的skip装饰器
1. @unittest.skip:用例执行时,无条件跳过该条用例
2. @unittest.skipIf:当if条件为真时,执行跳过操作
3. @unittest.skipUnless:与skipIf相反,当条件为假时,执行跳过操作
4. @unittest.expectedFailure:当用例报错(成功)的时候,系统选择忽略(报错)
(2)test_demo.py(源码)
import unittest
class Demo(unittest.TestCase):
def setUp(self) -> None:
print('setup')

@unittest.skip('无条件跳过该条用例')
def test_01(self):
print('test01')

@unittest.skipIf(1 == 1, '这是reason')
def test_02(self):
print('test02')

@unittest.skipUnless(1 != 1, '这是reason')
def test_03(self):
print('test03')

@unittest.expectedFailure
def test_04(self):
print('test04')
self.assertEqual(1, 1, msg='断言失败')

class Demo01(unittest.TestCase):
def test_01(self):
print('-----这是Demo01-----')

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

《二》测试套件的应用
(1)想要改变默认的UnitTest运行顺序,可以通过套件添加用例来实现
(2)调用套件的五种方式
说明:1~4需要创建套件,运行套件内的测试用例,基于运行器执行套件
创建套件
suite = unittest.TestSuite()
执行套件
runner = unittest.TextTestRunner(verbosity=2)
runner.run(suite)
1. 添加单个测试用例,基于测试用例的名称来添加
suite.addTest(Demo('test_04'))
2. 添加多个用例到套件:基于list来实现
cases = [Demo('test_02'), Demo('test_01'), Demo('test_03')]
suite.addTests(cases)
3. 添加多个用例到套件:通过添加一整个UnitTest类作为套件中的用例
suite.addTests(unittest.TestLoader().loadTestsFromTestCase(Demo01))
4. 添加多个用例到套件,通过Name来实现,里面写文件名
suite.addTests(unittest.TestLoader().loadTestsFromName('test_demo.Demo01'))
cases = [unittest.TestLoader().loadTestsFromName('test_demo.Demo'), unittest.TestLoader().loadTestsFromName('test_demo.Demo01')]
suite.addTests(cases)
cases = ['test_demo.Demo', 'test_demo.Demo01']
suite.addTests(unittest.TestLoader().loadTestsFromNames(cases))
5. 批量添加:通过文件名批量添加
# 定义用例的路径
case_dir = './'
# 基于路径来获取用例,组成套件:discover方法返回值就是一个suite,所以不需要创建套件了。
discover = unittest.defaultTestLoader.discover(start_dir=case_dir, pattern='u*.py')
# 1. 运行套件内的测试用例:verbosity是日志等级,0-1-2
runner = unittest.TextTestRunner(verbosity=2)
# 2. 基于运行器来执行套件
runner.run(discover)

《三》测试报告模块的应用
(1)环境部署
不需要通过PIP去安装,直接下载py文件,放入python安装路径下的Lib文件夹即可
(2)修改py文件的源码
第94行,将import StringIO修改成import io
第539行,将self.outputBuffer = StringIO.StringIO()修改成 self.outputBuffer = io.StringIO()
第642行,将if not rmap.has_key(cls):修改成if not cls in rmap:
第766行,将uo = o.decode('latin-1')修改成uo = e
第772行,将ue = e.decode('latin-1')修改成ue = e
第631行,将print >> sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime)修改成print(sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime))
(3)python学习之生成HTMLTestRunner测试报告
suite_demo1.py源码
import os
import unittest
from HTMLTestRunner.HTMLTestRunner import HTMLTestRunner

# python学习之生成HTMLTestRunner测试报告
path = './'
discover = unittest.defaultTestLoader.discover(start_dir=path, pattern='test*.py')
# 保存路径
report_dir = './report/'
# 测试报告的title
report_title = '虚竹的测试报告'
# 描述
report_description = '这是测试报告的描述'
# 测试报告文件
report_file = report_dir + 'report.html'
# 生成路径
if not os.path.exists(report_dir):
os.mkdir(report_dir)

# 生成HTMLTestRunner测试报告,本质意义上就是写入一个文件
with open(report_file, 'w') as file:
runner = HTMLTestRunner(stream=file, title=report_title,
description=report_description, verbosity=2)
runner.run(discover)
(4)python学习之生成HTMLTestRunnerCN测试报告
suite_demo2.py源码
# -*- coding:utf-8 -*-
import os
import unittest
from HTMLTestReportCN import HTMLTestRunner
# python学习之生成HTMLTestReportCN测试报告(配置测试报告信息)
path = './'
discover = unittest.defaultTestLoader.discover(start_dir=path, pattern='test*.py')
# 测试执行者:在HTMLTestReport报告中专属参数
report_tester = '虚竹'
# 保存路径
report_dir = './report/'
# 测试报告的title
report_title = '虚竹的测试报告'
# 描述
report_description = '这是测试报告的描述'
# 测试报告文件
report_file = report_dir + 'reportCN.html'
# 生成路径
if not os.path.exists(report_dir):
os.mkdir(report_dir)

# 生成HTMLTestRunner测试报告,本质意义上就是写入一个文件
with open(report_file, 'wb') as file:
runner = HTMLTestRunner(stream=file, title=report_title,
description=report_description, verbosity=2, tester=report_tester)
runner.run(discover)
posted on   隆江猪脚饭  阅读(68)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示