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写的PHPMyAdmin暴力破解工具代码
Aug 06 Python
基于进程内通讯的python聊天室实现方法
Jun 28 Python
PYTHON压平嵌套列表的简单实现
Jun 08 Python
使用Python对MySQL数据操作
Apr 06 Python
python爬虫之BeautifulSoup 使用select方法详解
Oct 23 Python
Python FTP两个文件夹间的同步实例代码
May 25 Python
利用Python实现在同一网络中的本地文件共享方法
Jun 04 Python
python中ASCII码字符与int之间的转换方法
Jul 09 Python
python Qt5实现窗体跟踪鼠标移动
Dec 13 Python
Pytorch保存模型用于测试和用于继续训练的区别详解
Jan 10 Python
python调用API接口实现登陆短信验证
May 10 Python
Python基于BeautifulSoup爬取京东商品信息
Jun 01 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文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
2016/05/09 PHP
JQuery 入门实例1
2009/06/25 Javascript
jquery autocomplete自动完成插件的的使用方法
2010/08/07 Javascript
Jquery工作常用实例 使用AJAX使网页进行异步更新
2011/07/26 Javascript
Markdown+Bootstrap图片自适应属性详解
2016/05/21 Javascript
Bootstrap图片轮播组件使用实例解析
2016/06/30 Javascript
js中遍历Map对象的方法
2016/07/27 Javascript
AngularJS轻松实现双击排序的功能
2016/08/30 Javascript
Vuejs第八篇之Vuejs组件的定义实例解析
2016/09/05 Javascript
Nodejs下用submit提交表单提示cannot post错误的解决方法
2016/11/21 NodeJs
JavaScript实现拖拽元素对齐到网格(每次移动固定距离)
2016/11/30 Javascript
Mongoose学习全面理解(推荐)
2017/01/21 Javascript
vue拦截器Vue.http.interceptors.push使用详解
2017/04/22 Javascript
浅谈webpack编译vue项目生成的代码探索
2017/12/11 Javascript
详解vue-router传参的两种方式
2018/09/10 Javascript
详解如何在Angular优雅编写HTTP请求
2018/12/05 Javascript
vue实现移动端轻量日期组件不依赖第三方库的方法
2019/04/28 Javascript
深入解读Node.js中的koa源码
2019/06/17 Javascript
jQuery 图片查看器插件 Viewer.js用法简单示例
2020/04/04 jQuery
JavaScript 引用类型实例详解【数组、对象、严格模式等】
2020/05/13 Javascript
[02:14]2016国际邀请赛中国区预选赛Ehome晋级之路
2016/07/01 DOTA
改进Django中的表单的简单方法
2015/07/17 Python
python用装饰器自动注册Tornado路由详解
2017/02/14 Python
Python爬虫实例爬取网站搞笑段子
2017/11/08 Python
Python日期时间对象转换为字符串的实例
2018/06/22 Python
pygame实现俄罗斯方块游戏(AI篇1)
2019/10/29 Python
安装完Python包然后找不到模块的解决步骤
2020/02/13 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
2020/05/22 Python
Python pickle模块常用方法代码实例
2020/10/10 Python
50道外企软件测试面试题
2014/08/18 面试题
药学专业大专生的自我评价
2013/12/12 职场文书
小学音乐教学反思
2014/02/05 职场文书
运动会开幕式通讯稿
2015/07/18 职场文书
个人合作协议范本
2015/08/06 职场文书
安全教育的主题班会
2015/08/13 职场文书
Python Matplotlib库实现画局部图
2021/11/17 Python