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中的多进程
Nov 06 Python
Python加密方法小结【md5,base64,sha1】
Jul 13 Python
python3学习之Splash的安装与实例教程
Jul 09 Python
django迁移数据库错误问题解决
Jul 29 Python
python实现美团订单推送到测试环境,提供便利操作示例
Aug 09 Python
pytorch模型存储的2种实现方法
Feb 14 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
Feb 15 Python
pytorch 计算ConvTranspose1d输出特征大小方式
Jun 23 Python
python3.4中清屏的处理方法
Jul 06 Python
python 实现波浪滤镜特效
Dec 02 Python
selenium自动化测试入门实战
Dec 21 Python
Django分页器的用法你都了解吗
May 26 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动态实现表格跨行跨列实现代码
2012/11/06 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
Nginx+php配置文件及原理解析
2020/12/09 PHP
php自动加载代码实例详解
2021/02/26 PHP
javascript函数库-集合框架
2007/04/27 Javascript
js库Modernizr的介绍和使用
2015/05/07 Javascript
讲解JavaScript中for...in语句的使用方法
2015/06/03 Javascript
基于js实现投票的实例代码
2015/08/04 Javascript
详解JavaScript数组的操作大全
2015/10/19 Javascript
FullCalendar日历插件应用之数据展现(一)
2015/12/23 Javascript
分享10个优化代码的CSS和JavaScript工具
2016/05/11 Javascript
在Vue组件化中利用axios处理ajax请求的使用方法
2017/08/25 Javascript
浅谈ES6 模板字符串的具体使用方法
2017/11/07 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
微信小程序扫描二维码获取信息实例详解
2019/05/07 Javascript
详解可以用在VS Code中的正则表达式小技巧
2019/05/14 Javascript
JS实现时间校验的代码
2020/05/25 Javascript
jQuery实现视频展示效果
2020/05/30 jQuery
python实现应用程序在右键菜单中添加打开方式功能
2017/01/09 Python
Python cookbook(数据结构与算法)实现优先级队列的方法示例
2018/02/18 Python
Python实现找出数组中第2大数字的方法示例
2018/03/26 Python
python同时替换多个字符串方法示例
2019/09/17 Python
Python文件时间操作步骤代码详解
2020/04/13 Python
python 实现图像快速替换某种颜色
2020/06/04 Python
Python爬虫小例子——爬取51job发布的工作职位
2020/07/10 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
2020/09/23 Python
python利用opencv实现颜色检测
2021/02/23 Python
中国电视购物:快乐购
2017/02/04 全球购物
英国高街奥特莱斯:Highstreet Outlet
2019/11/21 全球购物
remote接口和home接口主要作用
2013/05/15 面试题
政法大学毕业生自荐信范文
2014/01/01 职场文书
环保倡议书400字
2014/05/15 职场文书
食品安全标语
2014/06/07 职场文书
党员剖析材料范文
2014/09/30 职场文书
单位车辆管理制度
2015/08/05 职场文书
MySQL 数据库范式化设计理论
2022/04/22 MySQL