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操作sqlite3快速、安全插入数据(防注入)的实例
Apr 26 Python
Python深入学习之装饰器
Aug 31 Python
Python使用turtule画五角星的方法
Jul 09 Python
Python的Django框架中if标签的相关使用
Jul 15 Python
Python实现发送与接收邮件的方法详解
Mar 28 Python
利用ctypes获取numpy数组的指针方法
Feb 12 Python
如何利用Pyecharts可视化微信好友
Jul 04 Python
Python中类似于jquery的pyquery库用法分析
Dec 02 Python
Python 脚本的三种执行方式小结
Dec 21 Python
浅谈Pytorch torch.optim优化器个性化的使用
Feb 20 Python
Python 如何实现访问者模式
Jul 28 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
Jan 29 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
中国的第一台收音机
2021/03/01 无线电
菜鸟修复电子管记
2021/03/02 无线电
php htmlentities和htmlspecialchars 的区别
2008/08/18 PHP
php中echo()和print()、require()和include()等易混淆函数的区别
2012/02/22 PHP
浅析PHP中的字符串编码转换(自动识别原编码)
2013/07/02 PHP
PHP5.3安装Zend Guard Loader图文教程
2014/09/29 PHP
yii通过小物件生成view的方法
2016/10/08 PHP
一个对于js this关键字的问题
2007/01/09 Javascript
Javascript与vbscript数据共享
2007/01/09 Javascript
css图片自适应大小
2007/11/28 Javascript
js null undefined 空区别说明
2010/06/13 Javascript
javascript中万恶的function实例分析
2011/05/25 Javascript
关于JavaScript中string 的replace
2013/04/12 Javascript
防止xss和sql注入:JS特殊字符过滤正则
2013/04/18 Javascript
js拖动div 当鼠标移动时整个div也相应的移动
2013/11/21 Javascript
如何在MVC应用程序中使用Jquery
2014/11/17 Javascript
JS实现模拟百度搜索“2012世界末日”网页地震撕裂效果代码
2015/10/31 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
Javascript之图片的延迟加载的实例详解
2017/07/24 Javascript
Vue的elementUI实现自定义主题方法
2018/02/23 Javascript
Vue自定义全局Toast和Loading的实例详解
2019/04/18 Javascript
vue-router的钩子函数用法实例分析
2019/10/26 Javascript
使用JS监听键盘按下事件(keydown event)
2019/11/07 Javascript
JS实现简易图片自动轮播
2020/10/16 Javascript
[02:19]2018年度DOTA2最佳核心位选手-完美盛典
2018/12/17 DOTA
Python中input和raw_input的一点区别
2014/10/21 Python
python集合类型用法分析
2015/04/08 Python
Python中str.format()详解
2017/03/12 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
2020/05/20 Python
《一个中国孩子的呼声》教学反思
2014/02/12 职场文书
结婚保证书范文
2014/04/29 职场文书
市场营销战略计划书
2014/05/06 职场文书
2015年宣传工作总结
2015/04/08 职场文书
六一儿童节主持开场白
2015/05/28 职场文书
django注册用邮箱发送验证码的实现
2021/04/18 Python
Python开发简易五子棋小游戏
2022/05/02 Python