分享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学习必备知识汇总
Sep 08 Python
浅谈Python由__dict__和dir()引发的一些思考
Oct 30 Python
Python 25行代码实现的RSA算法详解
Apr 10 Python
python pycurl验证basic和digest认证的方法
May 02 Python
python 实现单通道转3通道
Dec 03 Python
pytorch ImageFolder的覆写实例
Feb 20 Python
Python编程快速上手——疯狂填词程序实现方法分析
Feb 29 Python
Keras模型转成tensorflow的.pb操作
Jul 06 Python
python ssh 执行shell命令的示例
Sep 29 Python
python中pop()函数的语法与实例
Dec 01 Python
Python截图并保存的具体实例
Jan 14 Python
python多线程方法详解
Jan 18 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
使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法
2010/04/02 PHP
php建立Ftp连接的方法
2015/03/07 PHP
PHP Opcache安装和配置方法介绍
2015/05/28 PHP
JMenuTab简单使用说明
2008/03/13 Javascript
jquery 的 $("#id").html() 无内容的解决方法
2010/06/07 Javascript
学习JavaScript的最佳方法分享
2011/10/21 Javascript
nodejs入门详解(多篇文章结合)
2012/03/07 NodeJs
JavaScript 学习笔记之一jQuery写法图片等比缩放以及预加载
2012/06/28 Javascript
ParseInt函数参数设置介绍
2014/01/02 Javascript
JS实现点击链接取消跳转效果的方法
2014/01/24 Javascript
javascript感应鼠标图片透明度显示的方法
2015/02/24 Javascript
Backbone.js 0.9.2 源码注释中文翻译版
2015/06/25 Javascript
AngularJS全局scope与Isolate scope通信用法示例
2016/11/22 Javascript
Bootstrap基本插件学习笔记之折叠(22)
2016/12/08 Javascript
谈谈jQuery之Deferred源码剖析
2016/12/19 Javascript
原生js实现放大镜效果
2017/01/11 Javascript
使用jquery判断一个元素是否含有一个指定的类(class)实例
2017/02/12 Javascript
jQuery ajax请求struts action实现异步刷新
2017/04/19 jQuery
NodeJS实现微信公众号关注后自动回复功能
2017/05/31 NodeJs
看看“疫苗查询”小程序有温度的代码
2018/07/31 Javascript
vue实现移动端悬浮窗效果
2018/12/01 Javascript
Vue v-for循环之@click点击事件获取元素示例
2019/11/09 Javascript
[04:27]DOTA2官方论坛水友赛集锦
2013/09/16 DOTA
[06:57]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD 选手采访
2021/03/11 DOTA
在Python的Django框架中simple-todo工具的简单使用
2015/05/30 Python
Python获取运行目录与当前脚本目录的方法
2015/06/01 Python
Python pyinotify日志监控系统处理日志的方法
2018/03/08 Python
Python使用Flask-SQLAlchemy连接数据库操作示例
2018/08/31 Python
python实现推箱子游戏
2020/03/25 Python
Python3爬虫学习之应对网站反爬虫机制的方法分析
2018/12/12 Python
python交互模式下输入换行/输入多行命令的方法
2019/07/02 Python
linux环境下Django的安装配置详解
2019/07/22 Python
PHP如何设置和取得Cookie值
2015/06/30 面试题
一道Delphi面试题
2016/10/28 面试题
汽修专业学生自我鉴定
2013/11/16 职场文书
CSS预处理框架——Stylus
2021/04/21 HTML / CSS