分享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 调用DLL操作抄表机
Jan 12 Python
简单的通用表达式求10乘阶示例
Mar 03 Python
跟老齐学Python之关于循环的小伎俩
Oct 02 Python
python代码实现ID3决策树算法
Dec 20 Python
新手常见6种的python报错及解决方法
Mar 09 Python
Python re 模块findall() 函数返回值展现方式解析
Aug 09 Python
pytorch的梯度计算以及backward方法详解
Jan 10 Python
Python性能分析工具py-spy原理用法解析
Jul 27 Python
python 实现倒计时功能(gui界面)
Nov 11 Python
python模拟点击在ios中实现的实例讲解
Nov 26 Python
PyTorch的Debug指南
May 07 Python
Python函数式编程中itertools模块详解
Sep 15 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
模拟xcopy的函数
2006/10/09 PHP
php 数学运算验证码实现代码
2009/10/11 PHP
PHP 巧用数组降低程序的时间复杂度
2010/01/01 PHP
php网站来路获取代码(针对搜索引擎)
2010/06/08 PHP
详解PHP实现定时任务的五种方法
2016/07/25 PHP
基于jQuery的input输入框下拉提示层(自动邮箱后缀名)
2012/06/14 Javascript
深入理解JavaScript 闭包究竟是什么
2013/04/12 Javascript
JS模仿手机端九宫格登录功能实现代码
2016/04/28 Javascript
AngularJS监听路由的变化示例代码
2016/09/23 Javascript
bootstrap table配置参数例子
2017/01/05 Javascript
JavaScript与JQUERY获取元素的宽、高和位置
2017/02/26 Javascript
使用命令行工具npm新创建一个vue项目的方法
2017/12/27 Javascript
javaScript实现鼠标在文字上悬浮时弹出悬浮层效果
2020/04/12 Javascript
jquery获取元素到屏幕四周可视距离的方法
2018/09/05 jQuery
uni-app 组件里面获取元素宽高的实现
2019/12/27 Javascript
[36:37]2014 DOTA2华西杯精英邀请赛5 24 VG VS iG
2014/05/25 DOTA
[50:38]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第二场 3月7日
2021/03/11 DOTA
python spyder中读取txt为图片的方法
2018/04/27 Python
python实现图片转字符画
2021/02/19 Python
CSS3实现银灰色动画效果的导航菜单代码
2015/09/01 HTML / CSS
沙龙级头发造型工具:FOXYBAE
2018/07/01 全球购物
亚洲领先的设计购物网站:Pinkoi
2020/11/26 全球购物
linux面试题参考答案(11)
2012/05/01 面试题
毕业生自荐信
2013/12/14 职场文书
教育孩子心得体会
2014/01/01 职场文书
大学生职业生涯规划书范文
2014/01/14 职场文书
海飞丝的广告词
2014/03/20 职场文书
英语专业自荐书
2014/06/13 职场文书
5s标语大全
2014/06/23 职场文书
交通安全责任书范本
2014/07/24 职场文书
关于迟到的检讨书
2015/05/06 职场文书
2015年外贸业务员工作总结范文
2015/05/23 职场文书
2019客服个人年终工作总结范文
2019/07/08 职场文书
pytorch 一行代码查看网络参数总量的实现
2021/05/12 Python
Pytorch中Softmax和LogSoftmax的使用详解
2021/06/05 Python
SpringBoot+VUE实现数据表格的实战
2021/08/02 Java/Android