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关键字and和or用法实例
May 28 Python
详解Python list 与 NumPy.ndarry 切片之间的对比
Jul 24 Python
python获取外网IP并发邮件的实现方法
Oct 01 Python
python定向爬取淘宝商品价格
Feb 27 Python
PyTorch线性回归和逻辑回归实战示例
May 22 Python
python实现控制台打印的方法
Jan 12 Python
对Python实现累加函数的方法详解
Jan 23 Python
python turtle 绘制太极图的实例
Dec 18 Python
python 解决Fatal error in launcher:错误问题
May 21 Python
python文件读取失败怎么处理
Jun 23 Python
Python爬虫之Selenium多窗口切换的实现
Dec 04 Python
使用Python解决图表与画布的间距问题
Apr 11 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
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
2013/02/06 PHP
php-app开发接口加密详解
2018/04/18 PHP
复制本贴标题和地址的js代码
2008/07/01 Javascript
jQuery 表格插件整理
2010/04/27 Javascript
IE下双击checkbox反应延迟问题的解决方法
2014/03/27 Javascript
Node.js实现简单聊天服务器
2014/06/20 Javascript
JavaScript Promise启示录
2014/08/12 Javascript
浅谈JSON中stringify 函数、toJosn函数和parse函数
2015/01/26 Javascript
全面解析Bootstrap排版使用方法(标题)
2015/11/30 Javascript
JavaScript实现窗口抖动效果
2016/10/19 Javascript
jQuery EasyUI 组件加上“清除”功能实例详解
2017/04/11 jQuery
Vue.js仿Metronic高级表格(一)静态设计
2017/04/17 Javascript
详解angular ui-grid之过滤器设置
2017/06/07 Javascript
javascript数组拍平方法总结
2018/01/20 Javascript
微信小程序实现验证码获取倒计时效果
2018/02/08 Javascript
详解VUE中常用的几种import(模块、文件)引入方式
2018/07/03 Javascript
微信小程序实现弹出层效果
2020/05/26 Javascript
Vuex 使用 v-model 配合 state的方法
2018/11/13 Javascript
layer.alert回调函数执行关闭弹窗的实例
2019/09/11 Javascript
JavaScript判断浏览器版本的方法
2019/11/03 Javascript
Node.js API详解之 Error模块用法实例分析
2020/05/14 Javascript
vue2.0实现列表数据增加和删除
2020/06/17 Javascript
JavaScript canvas实现雨滴特效
2021/01/10 Javascript
[42:52]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[00:35]可解锁地面特效
2018/12/20 DOTA
Python OpenCV处理图像之滤镜和图像运算
2018/07/10 Python
在pandas多重索引multiIndex中选定指定索引的行方法
2018/11/16 Python
python将邻接矩阵输出成图的实现
2019/11/21 Python
Python Django中间件使用原理及流程分析
2020/06/13 Python
python实现简单的tcp 文件下载
2020/09/16 Python
莫斯科珠宝厂官方网站:Miuz
2020/09/19 全球购物
函数只定义了一次, 调用了一次, 但编译器提示非法重定义了-什么问题?
2014/10/03 面试题
标记环介质访问控制协议
2016/03/27 面试题
创业计划书模版
2014/02/05 职场文书
安全例会汇报材料
2014/08/23 职场文书
小学家长通知书评语
2014/12/31 职场文书