分享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中用Ctrl+C终止多线程程序的问题解决
Mar 30 Python
Python Numpy 数组的初始化和基本操作
Mar 13 Python
Python实现的爬虫刷回复功能示例
Jun 07 Python
Python绘制的二项分布概率图示例
Aug 22 Python
Python中xml和json格式相互转换操作示例
Dec 05 Python
python 随机打乱 图片和对应的标签方法
Dec 14 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
Jun 20 Python
如何将你的应用迁移到Python3的三个步骤
Dec 22 Python
Python进阶之迭代器与迭代器切片教程
Jan 29 Python
Python实现自动签到脚本功能
Aug 20 Python
10个python爬虫入门实例(小结)
Nov 01 Python
详解Python内置模块Collections
Mar 22 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
便携利器 — TECSUN PL-365简评
2021/03/02 无线电
php根据日期判断星座的函数分享
2014/02/13 PHP
PDO预处理语句PDOStatement对象使用总结
2014/11/20 PHP
php实现将上传word文件转为html的方法
2015/06/03 PHP
Jquery ajax传递复杂参数给WebService的实现代码
2011/08/08 Javascript
javascript开发随笔二 动态加载js和文件
2011/11/25 Javascript
css与javascript跨浏览器兼容性总结
2014/09/15 Javascript
Angular中$cacheFactory的作用和用法实例详解
2016/08/19 Javascript
在js中实现邮箱格式的验证方法(推荐)
2016/10/24 Javascript
微信小程序中使元素占满整个屏幕高度实现方法
2016/12/14 Javascript
深入理解Angularjs中的$resource服务
2016/12/31 Javascript
JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)
2017/03/30 Javascript
五步轻松实现zTree的使用
2017/11/01 Javascript
JavaScript数据结构与算法之队列原理与用法实例详解
2017/11/22 Javascript
clipboard在vue中的使用的方法示例
2018/10/19 Javascript
layer.open的自适应及居中及子页面标题的修改方法
2019/09/05 Javascript
在SSM框架下用laypage和ajax实现分页和数据交互的方法
2019/09/27 Javascript
vue 实现v-for循环回来的数据动态绑定id
2019/11/07 Javascript
Python实现控制台进度条功能
2016/01/04 Python
深入解析Python中的list列表及其切片和迭代操作
2016/03/13 Python
Python的mysql数据库的更新如何实现
2017/07/31 Python
Python单链表原理与实现方法详解
2020/02/22 Python
python 窃取摄像头照片的实现示例
2021/01/08 Python
美国时装品牌:Nautica(诺帝卡)
2016/08/28 全球购物
医疗保健专业人士购物网站:Scrubs & Beyond
2017/02/08 全球购物
TheFork葡萄牙:欧洲领先的在线餐厅预订平台
2019/05/27 全球购物
文员个人求职自荐信
2013/09/21 职场文书
平面设计师工作职责范文
2013/12/03 职场文书
口头翻译求职人自荐信
2013/12/07 职场文书
大学军训感言1000字
2014/02/25 职场文书
电子商务专业毕业生自荐书
2014/06/22 职场文书
市场营销毕业求职信
2014/08/07 职场文书
说谎欺骗人检讨书300字
2014/11/18 职场文书
升学宴学生致辞
2015/07/27 职场文书
排查Tomcat进程假死的问题
2022/05/06 Servers
mysql全面解析json/数组
2022/07/07 MySQL