Python Unittest自动化单元测试框架详解


Posted in Python onApril 04, 2018

本文实例为大家分享了Python Unittest自动化单元测试框架的具体代码,供大家参考,具体内容如下

1、python 测试框架(本文只涉及 PyUnit)

参考地址

2、环境准备

首先确定已经安装有Python,之后通过安装PyUnit,Python版本比较新的已经集成有PyUnit(PyUnit 提供了一个图形测试界面UnittestGUI.py)
参考:查看地址

3、代码实例

使用的IDE为 PyCharm,DEMO结构如图

Python Unittest自动化单元测试框架详解

1.简单地一个实例

# Test002_Fail.py


# -*- coding:utf-8 -*-

import unittest

class Test002_Fail(unittest.TestCase):

  #测试用例前执行
  def setUp(self):
    print 'Case Before'
    pass

  #测试用例后执行
  def tearDown(self):
    print 'Case After'
    pass

  #测试用例1
  def test_Case1(self):
    a = 3
    b = 2
    self.assertEqual(a+b,4,'Result Fail')

  #测试用例2
  def test_Case2(self):
    a = 2
    b = 3
    self.assertEqual(a*b,7,'Result Fail')

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

2.当case比较多的时候,可以使用Suite来管理多个case,suite 可以看做是一个case 的容器,可以装很多的case

# SuiteDemo.py
# -*- coding:utf-8 -*-
#一个类,添加测试集
import unittest

class SuiteDemo(unittest.TestCase):


  #测试用例前执行
  def setUp(self):
    print 'Case Before'
    pass

  #测试用例后执行
  def tearDown(self):
    print 'Case After'
    pass

  def test_Case1(self):
    a = 3
    b = 2
    self.assertEqual(a+b,5,'Result Fail')
    print 'Case1'

  def test_Case2(self):
    a = 2
    b = 3
    self.assertEqual(a*b,6,'Result Fail')
    print 'Case2'

#定义一个测试集合,方便添加Case

def suite():
  suiteTest = unittest.TestSuite()
  suiteTest.addTest(SuiteDemo("test_Case1"))
  suiteTest.addTest(SuiteDemo("test_Case2"))
  return suiteTest


#默认运行时通过 Suite 运行

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

3.Suite 和 Case可以分开写在不同的Python文件中,这样方便区分case模块和Suite管理模块,在测试测试的时候只需要在case模块里面添加case,之后添加到Suite模块即可了

case模块

# TestCaseDemo

# -*- coding:utf-8 -*-


import unittest


class TestCaseDemo(unittest.TestCase):
  def setUp(self):
    pass

  def tearDown(self):
    pass

  def test_Case1(self):
    print 'test_Case1'

  def test_Case2(self):
    print 'test_Case2'

  def test_Case3(self):
    print 'test_Case3'

  def test_Case4(self):
    print 'test_Case4'

接下来为三个Suite模块,都是先导入Case模块,之后添加Suite,再在Suite里面添加Case,最后执行的时候需要使用TestRunner,这个TestRunner 相当于Suite 的执行器

简单地TestSuite:

# TestCase_Demo1.py

# -*- coding:utf-8 -*-

#集合写入一个方法,main调用并启动


import unittest
from TestCase_Demo import TestCaseDemo


#添加一个测试集合,并添加Case

def suite():
  suiteTest = unittest.TestSuite()
  suiteTest.addTest(TestCaseDemo('test_Case1'))
  return suiteTest


#指定并启动测试集合,运行集合方法

if __name__ == '__main__':

  runner = unittest.TextTestRunner()
  runner.run(suite())

也可以不定义Suite方法,直接在main方法中进行Case的添加,之后执行

# TestCase_Demo2.py

# -*- coding:utf-8 -*-

#集合可以写在main


import unittest
from TestCase_Demo import TestCaseDemo


#指定并启动测试集合

if __name__ == '__main__':

  #添加测试集合Case,并启动
  suiteTest = unittest.TestSuite()
  suiteTest.addTest(TestCaseDemo('test_Case1'))
  suiteTest.addTest(TestCaseDemo('test_Case2'))

  #直接启动集合
  runner = unittest.TextTestRunner()
  runner.run(suiteTest)

可以把不同的Case 添加道不同的Suite里面,同样,可以给Suite分组,用于区分不同的Case,并且,Suite 之间还可以包含

# TestCase_Demo3.py
# -*- coding:utf-8 -*-

#包含集合,多集合

import unittest
from TestCase_Demo import TestCaseDemo

#添加不同的合集

def Suite1():
  suiteTest = unittest.TestSuite()
  suiteTest.addTest(TestCaseDemo("test_Case1"))
  suiteTest.addTest(TestCaseDemo("test_Case2"))
  print 'Suite1 运行'
  return suiteTest

def Suite2():
  suiteTest = unittest.TestSuite()
  suiteTest.addTest(TestCaseDemo("test_Case3"))
  suiteTest.addTest(TestCaseDemo("test_Case4"))
  print 'Suite2 运行'
  return suiteTest

#包含所有的Suite

def AllSuite():
  allTest = unittest.TestSuite((Suite1(),Suite2()))
  return allTest

#运行的时候,可以根据不同的要求,运行不同的Suite,或者全部运行,这样就方便管理每次运行的case

if __name__ == '__main__':
  runner = unittest.TextTestRunner()
  runner.run(AllSuite())

4.小结

PyUnit 是Python的一个单元测试框架,使用它可以方便的管理自动化运行的case.
在Python 中,每一个方法 只要方法名使用test_ 开头的都被作为是一个用例,都可以看做成一个case,这里介绍了使用Suite管理Case,并且分组运行Case,还有其他很多的功能,请参考: unittest — Unit testing framework

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

Python 相关文章推荐
Python中__name__的使用实例
Apr 14 Python
Python编写Windows Service服务程序
Jan 04 Python
使用实现pandas读取csv文件指定的前几行
Apr 20 Python
python3读取excel文件只提取某些行某些列的值方法
Jul 10 Python
django的settings中设置中文支持的实现
Apr 28 Python
Python Pandas 箱线图的实现
Jul 23 Python
Python实现的企业粉丝抽奖功能示例
Jul 26 Python
django中使用POST方法获取POST数据
Aug 20 Python
python中设置超时跳过,超时退出的方式
Dec 13 Python
Pycharm+Python工程,引用子模块的实现
Mar 09 Python
python中not、and和or的优先级与详细用法介绍
Nov 03 Python
Python爬虫之Selenium多窗口切换的实现
Dec 04 Python
python如何使用unittest测试接口
Apr 04 #Python
Python统计单词出现的次数
Apr 04 #Python
高效使用Python字典的清单
Apr 04 #Python
Python的numpy库中将矩阵转换为列表等函数的方法
Apr 04 #Python
python 列表,数组,矩阵两两转换tolist()的实例
Apr 04 #Python
使用Python设计一个代码统计工具
Apr 04 #Python
用 Python 连接 MySQL 的几种方式详解
Apr 04 #Python
You might like
php图像处理函数大全(推荐收藏)
2013/07/11 PHP
php实现微信公众号主动推送消息
2015/12/31 PHP
详解PHP实现支付宝小程序用户授权的工具类
2018/12/25 PHP
实例分析10个PHP常见安全问题
2019/07/09 PHP
载入jQuery库的最佳方法详细说明及实现代码
2012/12/28 Javascript
jquery实现智能感知连接外网搜索
2013/05/21 Javascript
JS中表单的使用小结
2014/01/11 Javascript
jQuery学习笔记之2个小技巧
2015/01/19 Javascript
jQuery插件zoom实现图片全屏放大弹出层特效
2015/04/15 Javascript
JS实现的表头列头固定页面功能示例
2017/01/10 Javascript
详解数组Array.sort()排序的方法
2020/05/09 Javascript
微信小程序中显示html格式内容的方法
2017/04/25 Javascript
jquery加载单文件vue组件的方法
2017/06/20 jQuery
Vue.js划分组件的方法
2017/10/29 Javascript
vue 使用饿了么UI仿写teambition的筛选功能
2021/03/01 Vue.js
Python sys.path详细介绍
2013/10/17 Python
python使用os模块的os.walk遍历文件夹示例
2014/01/27 Python
python中字典(Dictionary)用法实例详解
2015/05/30 Python
python之从文件读取数据到list的实例讲解
2018/04/19 Python
Python代码缩进和测试模块示例详解
2018/05/07 Python
详解Python with/as使用说明
2018/12/13 Python
Python time库基本使用方法分析
2019/12/13 Python
Ubuntu16.04安装python3.6.5步骤详解
2020/01/10 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
2020/06/18 Python
世界上最具创新性的增强型知名运动品牌:Proviz
2018/04/03 全球购物
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
高职助产应届生自荐信
2013/09/24 职场文书
会计专业自我鉴定范文
2013/12/29 职场文书
大学生实习感言
2014/01/16 职场文书
护士在校生自荐信
2014/02/01 职场文书
数学国培研修感言
2014/02/13 职场文书
岗位职责说明书模板
2014/07/30 职场文书
2015年体育教学工作总结
2015/05/20 职场文书
Java基于Dijkstra算法实现校园导游程序
2022/03/17 Java/Android
Mysql多层子查询示例代码(收藏夹案例)
2022/03/31 MySQL
springboot实现string转json json里面带数组
2022/06/16 Java/Android