分享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的PIL模块来进行图片对比
Feb 18 Python
Python的mysql数据库的更新如何实现
Jul 31 Python
Python 实现字符串中指定位置插入一个字符
May 02 Python
python梯度下降法的简单示例
Aug 31 Python
对python实现二维函数高次拟合的示例详解
Dec 29 Python
20行python代码实现人脸识别
May 05 Python
在Python中等距取出一个数组其中n个数的实现方式
Nov 27 Python
基于Python获取docx/doc文件内容代码解析
Feb 17 Python
jupyter notebook 使用过程中python莫名崩溃的原因及解决方式
Apr 10 Python
python3通过udp实现组播数据的发送和接收操作
May 05 Python
selenium设置浏览器为headless无头模式(Chrome和Firefox)
Jan 08 Python
使用numpy nonzero 找出非0元素
May 14 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中session过期时间设置及session回收机制介绍
2014/05/05 PHP
PHP中的多种加密技术及代码示例解析
2016/10/20 PHP
深入理解PHP中mt_rand()随机数的安全
2017/10/12 PHP
实例讲解php实现多线程
2019/01/27 PHP
iis6+javascript Add an Extension File
2007/06/13 Javascript
js整数字符串转换为金额类型数据(示例代码)
2013/12/26 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
node.js中的fs.chownSync方法使用说明
2014/12/16 Javascript
javascript制作的滑动图片菜单
2015/05/15 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
2015/12/10 Javascript
jQuery使用serialize()表单序列化时出现中文乱码问题的解决办法
2016/07/27 Javascript
学习vue.js表单控件绑定操作
2016/12/05 Javascript
Vue2.0 axios前后端登陆拦截器(实例讲解)
2017/10/27 Javascript
node.js将MongoDB数据同步到MySQL的步骤
2017/12/10 Javascript
JavaScript 中的 this 工作原理
2018/06/20 Javascript
element-ui多文件上传的实现示例
2019/04/10 Javascript
Vue watch响应数据实现方法解析
2020/07/10 Javascript
[01:44]剑指西雅图 展望TI之CIS战队专访
2014/06/25 DOTA
[01:07:47]Secret vs Optic Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
python中MySQLdb模块用法实例
2014/11/10 Python
Python搭建HTTP服务器和FTP服务器
2017/03/09 Python
Python实现简单的文本相似度分析操作详解
2018/06/16 Python
在spyder IPython console中,运行代码加入参数的实例
2020/04/20 Python
python 异步async库的使用说明
2020/05/04 Python
Python logging模块异步线程写日志实现过程解析
2020/06/30 Python
html5指南-4.使用Geolocation实现定位功能
2013/01/07 HTML / CSS
有关HTML5中背景音乐的自动播放功能
2017/10/16 HTML / CSS
澳大利亚新奇小玩意网站:Yellow Octopus
2017/12/28 全球购物
英国在线女鞋目的地:SIMMI
2018/12/27 全球购物
三严三实心得体会范文
2014/10/13 职场文书
学生会个人总结范文
2015/02/15 职场文书
工厂仓库管理员岗位职责
2015/04/09 职场文书
教师聘用意向书
2015/05/11 职场文书
就业推荐表院系意见
2015/06/05 职场文书
PyTorch 实现L2正则化以及Dropout的操作
2021/05/27 Python
青岛市的收音机研制与生产
2022/04/07 无线电