分享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实现获取Ip归属地等信息
Aug 27 Python
关于Python中浮点数精度处理的技巧总结
Aug 10 Python
python绘制圆柱体的方法
Jul 02 Python
Python3.6使用tesseract-ocr的正确方法
Oct 17 Python
python爬虫 urllib模块发起post请求过程解析
Aug 20 Python
python selenium 执行完毕关闭chromedriver进程示例
Nov 15 Python
python pyenv多版本管理工具的使用
Dec 23 Python
python自动点赞功能的实现思路
Feb 26 Python
浅谈Python中文件夹和python package包的区别
Jun 01 Python
解决pip install psycopg2出错问题
Jul 09 Python
Python图像读写方法对比
Nov 16 Python
Python爬虫之爬取哔哩哔哩热门视频排行榜
Apr 28 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
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
2014/05/08 PHP
ThinkPHP中I(),U(),$this->post()等函数用法
2014/11/22 PHP
php实现XML和数组的相互转化功能示例
2017/02/08 PHP
IE和Mozilla的兼容性汇总event
2007/08/12 Javascript
AJAX的跨域与JSONP(为文章自动添加短址的功能)
2010/01/17 Javascript
javascript getElementsByClassName函数
2010/04/01 Javascript
jquery图片不完全按比例自动缩小的简单代码
2013/07/29 Javascript
js键盘上下左右键怎么触发function(实例讲解)
2013/12/14 Javascript
js实现图片无缝滚动特效
2020/03/19 Javascript
jQuery AjaxUpload 上传图片代码
2016/02/02 Javascript
原生js实现返回顶部缓冲效果
2017/01/18 Javascript
Angular中实现树形结构视图实例代码
2017/05/05 Javascript
jQuery实现可拖动进度条实例代码
2017/06/21 jQuery
Bootstrap的aria-label和aria-labelledby属性实例详解
2018/11/02 Javascript
vue实现扫码功能
2020/01/17 Javascript
python获得图片base64编码示例
2014/01/16 Python
python关闭windows进程的方法
2015/04/18 Python
理解Python垃圾回收机制
2016/02/12 Python
python django 访问静态文件出现404或500错误
2017/01/20 Python
python+django+sql学生信息管理后台开发
2018/01/11 Python
Tensorflow实现卷积神经网络的详细代码
2018/05/24 Python
django一对多模型以及如何在前端实现详解
2019/07/24 Python
python如何使用jt400.jar包代码实例
2019/12/20 Python
python pyqtgraph 保存图片到本地的实例
2020/03/14 Python
Python requests及aiohttp速度对比代码实例
2020/07/16 Python
matplotlib bar()实现百分比堆积柱状图
2021/02/24 Python
澳大利亚家居用品零售商:Harris Scarfe
2020/10/10 全球购物
Servlet都有哪些方法?主要作用是什么?
2014/03/04 面试题
会计毕业生自荐信
2013/11/21 职场文书
红旗方阵解说词
2014/02/12 职场文书
《闻一多先生的说和做》教学反思
2014/04/28 职场文书
学生打架检讨书
2014/10/20 职场文书
故意伤害罪辩护词
2015/05/21 职场文书
企业宣传稿范文
2015/07/23 职场文书
Mysql中一千万条数据怎么快速查询
2021/12/06 MySQL
js前端图片加载异常兜底方案
2022/06/21 Javascript