分享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将人民币转换大写的脚本代码
Feb 10 Python
Python中的with...as用法介绍
May 28 Python
Python学生成绩管理系统简洁版
Apr 05 Python
Python 机器学习库 NumPy入门教程
Apr 19 Python
python字符串切割:str.split()与re.split()的对比分析
Jul 16 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
Aug 13 Python
python中dict()的高级用法实现
Nov 13 Python
python 实现多线程下载m3u8格式视频并使用fmmpeg合并
Nov 15 Python
pytorch实现seq2seq时对loss进行mask的方式
Feb 18 Python
python中reload重载实例用法
Dec 15 Python
Python实现淘宝秒杀功能的示例代码
Jan 19 Python
使用Python脚本对GiteePages进行一键部署的使用说明
May 27 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
文章推荐系统(三)
2006/10/09 PHP
PHP中对用户身份认证实现两种方法
2011/06/04 PHP
php实现往pdf中加数字签名操作示例【附源码下载】
2018/08/07 PHP
JQuery onload、ready概念介绍及使用方法
2013/04/27 Javascript
Javascript 颜色渐变效果的实现代码
2013/10/01 Javascript
node.js中的fs.fsync方法使用说明
2014/12/15 Javascript
谈谈JavaScript类型系统之Math
2016/01/06 Javascript
jQuery模拟实现的select点击选择效果【附demo源码下载】
2016/11/09 Javascript
js实现一键复制功能
2017/03/16 Javascript
Vue.js实例方法之生命周期详解
2017/07/03 Javascript
nodejs开发微信小程序实现密码加密
2017/07/11 NodeJs
浅谈vue项目如何打包扔向服务器
2018/05/08 Javascript
用vue-cli开发vue时的代理设置方法
2018/09/20 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
2018/10/19 Javascript
Vue创建头部组件示例代码详解
2018/10/23 Javascript
vue组件之间数据传递的方法实例分析
2019/02/12 Javascript
浅谈vue权限管理实现及流程
2020/04/23 Javascript
vue页面引入three.js实现3d动画场景操作
2020/08/10 Javascript
PYTHON 中使用 GLOBAL引发的一系列问题
2016/10/12 Python
Python socket网络编程TCP/IP服务器与客户端通信
2017/01/05 Python
python中字符串类型json操作的注意事项
2017/05/02 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
2018/05/21 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
2019/12/12 Python
python3格式化字符串 f-string的高级用法(推荐)
2020/03/04 Python
VisionPros美国站:加拿大在线隐形眼镜和眼镜零售商
2020/02/11 全球购物
linux面试题参考答案(10)
2016/10/26 面试题
学期自我鉴定范文
2013/10/01 职场文书
自主招生自荐信
2013/12/08 职场文书
模具数控专业自荐信
2014/01/27 职场文书
机电一体化专业毕业生自荐信
2014/06/19 职场文书
机关副主任个人四风问题整改措施
2014/09/26 职场文书
晋江市委常委班子四风问题整改工作方案
2014/10/26 职场文书
大学团日活动总结书
2015/05/11 职场文书
主题班会开场白
2015/06/01 职场文书
SpringBoot系列之MongoDB Aggregations用法详解
2022/02/12 MongoDB
Win10鼠标轨迹怎么开 Win10显示鼠标轨迹方法
2022/04/06 数码科技