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 相关文章推荐
Python常用内置函数总结
Feb 08 Python
Python中的MongoDB基本操作:连接、查询实例
Feb 13 Python
Python编程中字符串和列表的基本知识讲解
Oct 14 Python
Python3中条件控制、循环与函数的简易教程
Nov 21 Python
django请求返回不同的类型图片json,xml,html的实例
May 22 Python
Python3.5 Pandas模块缺失值处理和层次索引实例详解
Apr 23 Python
python numpy之np.random的随机数函数使用介绍
Oct 06 Python
python爬虫添加请求头代码实例
Dec 28 Python
详解Python多线程下的list
Jul 03 Python
python基于pexpect库自动获取日志信息
Feb 01 Python
python实战之一步一步教你绘制小猪佩奇
Apr 22 Python
Python内置包对JSON文件数据进行编码和解码
Apr 12 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
在同一窗体中使用PHP来处理多个提交任务
2006/10/09 PHP
PHP操作Memcache实例介绍
2013/06/14 PHP
php实现推荐功能的简单实例
2019/09/29 PHP
textarea中的手动换行处理的jquery代码
2011/02/26 Javascript
js 实现菜单上下显示附效果图
2013/11/21 Javascript
JQuery 封装 Ajax 常用方法(推荐)
2017/05/21 jQuery
React学习笔记之列表渲染示例详解
2017/08/22 Javascript
vue devtools的安装与使用教程
2018/08/08 Javascript
laydate时间日历插件使用方法详解
2018/11/14 Javascript
如何通过setTimeout理解JS运行机制详解
2019/03/23 Javascript
微信小程序的授权实现过程解析
2019/08/02 Javascript
ES6基础之字符串和函数的拓展详解
2019/08/22 Javascript
简单谈谈javascript高级特性
2019/09/04 Javascript
Vue实现随机验证码功能
2020/12/29 Vue.js
python中的lambda表达式用法详解
2016/06/22 Python
Python中函数eval和ast.literal_eval的区别详解
2017/08/10 Python
SVM基本概念及Python实现代码
2017/12/27 Python
python微信公众号开发简单流程
2018/03/23 Python
Django使用uwsgi部署时的配置以及django日志文件的处理方法
2019/08/30 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
2020/12/31 Python
CSS3使用transition实现的鼠标悬停淡入淡出
2015/01/09 HTML / CSS
施华洛世奇匈牙利官网:SWAROVSKI匈牙利
2019/07/06 全球购物
奥地利票务门户网站:oeticket.com
2019/12/31 全球购物
如何将无状态会话Bean发布为WEB服务,只有无状态会话Bean可以发布为WEB服务?
2015/12/03 面试题
高中三年学习生活的自我评价
2013/10/10 职场文书
化工专业推荐信范文
2013/11/28 职场文书
HR求职自荐信范文
2014/06/21 职场文书
销售目标责任书
2014/07/23 职场文书
项目投资合作意向书
2014/07/29 职场文书
房产授权委托书范本
2014/09/22 职场文书
2015年护士节活动总结
2015/02/10 职场文书
为什么中国式养孩子很累?
2019/08/07 职场文书
《哪吒之魔童降世》观后感:世上哪有随随便便的成功
2019/11/08 职场文书
Python OpenCV 图像平移的实现示例
2021/06/04 Python
什么是Python装饰器?如何定义和使用?
2022/04/11 Python
python中pymysql包操作数据库方法
2022/04/19 Python