分享unittest单元测试框架中几种常用的用例加载方法


Posted in Python onDecember 02, 2020

unittest模块是Python自带的一个单元测试模块,我们可以用来做单元测试。unittest模块包含了如下几个子模块:

  • 测试用例:TestCase
  • 测试集:TestSuite
  • 加载用例:TestLoader
  • 执行用例:TextTestRunner

首先编写一个简单的加减乘除数学方法类:

class MathCalculate:
 '''
 加减乘除的计算类
 '''
 def __init__(self, first_num, second_num):
  self.first_num = first_num
  self.second_num = second_num

 def add(self):
  '''
  加法
  :return:
  '''
  return self.first_num + self.second_num

 def subtract(self):
  '''
  减法
  :return:
  '''
  return self.first_num - self.second_num

 def multiply(self):
  '''
  乘法
  :return:
  '''
  return self.first_num * self.second_num

 def divide(self):
  '''
  除法
  :return:
  '''
  try:
   return round(self.first_num / self.second_num, 2)
  except ZeroDivisionError:
   return '∞'

接下来我们利用unittest中的TestCase类来编写测试用例,编写之前,要先知道TestCase类以及类方法的用法:

  1. 要引用TestCase类,需要引入unittest模块
  2. 引用TestCase是编写一个测试类,所以要新建一个类
  3. 测试类里面的方法名都是以test_开头,这样unittest才能识别到用例并去执行

新建一个模块,编写一个简单的测试用例类:

import unittest
from python_for_unittest_testsuite.MathCalculate import MathCalculate as MC


class TestMathCalculate(unittest.TestCase):
 '''
 测试加减乘除类
 '''

 def test_add(self):
  actual = MC(1, 1).add()
  self.assertEqual(2, actual, msg='两数相加测试失败')

 def test_subtract(self):
  actual = MC(1, 1).subtract()
  self.assertEqual(0, actual, msg='两数相减测试失败')

 def test_multiply(self):
  actual = MC(1, 1).multiply()
  self.assertEqual(1, actual, msg='两数相乘测试失败')

 def test_divide(self):
  actual = MC(1, 1).divide()
  self.assertEqual(1, actual, msg='两数相除测试失败')


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

我们运行代码之后,得到如下结果:

分享unittest单元测试框架中几种常用的用例加载方法

但是这样远远达不到我们的要求,还需要继续优化,接下来进入正题......

上面我们看到的是利用unittest.main()执行所有的用例,但是有的时候我们不需要执行所有的测试用例,并且可以按照自己的需求去添加用例,这时我们就要使用TestSuite来帮助我们更好地去实现单元测试

方法一:加载测试用例,直接使用addTest()方法添加测试用例,代码示范如下:

import unittest
from python_for_unittest_testsuite.test_math_calculate import TestMathCalculate

suite = unittest.TestSuite()
# 增加一条用例 addTest()方法传入:类名(测试方法名)
suite.addTest(TestMathCalculate('test_add'))
suite.addTest(TestMathCalculate('test_subtract'))
suite.addTest(TestMathCalculate('test_multiply'))
suite.addTest(TestMathCalculate('test_divide'))

# 上下文管理器,生成测试报告
with open('test_math.txt', mode='w+', encoding='utf-8') as f:
 runner = unittest.TextTestRunner(f, 'text', 2)
 runner.run(suite)

方法二:加载测试类,通过TestLoader里面的loadTestsFromTestCase来加载测试类,代码示范如下:

import unittest
from python_for_unittest_testsuite.test_math_calculate import TestMathCalculate

suite = unittest.TestSuite()
loader = unittest.TestLoader()
# 加载测试类
suite.addTest(loader.loadTestsFromTestCase(TestMathCalculate))


# 上下文管理器,生成测试报告
with open('test_math.txt', mode='w+', encoding='utf-8') as f:
 runner = unittest.TextTestRunner(f, 'text', 2)
 runner.run(suite)

方法三:加载测试模块,通过TestLoader里面的loadTestsFromModule来加载测试类,代码示范如下:

import unittest
from python_for_unittest_testsuite import test_math_calculate


suite = unittest.TestSuite()
loader = unittest.TestLoader()
# 加载测试模块
suite.addTest(loader.loadTestsFromModule(test_math_calculate))


# 上下文管理器,生成测试报告
with open('test_math.txt', mode='w+', encoding='utf-8') as f:
 runner = unittest.TextTestRunner(f, 'text', 2)
 runner.run(suite)

方法四:自动搜寻测试用例,根据传入的测试模块的所属目录路径自动去查找测试用例,代码示范如下:

import unittest

# 根据传入的测试模块的所属目录路径自动去查找
suite = unittest.defaultTestLoader.discover("G:\pycharm\PycharmProjects\python_class\python_for_unittest_testsuite")

# 上下文管理器,生成测试报告
with open('test_math.txt', mode='w+', encoding='utf-8') as f:
 runner = unittest.TextTestRunner(f, 'text', 2)
 runner.run(suite)

以上就是unittest单元测试框架中常用的几种用例加载方法的详细内容,更多关于unittest单元测试框架 用例加载的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python Socket编程入门教程
Jul 11 Python
Python实现获取操作系统版本信息方法
Apr 08 Python
Python 中的with关键字使用详解
Sep 11 Python
Python简单格式化时间的方法【strftime函数】
Sep 18 Python
Python标准库之itertools库的使用方法
Sep 07 Python
根据DataFrame某一列的值来选择具体的某一行方法
Jul 03 Python
Python OpenCV利用笔记本摄像头实现人脸检测
Aug 20 Python
python通过txt文件批量安装依赖包的实现步骤
Aug 13 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
Feb 27 Python
浅谈Python里面None True False之间的区别
Jul 09 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
Jul 18 Python
python index() 与 rindex() 方法的使用示例详解
Dec 24 Python
python 使用cycle构造无限循环迭代器
Dec 02 #Python
python 使用csv模块读写csv格式文件的示例
Dec 02 #Python
python 发送邮件的四种方法汇总
Dec 02 #Python
如何用PyPy让你的Python代码运行得更快
Dec 02 #Python
python 实现波浪滤镜特效
Dec 02 #Python
python 如何对logging日志封装
Dec 02 #Python
python3中确保枚举值代码分析
Dec 02 #Python
You might like
PHP+.htaccess实现全站静态HTML文件GZIP压缩传输(一)
2007/02/15 PHP
非常不错的一个javascript 类
2006/11/07 Javascript
javascript 事件处理、鼠标拖动效果实现方法详解
2012/05/11 Javascript
JS 按钮点击触发(兼容IE、火狐)
2013/08/07 Javascript
JS的get和set使用示例
2014/02/20 Javascript
五种js判断是否为整数类型方式
2015/12/03 Javascript
详解JS: reduce方法实现 webpack多文件入口
2017/02/14 Javascript
Angularjs为ng-click事件传递参数
2017/06/15 Javascript
AngularJS使用$http配置对象方式与服务端交互方法
2018/08/13 Javascript
vue返回上一页面时回到原先滚动的位置的方法
2018/12/20 Javascript
详解ES6中的Map与Set集合
2019/03/22 Javascript
Vue中使用matomo进行访问流量统计的实现
2019/11/05 Javascript
iSlider手机端图片滑动切换插件使用详解
2019/12/24 Javascript
Angular之jwt令牌身份验证的实现
2020/02/14 Javascript
es6数组的flat(),flatMap()函数用法实例分析
2020/04/18 Javascript
Vue使用自定义指令实现拖拽行为实例分析
2020/06/06 Javascript
[05:04]完美世界携手游戏风云打造 卡尔工作室地图界面篇
2013/04/23 DOTA
[01:14:35]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第一局
2016/02/26 DOTA
python k-近邻算法实例分享
2014/06/11 Python
python中文编码问题小结
2014/09/28 Python
Python连接MySQL并使用fetchall()方法过滤特殊字符
2016/03/13 Python
Python Lambda函数使用总结详解
2019/12/11 Python
python 定义类时,实现内部方法的互相调用
2019/12/25 Python
Python如何将模块打包并发布
2020/08/30 Python
Python3如何使用tabulate打印数据
2020/09/25 Python
html5 canvas合成海报所遇问题及解决方案总结
2017/08/03 HTML / CSS
俄罗斯一家时尚女装商店:Charuel
2019/12/04 全球购物
Chemist Warehouse中文网:澳洲连锁大药房
2021/02/05 全球购物
为什么需要版本控制
2016/10/28 面试题
银行简历自我评价
2014/02/11 职场文书
学生生病请假条范文
2014/02/16 职场文书
房屋转让协议书范本
2014/04/11 职场文书
董事长助理工作总结2015
2015/07/23 职场文书
2015年度个人工作总结报告
2015/10/24 职场文书
MySQL中存储时间的最佳实践指南
2021/07/01 MySQL
Java处理延时任务的常用几种解决方案
2022/06/01 Java/Android