Python Unittest原理及基本使用方法


Posted in Python onNovember 06, 2020

基本使用步骤:

1、import unittest

2、新建一个Class继承unittest.TestCase

3、定义一个以test开头的函数作为测试用例【必须以test开头】

4、执行测试用例前都会先调用Setup函数【每个测试用例调用一次】或者setupClass函数【所有测试用例仅调用一次】

5、执行完测试用例后都会调用tearDown函数【多次】和tearDownClass函数【仅一次】

PS:

1、不能重写init()

2、函数必须以test开头才能作为测试用例

3、setupClass()和tearDownClass()必须用@classmethod修饰

# -*- encoding=utf-8 -*-

import unittest
class Demo1(unittest.TestCase):
  def setUp(self):
    print '调用 setup 函数'

  @classmethod
  def setUpClass(cls):
    print '调用 setupClass 函数'

  def tearDown(self):
    print '调用 tearDown 函数'
  @classmethod
  def tearDownClass(cls):
    print '调用 tearDownClass 函数'

  @staticmethod
  def test_add():
    print '3 + 5 = {}'.format(3 + 5)

  @staticmethod
  def test_sub():
    print '3 - 5 = {}'.format(3 - 5)


if __name__ == '__main__':
  unittest.main()

运行结果

调用 setupClass 函数

调用 setup 函数

3 + 5 = 8

调用 tearDown 函数

调用 setup 函数

3 - 5 = -2

调用 tearDown 函数

调用 tearDownClass 函数

Ran 2 tests in 0.012s

OK

TestSuite【测试组】添加测试用例进行测试

# -*- encoding=utf-8 -*-


class Class1(object):
  def __init__(self):
    print '调用 Class1 初始化函数'
    self.name = '未定义姓名'
    self.age = '未定义年龄'

  def set_name(self, name):
    self.name = name

  def set_age(self, age):
    self.age = age

  def print_name(self):
    print 'Class1 的姓名是:{}'.format(self.name)

  def print_age(self):
    print 'Class1 的年龄是:{}'.format(self.age)


if __name__ == '__main__':
  pass

 

# -*- encoding=utf-8 -*-

import unittest

from Class1 import Class1


class CallClass1(unittest.TestCase):

  def setUp(self):
    self.class1 = Class1()
    pass

  def tearDown(self):
    self.class1 = None
    pass

  def test_set_name(self):
    self.class1.set_name('设置了名字')
    self.class1.print_name()

  def test_print_name(self):
    self.class1.print_name()


if __name__ == '__main__':
  unittest.main()

 

# -*- encoding=utf-8 -*-

import unittest
from Test_Demo2 import CallClass1

if __name__ == '__main__':
  testSuite = unittest.TestSuite()
  testSuite.addTest(CallClass1('test_set_name'))

  testSuite.addTests(
    [CallClass1('test_set_name'), CallClass1('test_print_name')])

  textTestRunner = unittest.TextTestRunner()
  textTestRunner.run(testSuite)

运行结果

调用 Class1 初始化函数

Class1 的姓名是:设置了名字

调用 Class1 初始化函数

Class1 的姓名是:设置了名字

调用 Class1 初始化函数

Class1 的姓名是:未定义姓名

...

----------------------------------------------------------------------

Ran 3 tests in 0.000s

OK

Process finished with exit code 0

记录测试报告到txt文件

# -*- encoding=utf-8 -*-

import unittest
from Test_Demo2 import CallClass1

if __name__ == '__main__':
  testSuite = unittest.TestSuite()
  testSuite.addTest(CallClass1('test_set_name'))

  testSuite.addTests(
    [CallClass1('test_set_name'), CallClass1('test_print_name')])

  # textTestRunner = unittest.TextTestRunner()
  # textTestRunner.run(testSuite)

  # 将测试结果输出到测试报告中
  with open('UnittestTextReport.txt', 'w') as f:
    runner = unittest.TextTestRunner(stream=f, verbosity=2)
    runner.run(testSuite)

记录测试报告到html文件

# 将测试结果输出到测试报告html中
with open('HTMLReport.html', 'w') as f:
  runner = HTMLTestRunner(stream=f,
              title='MathFunc Test Report',
              description='generated by HTMLTestRunner.',
              verbosity=2
              )
  runner.run(suite)

断言

当断言为真时,会执行断言之后的代码如(在断言之后打印成功提示信息)

若断言为假,则之后的代码不会被执行,打应错误信息,之后提示信息不会被执行;unittest中提示F,失败,若捕获到异常,则为E,代表错误;

补充:若断言为假,则当前函数def,停止运行,但会运行之后的def函数

重点:try语句块中不要使用assert一起使用,assert断言为假时,会抛出异常,测试用例为失败,如果放到try中,则会捕获到异常,测试用例永远标记为通过

断言结果:

. 表示通过 或者 pass

F False, 表示断言没有通过

E Error, 表示程序内部发生了错误。

查找当前目录下所有的测试用例【默认以test开头的py文件,可以自己配置】

# -*- encoding=utf-8 -*-

import unittest
import os

if __name__ == '__main__':
  loader = unittest.defaultTestLoader.discover(os.getcwd())
  # tests = unittest.defaultTestLoader.discover(
  #   start_dir='.', # => 指定查找的目录
  #   pattern='test*.py' # => 指定查找规则
  # )
  runner = unittest.TextTestRunner()
  runner.run(loader)

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

Python 相关文章推荐
利用Python获取操作系统信息实例
Sep 02 Python
Python算法应用实战之队列详解
Feb 04 Python
Python重新加载模块的实现方法
Oct 16 Python
python实现简单登陆系统
Oct 18 Python
Django Rest framework之权限的实现示例
Dec 17 Python
python dict 相同key 合并value的实例
Jan 21 Python
python requests证书问题解决
Sep 05 Python
详解Python3 pickle模块用法
Sep 16 Python
浅谈Python类的单继承相关知识
May 12 Python
教你如何用Python实现人脸识别(含源代码)
Jun 23 Python
Python操作CSV格式文件的方法大全
Jul 15 Python
详解解Django 多对多表关系的三种创建方式
Aug 23 Python
python中的yield from语法快速学习
Nov 06 #Python
Python通过字典映射函数实现switch
Nov 06 #Python
Python使用grequests并发发送请求的示例
Nov 05 #Python
Python 实现图片转字符画的示例(静态图片,gif皆可)
Nov 05 #Python
Python中常用的os操作汇总
Nov 05 #Python
Python Web项目Cherrypy使用方法镜像
Nov 05 #Python
Python实现异步IO的示例
Nov 05 #Python
You might like
PHP防注入安全代码
2008/04/09 PHP
php构造函数与析构函数
2016/04/23 PHP
php for 循环使用的简单实例
2016/06/02 PHP
php array_udiff_assoc 计算两个数组的差集实例
2016/11/12 PHP
PHP框架Laravel中使用UUID实现数据分表操作示例
2018/05/30 PHP
JS 容错处理代码, 屏蔽错误信息
2021/03/09 Javascript
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
基于jQuery的消息提示插件 DivAlert之旅(二)
2010/04/01 Javascript
JQuery学习笔录 简单的JQuery
2012/04/09 Javascript
window.event.keyCode兼容IE和Firefox实现js代码
2013/05/30 Javascript
JS实现点击链接取消跳转效果的方法
2014/01/24 Javascript
js全选实现和判断是否有复选框选中的方法
2015/02/17 Javascript
jQuery 实现评论等级好评差评特效
2016/05/06 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
jQuery实现的网页换肤效果示例
2016/09/20 Javascript
Easyui在treegrid添加控件的实现方法
2017/06/23 Javascript
Vue2.0用户权限控制解决方案
2017/11/29 Javascript
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
2018/05/26 Javascript
JavaScript常见继承模式实例小结
2019/01/11 Javascript
基于Node的Axure文件在线预览的实现代码
2019/08/28 Javascript
Python解析网页源代码中的115网盘链接实例
2014/09/30 Python
Pandas读取并修改excel的示例代码
2019/02/17 Python
学习Django知识点分享
2019/09/11 Python
使用python获取邮箱邮件的设置方法
2019/09/20 Python
python中rb含义理解
2020/06/18 Python
CSS3实现瀑布流布局与无限加载图片相册的实例代码
2016/12/22 HTML / CSS
Html5页面内使用JSON动画的实现
2019/01/29 HTML / CSS
日本土著品牌,综合型购物网站:Cecile
2016/08/23 全球购物
加拿大领先的冒险和户外零售商:Atmosphere
2017/12/19 全球购物
英国受欢迎的运动鞋和街头服装商店:Footasylum
2018/06/12 全球购物
New delete 与malloc free 的联系与区别
2013/02/04 面试题
阳光体育活动实施方案
2014/05/25 职场文书
应届毕业生自荐信
2015/03/04 职场文书
2015年领导干部廉洁自律工作总结
2015/05/26 职场文书
2015年秋学期师德师风建设工作总结
2015/10/23 职场文书
Python控制台输出俄罗斯方块的方法实例
2021/04/17 Python