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 BeautifulSoup设置页面编码的方法
Apr 03 Python
python函数形参用法实例分析
Aug 04 Python
python3.0 模拟用户登录,三次错误锁定的实例
Nov 02 Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
Jan 24 Python
python excel使用xlutils类库实现追加写功能的方法
May 02 Python
Python 加密与解密小结
Dec 06 Python
Python简直是万能的,这5大主要用途你一定要知道!(推荐)
Apr 03 Python
python中class的定义及使用教程
Sep 18 Python
Pytorch Tensor基本数学运算详解
Dec 30 Python
详解Python3 中的字符串格式化语法
Jan 15 Python
python 解压、复制、删除 文件的实例代码
Feb 26 Python
python函数的两种嵌套方法使用
Apr 02 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
Re:从零开始的异世界生活 第2季 开播啦
2020/07/24 日漫
php数组函数序列之array_key_exists() - 查找数组键名是否存在
2011/10/29 PHP
php foreach循环中使用引用的问题
2013/11/06 PHP
ThinkPHP模板引擎之导入资源文件方法详解
2014/06/18 PHP
php设计模式之装饰模式应用案例详解
2019/06/17 PHP
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
2012/01/13 Javascript
js动态设置鼠标事件示例代码
2013/10/30 Javascript
js日期联动示例
2014/05/02 Javascript
Node.js 服务器端应用开发框架 -- Hapi.js
2014/07/29 Javascript
JavaScript数据结构与算法之栈详解
2015/03/12 Javascript
JS实现向表格中动态添加行的方法
2015/03/30 Javascript
AngularJS单选框及多选框实现双向动态绑定
2016/01/13 Javascript
AngularJS中实现动画效果的方法
2016/07/28 Javascript
bootstrap基础知识学习笔记
2016/11/02 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
2017/03/30 jQuery
Vue表单验证插件Vue Validator使用方法详解
2017/04/07 Javascript
深入浅析js原型链和vue构造函数
2018/10/25 Javascript
react实现移动端下拉菜单的示例代码
2020/01/16 Javascript
微信小程序语音同步智能识别的实现案例代码解析
2020/05/29 Javascript
Vue项目中数据的深度监听或对象属性的监听实例
2020/07/17 Javascript
vue 使用vant插件做tabs切换和无限加载功能的实现
2020/11/04 Javascript
vue中h5端打开app(判断是安卓还是苹果)
2021/02/26 Vue.js
Django URL传递参数的方法总结
2016/08/28 Python
对python中的for循环和range内置函数详解
2018/04/17 Python
python时间序列按频率生成日期的方法
2019/05/14 Python
python用线性回归预测股票价格的实现代码
2019/09/04 Python
Python实现的爬取豆瓣电影信息功能案例
2019/09/15 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
2020/03/16 Python
python中Django文件上传方法详解
2020/08/05 Python
捷克街头、运动和滑板一站式商店:BoardStar.cz
2019/10/06 全球购物
新员工培训个人的自我评价
2013/10/09 职场文书
酒店优秀员工事迹材料
2014/06/02 职场文书
政法干警核心价值观心得体会
2014/09/11 职场文书
布达拉宫的导游词
2015/02/02 职场文书
党支部半年考察意见
2015/06/01 职场文书
ES6 解构赋值的原理及运用
2021/05/25 Javascript