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 根据pid杀死相应进程的方法
Jan 16 Python
用生成器来改写直接返回列表的函数方法
May 25 Python
Python实现将照片变成卡通图片的方法【基于opencv】
Jan 17 Python
python用户管理系统
Mar 13 Python
Python基于plotly模块实现的画图操作示例
Jan 23 Python
python 多线程串行和并行的实例
Feb 22 Python
Python3批量生成带logo的二维码方法
Jun 24 Python
详解python解压压缩包的五种方法
Jul 05 Python
python写程序统计词频的方法
Jul 29 Python
pycharm 2020 1.1的安装流程
Sep 29 Python
详解Python中的编码问题(encoding与decode、str与bytes)
Sep 30 Python
ubuntu安装jupyter并设置远程访问的实现
Mar 31 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
php4的session功能评述(二)
2006/10/09 PHP
php读取excel文件的简单实例
2013/08/26 PHP
PHP随机生成随机个数的字母组合示例
2014/01/14 PHP
带密匙的php加密解密示例分享
2014/01/29 PHP
php进行支付宝开发中return_url和notify_url的区别分析
2014/12/22 PHP
PHP实现的观察者模式实例
2017/06/21 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
2017/07/13 PHP
用jQuery模拟页面加载进度条的实现代码
2011/12/19 Javascript
ASP.NET jQuery 实例2 (表单中使用回车在TextBox之间向下移动)
2012/01/13 Javascript
jquery ajax例子返回值详解
2012/09/11 Javascript
鼠标滑在标题上显示图片的JS代码
2013/11/19 Javascript
一个非常全面的javascript URL解析函数和分段URL解析方法
2014/04/12 Javascript
模拟一个类似百度google的模糊搜索下拉列表
2014/04/15 Javascript
javascript原始值和对象引用实例分析
2015/04/25 Javascript
Node.js中的process.nextTick使用实例
2015/06/25 Javascript
js跨域请求数据的3种常用的方法
2015/12/01 Javascript
基于JS快速实现导航下拉菜单动画效果附源码下载
2016/10/27 Javascript
javascript中Number的方法小结
2016/11/21 Javascript
Web前端框架bootstrap实战【第一次接触使用】
2016/12/28 Javascript
分享十三个最佳JavaScript数据网格库
2017/04/07 Javascript
一步步教你利用Docker设置Node.js
2018/11/20 Javascript
详解VS Code使用之Vue工程配置format代码格式化
2019/03/20 Javascript
jQuery使用jsonp实现百度搜索的示例代码
2020/07/08 jQuery
javascript实现京东登录显示隐藏密码
2020/08/02 Javascript
[00:43]TI7不朽珍藏III——幽鬼不朽展示
2017/07/15 DOTA
理解python多线程(python多线程简明教程)
2014/06/09 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
2018/12/24 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
打造经典复古风格的品牌:Alice + Olivia(爱丽丝+奥利维亚)
2016/09/07 全球购物
下面这个程序执行后会有什么错误或者效果
2014/11/03 面试题
一些网络技术方面的面试题
2014/05/01 面试题
借名购房协议书范本
2014/10/06 职场文书
幼儿园门卫安全责任书
2015/05/08 职场文书
节约用水广告语60条
2019/11/14 职场文书
MySQL 四种连接和多表查询详解
2021/07/16 MySQL
Docker部署Mysql8的实现步骤
2022/07/07 Servers