分享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使用cookie库操保存cookie详解
Mar 03 Python
Python写入数据到MP3文件中的方法
Jul 10 Python
基于Python的接口测试框架实例
Nov 04 Python
Python pyinotify模块实现对文档的实时监控功能方法
Oct 13 Python
浅谈python requests 的put, post 请求参数的问题
Jan 02 Python
Python CSV文件模块的使用案例分析
Dec 21 Python
Python递归及尾递归优化操作实例分析
Feb 01 Python
基于python3的socket聊天编程
Feb 17 Python
Python 操作 MySQL数据库
Sep 18 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
Feb 26 Python
彻底解决pip下载pytorch慢的问题方法
Mar 01 Python
python程序的组织结构详解
Dec 06 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
调整PHP的性能
2013/10/30 PHP
php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法
2015/07/06 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
2017/09/22 PHP
stripos函数知识点实例分享
2019/02/11 PHP
js 屏蔽鼠标右键脚本附破解方法
2009/12/03 Javascript
JQuery Study Notes 学习笔记(一)
2010/08/04 Javascript
JavaScript利用append添加元素报错的解决方法
2014/07/01 Javascript
jQuery带箭头提示框tooltips插件集锦
2014/11/17 Javascript
jQuery源码解读之hasClass()方法分析
2015/02/20 Javascript
jQuery延迟加载图片插件Lazy Load使用指南
2015/03/25 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
Bootstrap实现带动画过渡的弹出框
2016/08/09 Javascript
Node.js中使用jQuery的做法
2016/08/17 Javascript
TypeScript入门-接口
2017/03/30 Javascript
详解Angular 4.x 动态创建组件
2017/04/25 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
2017/05/15 jQuery
使用JavaScript实现一个小程序之99乘法表
2017/09/21 Javascript
使用Node.js实现一个多人游戏服务器引擎
2019/03/13 Javascript
Vue 中使用富文本编译器wangEditor3的方法
2019/09/26 Javascript
webpack4 optimization使用总结
2019/11/10 Javascript
跟老齐学Python之使用Python操作数据库(1)
2014/11/25 Python
Python使用xlrd读取Excel格式文件的方法
2015/03/10 Python
Python读写文件方法总结
2015/06/09 Python
Python实现的自定义多线程多进程类示例
2018/03/23 Python
python3+PyQt5使用数据库表视图
2018/04/24 Python
Python3视频转字符动画的实例代码
2019/08/29 Python
python3用urllib抓取贴吧邮箱和QQ实例
2020/03/10 Python
python如何提升爬虫效率
2020/09/27 Python
工程造价专业大学生职业规划范文
2014/03/09 职场文书
党员教师一句话承诺
2014/05/30 职场文书
教育专业毕业生推荐信
2014/07/10 职场文书
2015年技术工作总结范文
2015/04/20 职场文书
2015年度考核个人工作总结
2015/10/24 职场文书
2019年朋友圈经典励志语录50条
2019/07/05 职场文书
详解非极大值抑制算法之Python实现
2021/06/28 Python
java设计模式--建造者模式详解
2021/07/21 Java/Android