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 基础教程之包和类的用法
Feb 23 Python
python远程连接服务器MySQL数据库
Jul 02 Python
python3基于OpenCV实现证件照背景替换
Jul 18 Python
python实现简单tftp(基于udp协议)
Jul 30 Python
python在新的图片窗口显示图片(图像)的方法
Jul 11 Python
python常用库之NumPy和sklearn入门
Jul 11 Python
django如何自己创建一个中间件
Jul 24 Python
Python 日志logging模块用法简单示例
Oct 18 Python
Matplotlib使用Cursor实现UI定位的示例代码
Mar 12 Python
Python-openCV开运算实例
Jul 05 Python
matplotlib bar()实现多组数据并列柱状图通用简便创建方法
Feb 24 Python
用Python提取PDF表格的方法
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
《神奇女侠:血脉》神力女超人大战犯罪公司
2020/04/09 欧美动漫
PHP下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
2011/09/19 PHP
php导入导出excel实例
2013/10/25 PHP
测试php函数的方法
2013/11/13 PHP
PHP中使用FFMPEG获取视频缩略图和视频总时长实例
2014/05/04 PHP
Symfony2安装第三方Bundles实例详解
2016/02/04 PHP
基于jQuery的星级评分插件
2011/08/12 Javascript
jquery实现保存已选用户
2014/07/21 Javascript
jQuery Validate初步体验(一)
2015/12/12 Javascript
html5+javascript实现简单上传的注意细节
2016/04/18 Javascript
node.js实现快速截图
2016/08/27 Javascript
浅谈JS中的三种字符串连接方式及其性能比较
2016/09/02 Javascript
JS之获取样式的简单实现方法(推荐)
2016/09/13 Javascript
javascript验证香港身份证的格式或真实性
2017/02/07 Javascript
详解如何在vue中使用sass
2017/06/21 Javascript
javascript实现Java中的Map对象功能的实例详解
2017/08/21 Javascript
理解Koa2中的async&await的用法
2018/02/05 Javascript
原生JS实现的碰撞检测功能示例
2018/05/18 Javascript
vue2.0 中使用transition实现动画效果使用心得
2018/08/13 Javascript
vuex实现及简略解析(小结)
2019/03/01 Javascript
layer.open 子页面弹出层向父页面传输数据的例子
2019/09/26 Javascript
vue+ElementUI 关闭对话框清空验证,清除form表单的操作
2020/08/06 Javascript
Node.js中的异步生成器与异步迭代详解
2021/01/31 Javascript
Python中elasticsearch插入和更新数据的实现方法
2018/04/01 Python
使用Pandas对数据进行筛选和排序的实现
2019/07/29 Python
详解如何用python实现一个简单下载器的服务端和客户端
2019/10/28 Python
python多线程案例之多任务copy文件完整实例
2019/10/29 Python
Python 下载Bing壁纸的示例
2020/09/29 Python
python中watchdog文件监控与检测上传功能
2020/10/30 Python
JD Sports法国:英国篮球和运动时尚的领导者
2017/09/28 全球购物
EJB的角色和三个对象
2015/12/31 面试题
活动总结书
2014/05/08 职场文书
物业消防安全责任书
2014/07/23 职场文书
关于诚信的活动方案
2014/08/18 职场文书
保送生自荐信
2015/03/06 职场文书
vue3使用vue-router的完整步骤记录
2021/06/20 Vue.js