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 获取 Linux 系统信息的代码
Jul 13 Python
Python实现的FTP通信客户端与服务器端功能示例
Mar 28 Python
python3.x实现发送邮件功能
May 22 Python
python smtplib发送带附件邮件小程序
May 22 Python
matplotlib subplots 调整子图间矩的实例
May 25 Python
使用Python读取二进制文件的实例讲解
Jul 09 Python
python矩阵的转置和逆转实例
Dec 12 Python
Jupyter notebook在mac:linux上的配置和远程访问的方法
Jan 14 Python
django foreignkey外键使用的例子 相当于left join
Aug 06 Python
django中media媒体路径设置的步骤
Nov 15 Python
Python生成pdf目录书签的实例方法
Oct 29 Python
python3 sqlite3限制条件查询的操作
Apr 07 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与已存在的Java应用程序集成
2006/10/09 PHP
Discuz Uchome ajaxpost小技巧
2011/01/04 PHP
ThinkPHP在新浪SAE平台的部署实例
2014/10/31 PHP
php对接java现实加签验签的实例
2016/11/25 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
2019/10/11 PHP
Jquery 插件开发笔记整理
2011/01/17 Javascript
jquery创建并行对象或者合并对象的实现代码
2012/10/10 Javascript
密码强度检测效果实现原理与代码
2013/01/04 Javascript
jquery实现图片灯箱明暗的遮罩效果
2013/11/15 Javascript
javascript中的nextSibling使用陷(da)阱(keng)
2014/05/05 Javascript
jQuery创建DOM元素实例解析
2015/01/19 Javascript
JavaScript中子对象访问父对象的方式详解
2016/09/01 Javascript
js获取元素的标签名实现方法
2016/10/08 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
2016/12/14 Javascript
正则 js分转元带千分符号详解
2017/03/08 Javascript
vue实现微信分享朋友圈,发送朋友的示例讲解
2018/02/10 Javascript
jQuery zTree插件使用简单教程
2019/08/16 jQuery
[47:50]Secret vs VP 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
django实现分页的方法
2015/05/26 Python
python创建进程fork用法
2015/06/04 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
2018/02/08 Python
在windows下使用python进行串口通讯的方法
2019/07/02 Python
浅谈Python3实现两个矩形的交并比(IoU)
2020/01/18 Python
python脚本实现mp4中的音频提取并保存在原目录
2020/02/27 Python
Python如何读写字节数据
2020/08/05 Python
html5使用html2canvas实现浏览器截图的示例
2017/08/31 HTML / CSS
String这个类型的class为何定义成final?
2012/11/13 面试题
最美家庭活动方案
2014/08/31 职场文书
出租车拒载检讨书
2015/01/28 职场文书
工作经历证明范本
2015/06/15 职场文书
关于观后感的作文
2015/06/18 职场文书
宾馆安全管理制度
2015/08/06 职场文书
团支部书记竞选稿
2015/11/21 职场文书
springboot如何初始化执行sql语句
2021/06/22 Java/Android
python工具dtreeviz决策树可视化和模型可解释性
2022/03/03 Python
Python数据可视化之Seaborn的安装及使用
2022/04/19 Python