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的Django框架中创建模板库的方法
Jul 20 Python
Python中pygame的mouse鼠标事件用法实例
Nov 11 Python
Python+Selenium自动化实现分页(pagination)处理
Mar 31 Python
Python中int()函数的用法浅析
Oct 17 Python
python实现xlsx文件分析详解
Jan 02 Python
解决Ubuntu pip 安装 mysql-python包出错的问题
Jun 11 Python
在python中安装basemap的教程
Sep 20 Python
Python实现注册、登录小程序功能
Sep 21 Python
Python基础学习之函数方法实例详解
Jun 18 Python
python使用QQ邮箱实现自动发送邮件
Jun 22 Python
Python selenium实现断言3种方法解析
Sep 08 Python
python超详细实现完整学生成绩管理系统
Mar 17 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
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
关于二级目录拖拽排序的实现(源码示例下载)
2013/04/26 PHP
php判断是否为json格式的方法
2014/03/04 PHP
PHP使用GD库输出汉字的方法【测试可用】
2016/11/10 PHP
php查找字符串中第一个非0的位置截取
2017/02/27 PHP
PHP多进程编程之僵尸进程问题的理解
2017/10/15 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
2019/04/10 PHP
打豆豆小游戏 用javascript编写的[打豆豆]小游戏
2013/01/08 Javascript
js给onclick事件赋值,动态传参数实例解说
2013/03/28 Javascript
关于JavaScript中string 的replace
2013/04/12 Javascript
jquery调取json数据实现省市级联的方法
2015/01/29 Javascript
js实现的动画导航菜单效果代码
2015/09/10 Javascript
Underscore源码分析
2015/12/30 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
2016/09/01 Javascript
Javascript获取图片原始宽度和高度的方法详解
2016/09/20 Javascript
JavaScript基础——使用Canvas绘图
2016/11/02 Javascript
JS判断时间段的实现代码
2017/06/14 Javascript
vue组件父子间通信详解(三)
2017/11/07 Javascript
浅谈vuex为什么不建议在action中修改state
2020/02/02 Javascript
王纯业的Python学习笔记 下载
2007/02/10 Python
Python 用Redis简单实现分布式爬虫的方法
2017/11/23 Python
利用Opencv中Houghline方法实现直线检测
2018/02/11 Python
python实现Zabbix-API监控
2018/09/17 Python
numpy给array增加维度np.newaxis的实例
2018/11/01 Python
Python编写打字训练小程序
2019/09/26 Python
使用PyTorch实现MNIST手写体识别代码
2020/01/18 Python
程序设计HTML5 Canvas API
2013/04/08 HTML / CSS
仿CSDN Blog返回页面顶部功能实现原理及代码
2013/06/30 HTML / CSS
html5 video全屏播放/自动播放的实现示例
2020/08/06 HTML / CSS
Sunglasses Shop丹麦:欧洲第一的太阳镜在线销售网站
2017/10/22 全球购物
正隆泰信息技术有限公司上机题
2012/06/14 面试题
给男朋友的道歉信
2014/01/12 职场文书
教师职称自我鉴定
2014/02/12 职场文书
文明礼仪标语
2014/06/13 职场文书
新员工入职感想
2015/08/07 职场文书
Python爬虫网络请求之代理服务器和动态Cookies
2022/04/12 Python