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网络爬虫项目:内容提取器的定义
Oct 25 Python
python实现读取excel写入mysql的小工具详解
Nov 20 Python
实用自动化运维Python脚本分享
Jun 04 Python
对Python 数组的切片操作详解
Jul 02 Python
Python正则表达式和元字符详解
Nov 29 Python
Python调用百度根据经纬度查询地址的示例代码
Jul 07 Python
Python画图高斯分布的示例
Jul 10 Python
Python实现网页截图(PyQT5)过程解析
Aug 12 Python
Jupyter Notebook打开任意文件夹操作
Apr 14 Python
python如何进行矩阵运算
Jun 05 Python
Django自定义YamlField实现过程解析
Nov 11 Python
通过Python pyecharts输出保存图片代码实例
Nov 25 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图片加水印实现方法
2016/05/06 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
2018/12/07 PHP
PHP常见的序列化与反序列化操作实例分析
2019/10/28 PHP
PHP var关键字相关原理及使用实例解析
2020/07/11 PHP
jquery 插件实现图片延迟加载效果代码
2010/02/06 Javascript
使用js判断TextBox控件值改变然后出发事件
2014/03/07 Javascript
Jquery方式获取iframe页面中的 Dom元素
2014/05/07 Javascript
javascript记录文本框内文字个数检测文字个数变化
2014/10/14 Javascript
javascript数组输出的两种方式
2015/01/13 Javascript
浅谈javascript中基本包装类型
2015/06/03 Javascript
jQuery弹簧插件编写基础之“又见弹窗”
2015/12/11 Javascript
js获取本机操作系统类型的两种方法
2015/12/19 Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
2016/01/18 Javascript
理解javascript中的严格模式
2016/02/01 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
2016/12/02 Javascript
vue-router跳转页面的方法
2017/02/09 Javascript
jQuery中on方法使用注意事项详解
2017/02/15 Javascript
配置nodejs环境的方法
2017/05/13 NodeJs
微信小程序实现倒计时60s获取验证码
2020/04/17 Javascript
vue实现商城购物车功能
2017/11/27 Javascript
vue改变循环遍历后的数据实例
2019/11/07 Javascript
在Python的Django框架中使用通用视图的方法
2015/07/21 Python
python制作爬虫爬取京东商品评论教程
2016/12/16 Python
Python计算时间间隔(精确到微妙)的代码实例
2019/02/26 Python
使用Django开发简单接口实现文章增删改查
2019/05/09 Python
Django框架使用内置方法实现登录功能详解
2019/06/12 Python
python连接打印机实现打印文档、图片、pdf文件等功能
2020/02/07 Python
Python3实现建造者模式的示例代码
2020/06/28 Python
英国礼品和生活方式品牌:Treat Republic
2020/11/21 全球购物
数控技术与应用毕业生自荐信
2013/09/24 职场文书
酒店管理毕业生自荐信
2013/10/24 职场文书
教师开学感言
2014/02/14 职场文书
市场营销工作计划书
2014/05/06 职场文书
青年志愿者先进事迹
2014/05/06 职场文书
2014年企业党建工作总结
2014/12/18 职场文书
调研报告的主要写法
2019/04/18 职场文书