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编写一个国际象棋AI程序
Nov 28 Python
Python获取网页上图片下载地址的方法
Mar 11 Python
python简单实现基数排序算法
May 16 Python
python实现的系统实用log类实例
Jun 30 Python
linux平台使用Python制作BT种子并获取BT种子信息的方法
Jan 20 Python
python django 实现验证码的功能实例代码
May 18 Python
Python实现字符串格式化输出的方法详解
Sep 20 Python
Python和Java进行DES加密和解密的实例
Jan 09 Python
Python批处理更改文件名os.rename的方法
Oct 26 Python
python使用Plotly绘图工具绘制气泡图
Apr 01 Python
如何基于python3和Vue实现AES数据加密
Mar 27 Python
Python办公自动化解决world文件批量转换
Sep 15 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
为查询结果建立向后/向前按钮
2006/10/09 PHP
php中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
2012/11/01 PHP
ThinkPHP的MVC开发机制实例解析
2014/08/23 PHP
php视频拍照上传头像功能实现代码分享
2015/10/08 PHP
PHP符合PSR编程规范的实例分享
2016/12/21 PHP
PHP基于SimpleXML生成和解析xml的方法示例
2017/07/17 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
2018/05/12 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
JS验证控制输入中英文字节长度(input、textarea等)具体实例
2013/06/21 Javascript
jquery索引在使用中的一些困惑
2013/10/24 Javascript
jQuery调用ajax请求的常见方法汇总
2015/03/24 Javascript
jQuery检测输入的字符串包含的中英文的数量
2015/04/17 Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
2016/05/25 Javascript
教你一步步用jQyery实现轮播器
2016/12/18 Javascript
jquery表单验证插件validation使用方法详解
2017/01/20 Javascript
JS实现针对给定时间的倒计时功能示例
2017/04/11 Javascript
js实现复制功能(多种方法集合)
2018/01/06 Javascript
百度地图去掉marker覆盖物或者去掉maker的label文字方法
2018/01/26 Javascript
js实现简单模态框实例
2018/11/16 Javascript
vue 解除鼠标的监听事件的方法
2019/11/13 Javascript
解决vue组件销毁之后计时器继续执行的问题
2020/07/21 Javascript
微信小程序实现滚动Tab选项卡
2020/11/16 Javascript
[40:05]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python清理子进程机制剖析
2017/11/23 Python
聊聊python中的循环遍历
2020/09/07 Python
python二维图制作的实例代码
2020/12/03 Python
matplotlib对象拾取事件处理的实现
2021/01/14 Python
俄罗斯在线手表和珠宝商店:AllTime
2019/09/28 全球购物
VLAN和VPN有什么区别?分别实现在OSI的第几层?
2014/12/23 面试题
总经理秘书岗位职责
2014/03/17 职场文书
党的生日活动方案
2014/08/15 职场文书
财务工作犯错检讨书
2014/10/07 职场文书
寻找成龙观后感
2015/06/12 职场文书
幼儿园大班教学反思
2016/03/02 职场文书
80行代码写一个Webpack插件并发布到npm
2021/05/24 Javascript
教你怎么用Python selenium操作浏览器对象的基础API
2021/06/23 Python