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 lambda和Python def区别分析
Nov 30 Python
Python使用xlrd模块操作Excel数据导入的方法
May 26 Python
selenium+python自动化测试之鼠标和键盘事件
Jan 23 Python
Python画图实现同一结点多个柱状图的示例
Jul 07 Python
Pandas透视表(pivot_table)详解
Jul 22 Python
Python IDE Pycharm中的快捷键列表用法
Aug 08 Python
python查看数据类型的方法
Oct 12 Python
Python打印特殊符号及对应编码解析
May 07 Python
Python网页解析器使用实例详解
May 30 Python
基于tensorflow for循环 while循环案例
Jun 30 Python
matplotlib绘制正余弦曲线图的实现
Feb 22 Python
详解Python为什么不用设计模式
Jun 24 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
火影忍者:这才是千手柱间和扉间的真正死因,角都就比较搞笑了!
2020/03/10 日漫
用PHP实现多级树型菜单
2006/10/09 PHP
Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
2015/02/10 PHP
PHP简单日历实现方法
2016/07/20 PHP
mac系统下安装多个php并自由切换的方法详解
2017/04/21 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
2017/10/19 PHP
Centos7 Yum安装PHP7.2流程教程详解
2019/07/02 PHP
ajax不执行success回调而是执行了error回调
2012/12/10 Javascript
JS动态增加删除UL节点LI及相关内容示例
2014/05/21 Javascript
JavaScript通过this变量快速找出用户选中radio按钮的方法
2015/03/23 Javascript
简介JavaScript中的setDate()方法的使用
2015/06/11 Javascript
基于Jquery插件实现跨域异步上传文件功能
2016/04/26 Javascript
一种基于浏览器的自动小票机打印实现方案(js版)
2016/07/26 Javascript
AngularJS 工作原理详解
2016/08/18 Javascript
JS简单判断字符在另一个字符串中出现次数的2种常用方法
2017/04/20 Javascript
详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持
2017/10/21 Javascript
手把手教你使用vue-cli脚手架(图文解析)
2017/11/08 Javascript
详解JavaScript中关于this指向的4种情况
2019/04/18 Javascript
解决vue组件props传值对象获取不到的问题
2019/06/06 Javascript
javascript异常处理实现原理详解
2020/02/17 Javascript
深入学习Python中的装饰器使用
2016/06/20 Python
tensorflow实现softma识别MNIST
2018/03/12 Python
详解python实现数据归一化处理的方式:(0,1)标准化
2019/07/17 Python
python 公共方法汇总解析
2019/09/16 Python
pycharm中import呈现灰色原因的解决方法
2020/03/04 Python
CSS3+font字体文件实现圆形半透明菜单具体步骤(图解)
2013/06/03 HTML / CSS
国外平面设计素材网站:The Hungry JPEG
2017/03/28 全球购物
艺术爱好者的自我评价分享
2013/10/08 职场文书
永远跟党走演讲稿
2014/09/12 职场文书
党委干部批评与自我批评发言稿
2014/09/28 职场文书
客房领班岗位职责
2015/02/11 职场文书
2016入党心得体会范文
2016/01/06 职场文书
2019开业庆典剪彩仪式主持词!
2019/07/22 职场文书
一文搞懂如何实现Go 超时控制
2021/03/30 Python
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
2021/04/01 PHP
微信小程序中wxs文件的一些妙用分享
2022/02/18 Javascript