Python unittest框架操作实例解析


Posted in Python onApril 13, 2020

操作步骤

  • 导入框架,import unitest
  • 测试类必须继承类:.class 类名(unittest.TestCase):
  • 在类中所有定义testXXX(区分大小写)开头的函数都是可执行的测试用例
  • 钩子方法setUp(每个测试用例前执行)、tearDown(每个测试用例后执行)
  • 执行用例unitest.main()
  • 断言

常用断言

方法 等价于 描述
assertEqual(a,b) a==b 值是否相等
aassertNotEqual(a,b) a!=b 值是否不相等
aasserIs(a,b) a is b 值是否相同
aassertIsNot(a,b) a is not b 值是否不同
assertIn(a,b) a in b a是否包含b
assertNotIn(a,b) a not in b a是否不包含b
ssertTrue(a) bool(a) is true 是否为真
assertFalse(a) bool(a)is false 是否为假
assertIsNone(a) a is None 是否为空
assertIsNotNone(a) a is None 是否不为空
assertIsInstance(a,b) Instance(a,b) a与b的数据类型一样
assertNotIsInstance(a) not Instance(a,b) a与b的数据类型不一样

举例说明

#!/usr/bin/python3
# encoding:utf-8
'''
Created on 2019-10-12
@author: EDZ
'''
#!/usr/bin/python3
# encoding:utf-8
import unittest

#继承unittest基类
class un_test(unittest.TestCase):
  def setUp(self):
    print("钩子方法,每个用例执行前执行")
  def tearDown(self):
    print("钩子方法,每个用例执行后执行")
  #必须testXXX命名函数才会被执行
  def test_Equal(self):
    print('1.assertEqual值相同')
    a='中国'
    b='中国'
    self.assertEqual(a,b)
  def test_Is(self):
    a='中国'
    b='中国'
    print('2.assertIs值相同')
    self.assertIs(a,b)
  def test_Instance(self):
    a = 'aaa' 
    b = [1,2,3,4]
    print(type(a),type(b),"3.数据类型不相等")
    self.assertNotIsInstance(type(a),type(b))
  def cf(self,a,b):
    return a/b  
  def test_rasi(self):
    print('4.1/0抛出异常')
    self.assertRaises(ZeroDivisionError,self.cf,1,0)
  
if __name__=="__main__":
  #unittest执行本类全部testXXX命名的测试用例
  unittest.main()
  #-----------下面为特殊加载方式-------------------
  '''
  #通过文件模块加载(loadTestsFromModule)
  suite = unittest.TestSuite()
  loader = unittest.TestLoader()#用例加载器
  #文件模块名,例如有文件moku.py 第一步:import moku loader.loadTestsFromModule(文件名)
  suite.addTest(loader.loadTestsFromModule(moku))
  
  #通过测试类来加载(loadTestsFromTestCase)
  suite = unittest.TestSuite()
  loader = unittest.TestLoader()#用例加载器
  #例如有文件moku.py 其中有类名classT 第一步导入类:from moku import classT (loader.loadTestsFromTestCase(classT))#类名
  suite.addTest(loader.loadTestsFromTestCase(un_test))#如果类在本文件模块内直接加载。

  #一个一个添加
  suite = unittest.TestSuite()
  suite.addTest(un_test('test_Equal'))#(类名('函数'))

  #测试用例数较多时,采用defaultTestLoader.discover()方式
  suite = unittest.defaultTestLoader.discover('./',pattern='y*.py', top_level_dir=None)
  #1、因为unittest中规定,测试用例必须test开头,所以discover中的pattern格式才是test*.py
  #2、start_dir是存放测试用例的目录
  #pattern='test*.py':表示用例文件名的匹配原则。此处匹配以“test”开头的.py 类型的文件,* 表示任意多个字符
  #top_level_dir= None 测试模块的顶层目录,如果没有顶层目录,默认为None
 
  runner = unittest.TextTestRunner(verbosity=2)
  runner.run(suite)
  
      这里的verbosity是一个选项,表示测试结果的信息复杂度,有三个值
      0 (静默模式): 你只能获得总的测试用例数和总的结果 比如 总共100个 失败20 成功80
      1 (默认模式): 非常类似静默模式 只是在每个成功的用例前面有个“.” 每个失败的用例前面有个 “F”
      2 (详细模式):测试结果会显示每个测试用例的所有相关的信息
      并且 你在命令行里加入不同的参数可以起到一样的效果
      加入 --quiet 参数 等效于 verbosity=0
      加入--verbose参数等效于 verbosity=2
      什么都不加就是 verbosity=1</pre>
  '''

运行结果

钩子方法,每个用例执行前执行
1.assertEqual值相同
钩子方法,每个用例执行后执行
钩子方法,每个用例执行前执行
<class 'str'> <class 'list'> 3.数据类型不相等
钩子方法,每个用例执行后执行
钩子方法,每个用例执行前执行
2.assertIs值相同
钩子方法,每个用例执行后执行
钩子方法,每个用例执行前执行
4.1/0抛出异常
钩子方法,每个用例执行后执行
Ran 4 tests in 0.001s
OK
说明:钩子方法每个用例都执行,Ran 4 表示成功执行4个testXXX的测试用例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在ironpython中利用装饰器执行SQL操作的例子
May 02 Python
python 自动化将markdown文件转成html文件的方法
Sep 23 Python
Python中如何优雅的合并两个字典(dict)方法示例
Aug 09 Python
python+selenium实现京东自动登录及秒杀功能
Nov 18 Python
简单了解什么是神经网络
Dec 23 Python
tensorflow实现图像的裁剪和填充方法
Jul 27 Python
使用Django2快速开发Web项目的详细步骤
Jan 06 Python
NumPy 基本切片和索引的具体使用方法
Apr 24 Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
Dec 10 Python
python离线安装外部依赖包的实现
Feb 13 Python
python request 模块详细介绍
Nov 10 Python
Django web自定义通用权限控制实现方法
Nov 24 Python
windows python3安装Jupyter Notebooks教程
Apr 13 #Python
Python MOCK SERVER moco模拟接口测试过程解析
Apr 13 #Python
JupyterNotebook 输出窗口的显示效果调整方法
Apr 13 #Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
Apr 13 #Python
Python selenium文件上传下载功能代码实例
Apr 13 #Python
20行Python代码实现视频字符化功能
Apr 13 #Python
解决jupyter notebook 前面书写后面内容消失的问题
Apr 13 #Python
You might like
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
php修改文件上传限制方法汇总
2015/04/07 PHP
Prototype PeriodicalExecuter对象 学习
2009/07/19 Javascript
学习ExtJS form布局
2009/10/08 Javascript
jQuery插件-jRating评分插件源码分析及使用方法
2012/12/28 Javascript
jquery插件ajaxupload实现文件上传操作
2015/12/09 Javascript
jquery UI Datepicker时间控件的使用及问题解决
2016/04/28 Javascript
JS全局变量和局部变量最新解析
2016/06/24 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
2016/09/20 Javascript
详解jQuery的Cookie插件
2016/11/23 Javascript
了解VUE的render函数的使用
2017/06/08 Javascript
Vue实现数字输入框中分割手机号码的示例
2017/10/10 Javascript
webpack中CommonsChunkPlugin详细教程(小结)
2017/11/09 Javascript
VUE单页面切换动画代码(全网最好的切换效果)
2019/10/31 Javascript
9种方法优化jQuery代码详解
2020/02/04 jQuery
koa2的中间件功能及应用示例
2020/03/05 Javascript
梳理一下vue中的生命周期
2020/12/30 Vue.js
编写Python脚本来获取mp3文件tag信息的教程
2015/05/04 Python
OpenCV2.3.1+Python2.7.3+Numpy等的配置解析
2018/01/05 Python
Python标准库笔记struct模块的使用
2018/02/22 Python
对python中的os.getpid()和os.fork()函数详解
2019/08/08 Python
django 自定义filter 判断if var in list的例子
2019/08/20 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
2020/02/18 Python
使用Python合成图片的实现代码(图片添加个性化文本,图片上叠加其他图片)
2020/04/30 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
2020/05/13 Python
python 数据库查询返回list或tuple实例
2020/05/15 Python
美国一家全面的在线零售鞋类公司:SHOEBACCA
2017/01/06 全球购物
Footshop罗马尼亚:最好的运动鞋选择
2019/09/10 全球购物
瑞士隐形眼镜和护理产品网上商店:Linsenklick
2019/10/21 全球购物
大四学生思想汇报
2014/01/13 职场文书
浪漫婚礼主题活动策划方案
2014/09/15 职场文书
关于拾金不昧的感谢信
2015/01/21 职场文书
《浅水洼里的小鱼》教学反思
2016/02/16 职场文书
2016大学生优秀志愿者事迹材料
2016/02/25 职场文书
Python实战之疫苗研发情况可视化
2021/05/18 Python
Python pandas之求和运算和非空值个数统计
2021/08/07 Python