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 相关文章推荐
使用Python3编写抓取网页和只抓网页图片的脚本
Aug 20 Python
python动态加载包的方法小结
Apr 18 Python
python书籍信息爬虫实例
Mar 19 Python
django中的HTML控件及参数传递方法
Mar 20 Python
Python获取指定字符前面的所有字符方法
May 02 Python
python实现维吉尼亚算法
Mar 20 Python
Python使用lambda表达式对字典排序操作示例
Jul 25 Python
python 根据网易云歌曲的ID 直接下载歌曲的实例
Aug 24 Python
Python从列表推导到zip()函数的5种技巧总结
Oct 23 Python
python3 assert 断言的使用详解 (区别于python2)
Nov 27 Python
python 利用toapi库自动生成api
Oct 19 Python
使用pycharm运行flask应用程序的详细教程
Jun 07 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中获取关键词及所属来源搜索引擎名称的代码
2011/02/15 PHP
PHP中$this和$that指针使用实例
2015/01/06 PHP
ThinkPHP控制器详解
2015/07/27 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
2018/06/04 PHP
js 蒙版进度条(结合图片)
2010/03/10 Javascript
仅IE9/10同时支持script元素的onload和onreadystatechange事件分析
2011/04/27 Javascript
Jquery遍历checkbox获取选中项value值的方法
2014/02/13 Javascript
js获取上传文件大小示例代码
2014/04/10 Javascript
使用AngularJS实现表单向导的方法
2015/06/19 Javascript
JS实现网页Div层Clone拖拽效果
2015/09/26 Javascript
BootStrap文件上传样式超好看【持续更新】
2016/05/10 Javascript
bootstrap table实现单击单元格可编辑功能
2017/03/28 Javascript
使用vue-router设置每个页面的title方法
2018/02/11 Javascript
使用Vue构建可重用的分页组件
2018/03/26 Javascript
JS实现的简单折叠展开动画效果示例
2018/04/28 Javascript
angularjs $http调用接口的方式详解
2018/08/13 Javascript
vue、react等单页面项目部署到服务器的方法及vue和react的区别
2018/09/29 Javascript
JS中使用cavas截图网页并解决跨域及模糊问题
2018/11/13 Javascript
解决vue.js提交数组时出现数组下标的问题
2019/11/05 Javascript
js HTML DOM EventListener功能与用法实例分析
2020/04/27 Javascript
JS闭包原理及其使用场景解析
2020/12/03 Javascript
Python max内置函数详细介绍
2016/11/17 Python
Python的语言类型(详解)
2017/06/24 Python
python实现redis三种cas事务操作
2017/12/19 Python
使用Django和Python创建Json response的方法
2018/03/26 Python
NumPy.npy与pandas DataFrame的实例讲解
2018/07/09 Python
用python做游戏的细节详解
2019/06/25 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
2019/08/30 Python
HTML5: Web 标准最巨大的飞跃
2008/10/17 HTML / CSS
HTML5 Canvas+JS控制电脑或手机上的摄像头实例
2014/05/03 HTML / CSS
什么是跨站脚本攻击
2014/12/11 面试题
小学生操行评语大全
2014/04/22 职场文书
教师演讲稿开场白
2014/08/25 职场文书
2014年财政所工作总结
2014/11/22 职场文书
导游词之鲁迅祖居
2019/10/17 职场文书
Windows Server 2012 R2 磁盘分区教程
2022/04/29 Servers