Python Unittest自动化单元测试框架详解
作者:卡尔西 发布时间:2023-09-13 23:13:56
本文实例为大家分享了Python Unittest自动化单元测试框架的具体代码,供大家参考,具体内容如下
1、python 测试框架(本文只涉及 PyUnit)
参考地址
2、环境准备
首先确定已经安装有Python,之后通过安装PyUnit,Python版本比较新的已经集成有PyUnit(PyUnit 提供了一个图形测试界面UnittestGUI.py)
参考:查看地址
3、代码实例
使用的IDE为 PyCharm,DEMO结构如图
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
来源:https://blog.csdn.net/a542551042/article/details/46696635


猜你喜欢
- 类似于and操作类似于or操作# 类型转换# sortedli=[2,45,1,67,23,10]li.sort() #list的排序方法p
- 1、enumerate返回针对序列类型的可迭代对象的枚举对象。2、eval取出字符串中的内容。将str中有效的表达式返回计算结果。3、exe
- 本文实例分析了Go语言共享内存读写的方法。分享给大家供大家参考。具体分析如下:前面分析了Go语言指针运算和内嵌C代码的方法,做了一个Go语言
- 后来查了一些相关资料,发现在IE 中通过 window.location.href 或者是 是无法获取HTTP_REFERER, 真是搞不懂
- 主要我是要解决一下几个问题: 1. apply和call的区别在哪里 2. apply的其他巧妙
- hello,大家好,我是Dream。最近有小伙伴私信我,说让我出一篇海龟画图,这其实我也不太能弄得明白,那在这里我和大家一块梳理一下!记得给
- 如下所示:# -*- coding: utf-8 -*-import threadingimport threadimport timecl
- 本文研究的主要是Python的端口扫描程序,具体实例代码如下。先来看看第一个端口扫描程序代码,获取本机的IP和端口号:import sock
- Django自带有个强大的后天管理系统,接下来我就给大家介绍一下x的admin一些强大的操作及后台美化。首先给大家介绍一些xadmin的注册
- python pyaudio音频录制安装所需要的包pip install pyaudio监听麦克风import pyaudioimport
- 一:安装pip install web.py二:URL 处理任何网站最重要的部分就是它的URL结构。urls=('/',&#
- 刚才画散点图要用到图例,可是matplotlib.pyplot.plot(x,y,'.')画出的散点图中图例是两个点(因为p
- QueueQueue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生
- 1. 矩阵求逆import numpy as npa = np.array([[1, 2], [3, 4]]) # 初始化一个非奇异矩阵(数
- WHERE 条件有时候操作数据库时,只操作一些有条件限制的数据,这时可以在SQL语句中添加WHERE子句来规定数据操作的条件。语法:SELE
- 本文实例讲述了Python实现的本地文件搜索功能。分享给大家供大家参考,具体如下:偶尔需要搜索指定文件,不想每次都在windows下面去搜索
- 今天来认识一下两个我不太常用到的html标签:sub标记和sup标记。定义和用法:<sub> 标签可定义下标文本。<sup
- 今天在论坛上面看到有些兄弟不知道HTC是什么东西。小生在这里稍微说一下。从5.5版本开始,Internet Explorer(IE)开始支持
- 背景:我司Redis服务器使用的亚马逊服务,本地需要通过跳板机,然后才有权限访问Redis服务。连接原理:使用SSHTunnelForwar
- 互联网上的资源多不胜数,无论我们搜索资料还是查阅新闻,或者是在网上淘物等等,肯定没少见分页!分页模式和表现方法也是各有千秋。我们来看看下面这