Python中Unittest框架的具体使用


Posted in Python onAugust 27, 2019

Unittest

1.环境

Unittest为Python内嵌的测试框架,不需要特殊配置,仅需要在File---settings---Tools----Python Intergrated Tools下配置框架为Unittest

2.编写规范

  • 需要导入 import unittest
  • 测试类必须继承unittest.TestCase
  • 测试方法以 test_开头
  • 模块和类名没有要求

3.Unittest介绍

import unittest

def add(x, y):
 return x + y

def sub(x,y):
 return x - y

class UnittestDemo(unittest.TestCase):

 def setUp(self):
  print("I an setup")

 def test_add(self):
  print("my first unit test demo----add")
  self.assertEqual(add(10,1),11,"assert equal")

 def test_sub(self):
  print("my first unit test demo----sub")
  self.assertEqual(sub(10, 1), 9, "assert equal2")

 @unittest.skip("i don't want to run this case.")
 def test_sub1(self):
  print("my first unit test demo----sub1")
  self.assertEqual(sub(10, 1), 9, "assert equal3")

 def tearDown(self):
  print("I an tearDown")

setUp及TearDown

方法级别的,类里面的每个方法调用一次

def setUp(self):
  print("I an setup")

setUpClass及tearDownClass

类级别的,类里面的所有方法仅执行一次

@classmethod
 def setUpClass(cls):
  print("I an setUpClass")

setUpModule,tearDownModule

模块级别的,执行模块里面类中的所有方法仅执行一次

4.Unittest使用

import unittest

from unittest_task import UnittestDemo
from HTMLTestRunner import HTMLTestRunner


suite=unittest.TestSuite()#创建用例集合
tests = [UnittestDemo("test_add"), UnittestDemo("test_sub"),UnittestDemo("test_sub1")]
suite.addTests(tests)


with open('HTMLReport.html', 'wb') as fi:
 runner = HTMLTestRunner(stream=fi,
       title = 'MathFunc Test Report',
       description='generated by HTMLTestRunner.',
       verbosity=2
       )
 runner.run(suite)

TestCase

多个测试用例集合在一起,就是TestSuite

TestSuite

多个测试用例集合在一起,就是TestSuite

TestLoader

用来加载TestCase到TestSuite中的

TestRunner

执行测试用例的,测试的结果会保存到TestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息

skip装饰器

跳过某个用例不执行

@unittest.skip("i don't want to run this case.")

无条件跳过

unittest.skip(reason)

当condition为True时跳过

unittest.skipIf(condition, reason)

当condition为False时跳过

unittest.skipUnless(condition, reason)

self.skipTest('do not run this.')

5.Unittest生成报告

5.1 Unittest生成txt格式报告

if __name__ == '__main__':
 suite = unittest.TestSuite()
 
 tests = [TestMathFunc("test_add"), TestMathFunc("test_minus"), TestMathFunc("test_divide")]
 suite.addTests(tests)
 
 with open('UnittestTextReport.txt', 'a') as f:
  runner = unittest.TextTestRunner(stream=f, verbosity=2)
  runner.run(suite)

运行该文件,就会发现目录下生成了'UnittestTextReport.txt,所有的执行报告均输出到了此文件中。

verbosity参数可以控制执行结果的输出,0 是简单报告、1 是一般报告、2 是详细报告

5.2 Unittest生成html格式报告

with open('HTMLReport.html', 'wb') as fi:
 runner = HTMLTestRunner(stream=fi,
       title = 'MathFunc Test Report',
       description='generated by HTMLTestRunner.',
       verbosity=2
       )
 runner.run(suite)

输出测试报告为HTML格式,unittest中htmltestrunner导出测试报告,可以修改htmltestrunner中的测试代码

其中,的python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决见:

https://3water.com/article/168573.htm

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python open()文件处理使用介绍
Nov 30 Python
详尽讲述用Python的Django框架测试驱动开发的教程
Apr 22 Python
python获得linux下所有挂载点(mount points)的方法
Apr 29 Python
python使用socket远程连接错误处理方法
Apr 29 Python
python版opencv摄像头人脸实时检测方法
Aug 03 Python
python求加权平均值的实例(附纯python写法)
Aug 22 Python
命令行运行Python脚本时传入参数的三种方式详解
Oct 11 Python
python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法
Feb 14 Python
Python3.9又更新了:dict内置新功能
Feb 28 Python
使用卷积神经网络(CNN)做人脸识别的示例代码
Mar 27 Python
python3.x中安装web.py步骤方法
Jun 23 Python
Python基于locals返回作用域字典
Oct 17 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
Aug 27 #Python
Python3分析处理声音数据的例子
Aug 27 #Python
python中struct模块之字节型数据的处理方法
Aug 27 #Python
Python的bit_length函数来二进制的位数方法
Aug 27 #Python
使用python将excel数据导入数据库过程详解
Aug 27 #Python
python读取指定字节长度的文本方法
Aug 27 #Python
Django中的cookie和session
Aug 27 #Python
You might like
array_multisort实现PHP多维数组排序示例讲解
2011/01/04 PHP
PHP中的Memcache详解
2014/04/05 PHP
PHP实现单例模式最安全的做法
2014/06/13 PHP
Zend Framework创建自己的动作助手详解
2016/03/05 PHP
php获取文件名称和扩展名的方法
2017/02/07 PHP
JS模拟多线程
2007/02/07 Javascript
jquery实现的超出屏幕时把固定层变为定位层的代码
2010/02/23 Javascript
JavaScript 打地鼠游戏代码说明
2010/10/12 Javascript
删除节点的jquery代码
2014/01/13 Javascript
初始Nodejs
2014/11/08 NodeJs
js实现鼠标触发图片抖动效果的方法
2015/02/27 Javascript
javascript中传统事件与现代事件
2015/06/23 Javascript
JS实现上下左右对称的九九乘法表
2016/02/22 Javascript
IOS中safari下的select下拉菜单文字过长不换行的解决方法
2016/09/26 Javascript
使用开源工具制作网页验证码的方法
2016/10/17 Javascript
微信小程序 数据绑定详解及实例
2016/10/25 Javascript
基于jQuery实现左侧菜单栏可折叠功能
2016/12/27 Javascript
JS实现点击拉拽轮播图pc端移动端适配
2018/09/05 Javascript
vue.draggable实现表格拖拽排序效果
2018/12/01 Javascript
jQuery实现简单轮播图效果
2020/12/27 jQuery
[42:36]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第二局
2016/02/26 DOTA
tensorflow 1.0用CNN进行图像分类
2018/04/15 Python
Python拆分大型CSV文件代码实例
2019/10/07 Python
Python selenium抓取虎牙短视频代码实例
2020/03/02 Python
通过HTML5 Canvas API绘制弧线和圆形的教程
2016/03/14 HTML / CSS
英国领先的票务代理商之一:The Ticket Factory
2019/02/09 全球购物
Java方面的关于数组和继承的笔面试题
2015/09/18 面试题
英语系毕业生自荐信
2013/10/31 职场文书
机修工工作职责
2014/02/21 职场文书
安全教育实施方案
2014/03/02 职场文书
职业生涯规划书结束语
2014/04/15 职场文书
英文导游词
2015/02/13 职场文书
销售口号霸气押韵
2015/12/24 职场文书
启动Tomcat时出现大量乱码的解决方法
2021/06/21 Java/Android
Nginx 路由转发和反向代理location配置实现
2021/11/11 Servers
详解JavaScript的计时器和按钮效果设置
2022/02/18 Javascript