分享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基础教程之元组操作使用详解
Mar 25 Python
详解在Python和IPython中使用Docker
Apr 28 Python
python条件变量之生产者与消费者操作实例分析
Mar 22 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
May 07 Python
python中单下划线_的常见用法总结
Jul 10 Python
如何利用Pyecharts可视化微信好友
Jul 04 Python
Python实现非正太分布的异常值检测方式
Dec 09 Python
pycharm如何实现跨目录调用文件
Feb 28 Python
python删除指定列或多列单个或多个内容实例
Jun 28 Python
pycharm实现猜数游戏
Dec 07 Python
python通过cython加密代码
Dec 11 Python
Python Flask请求扩展与中间件相关知识总结
Jun 11 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 array_walk() 数组函数
2011/07/12 PHP
PHP优于Node.js的五大理由分享
2012/09/15 PHP
解析MySql与Java的时间类型
2013/06/22 PHP
ThinkPHP Mobile使用方法简明教程
2014/06/18 PHP
PHP使用range协议实现输出文件断点续传代码实例
2014/07/04 PHP
在laravel框架中使用model层的方法
2019/10/08 PHP
如何在PHP中使用数组
2020/06/09 PHP
改善用户体验的五款jQuery插件分享
2011/05/22 Javascript
JS限制Textarea文本域字符个数的具体实现
2013/08/02 Javascript
深入解析JavaScript的闭包机制
2015/10/20 Javascript
关于javascript的一些知识以及循环详解
2016/09/12 Javascript
JS实现京东首页之页面顶部、Logo和搜索框功能
2017/01/12 Javascript
javaScript 逻辑运算符使用技巧整理
2017/05/03 Javascript
JavaScript门面模式详解
2017/10/19 Javascript
一文读懂ES7中的javascript修饰器
2019/05/06 Javascript
微信小程序npm引入vant-weapp的踩坑记录
2019/08/01 Javascript
jquery.tagsinput.js实现记录checkbox勾选的顺序
2019/09/21 jQuery
jQuery模仿ToDoList实现简单的待办事项列表
2019/12/30 jQuery
在vue项目中利用popstate处理页面返回的操作介绍
2020/08/06 Javascript
javascript实现京东快递单号的查询效果
2020/11/30 Javascript
Windows系统配置python脚本开机启动的3种方法分享
2015/03/10 Python
Python将多个excel文件合并为一个文件
2018/01/03 Python
PyTorch基本数据类型(一)
2019/05/22 Python
Python字符串、列表、元组、字典、集合的补充实例详解
2019/12/20 Python
keras 多gpu并行运行案例
2020/06/10 Python
python的json包位置及用法总结
2020/06/21 Python
Python xlrd/xlwt 创建excel文件及常用操作
2020/09/24 Python
HTML5验证以及日期显示的实现详解
2013/07/05 HTML / CSS
英国领先的亚洲旅游专家:Wendy Wu Tours
2018/01/21 全球购物
英国珠宝和手表专家:Pleasance & Harper
2020/10/21 全球购物
是否可以从一个static方法内部发出对非static方法的调用?
2014/08/18 面试题
移动通信专业自荐信范文
2013/11/12 职场文书
《小熊住山洞》教学反思
2014/02/21 职场文书
安全温馨提示语大全
2015/07/14 职场文书
早上好问候语大全
2015/11/10 职场文书
Windows下用Nginx配置https服务器及反向代理的问题
2021/09/25 Servers