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 with statement 进行文件操作指南
Aug 22 Python
python写xml文件的操作实例
Oct 05 Python
使用Python脚本对Linux服务器进行监控的教程
Apr 02 Python
Python KMeans聚类问题分析
Feb 23 Python
基于python实现简单日历
Jul 28 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
Jun 19 Python
利用pyshp包给shapefile文件添加字段的实例
Dec 06 Python
浅谈Pycharm最有必要改的几个默认设置项
Feb 14 Python
Python小白不正确的使用类变量实例
May 29 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
Jul 01 Python
浅谈Python里面None True False之间的区别
Jul 09 Python
python热力图实现简单方法
Jan 29 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
用PHP连接Oracle for NT 远程数据库
2006/10/09 PHP
如何在PHP中使用Oracle数据库(6)
2006/10/09 PHP
php读取3389的脚本
2014/05/06 PHP
PHP的Socket通信之UDP通信实例
2015/07/02 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
在模板页面的js使用办法
2010/04/01 Javascript
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
2012/10/11 Javascript
JS判断文本框内容改变事件的简单实例
2014/03/07 Javascript
JavaScript数字和字符串转换示例
2014/03/26 Javascript
jquery弹窗插件colorbox绑定动态生成元素的方法
2014/06/20 Javascript
jQuery手机浏览器中拖拽动作的艰难性分析
2015/02/04 Javascript
js实现汉字排序的方法
2015/07/23 Javascript
javascript+canvas实现刮刮卡抽奖效果
2015/07/29 Javascript
js操作DOM--添加、删除节点的简单实例
2016/07/08 Javascript
JS键盘版计算器的制作方法
2016/12/03 Javascript
jQuery插件HighCharts绘制2D半圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
基于bootstrap实现收缩导航条
2017/03/17 Javascript
Vue-cli创建项目从单页面到多页面的方法
2017/09/20 Javascript
关于js的三种使用方式(行内js、内部js、外部js)的程序代码
2018/05/05 Javascript
layui radio性别单选框赋值方法
2018/08/15 Javascript
微信小程序实现判断是分享到群还是个人功能示例
2019/05/03 Javascript
利用不到200行代码写一款属于你自己的js类库
2019/07/08 Javascript
[02:03]DOTA2亚洲邀请赛 HGT战队出场宣传片
2015/02/07 DOTA
[02:10]2018DOTA2亚洲邀请赛赛前采访-Liquid
2018/04/03 DOTA
[02:02:38]VG vs Mineski Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
python读取TXT到数组及列表去重后按原来顺序排序的方法
2015/06/26 Python
python批量制作雷达图的实现方法
2016/07/26 Python
Django中的forms组件实例详解
2018/11/08 Python
解决Python3 被PHP程序调用执行返回乱码的问题
2019/02/16 Python
pytz格式化北京时间多出6分钟问题的解决方法
2019/06/21 Python
python join方法使用详解
2019/07/30 Python
Python爬虫代理池搭建的方法步骤
2020/09/28 Python
linux面试题参考答案(4)
2013/01/28 面试题
初中班干部工作总结
2015/08/10 职场文书
opencv 分类白天与夜景视频的方法
2021/06/05 Python
SQL Server的存储过程与触发器以及系统函数和自定义函数
2022/04/10 SQL Server