没有合适的资源?快使用搜索试试~ 我知道了~
首页python3+selenium3单元测试框架(unittest)使用介绍
资源详情
资源评论
资源推荐
单元测试框架(unitest)使用介绍
Python语言编写的WebDriver测试脚本通常使用单元测试框架来运行,所以了解单元测试框架的基本
方法和单元测试框架的使用技巧是很有必要的。
单元测试定义
单元测试(UnitTesting)是指在计算机编程中,针对程序模块(软件设计的最小单元)来进行正确性
检验的测试工作。
单元测试的特点:
程序单元是应的最小可测试部件,通常基于类或者类的方法进行测试。
程序单元和其他单元是相互独立的。
单元测试的执行速度很快。
单元测试发现的问题,相对容易定位。
单元测试通常由开发人员来完成。
通过了解diamante的实现逻辑进行测试,通常称之为白盒测试。
unittest单元测试框架
Python语言中有很多单元测试框架和工具,而unittest单元测试框架被作为标准Python语言中的一个
模块,是其他框架和工具的基础,一般的Python版本都会自带该模块,而对于自动化测试工程师来
说,掌握该框架的使用技巧就显得尤为重要。
unittest的定义
unittest被称为Python版本的JUnit,主要用于Python语言程序的单元测试。
unittest框架拥有支持自动化测试、测试用例间共享setUp(实现测试前的初始化工作)和
tearDown(实现测试结束后的清理工作)代码块,集合所有的测试脚本并且将测试结果独立地展示在
报告框架中的特性,在一组测试中,通过unittest框架提供的类很容易支持它的这些特性。
unittest框架的4个重要概念
1)testfixture(测试固件)
一个testfixture代表一个或多个测试执行前的准备动作和测试结束后的清理工作,例如,创建数据库
连接、启动服务进程、测试环境的清理或者关闭数据库连接等。
2)testcase(测试脚本)
一个testcase就是一个最小测试单元,也就是一个完整的测试流程。针对一组特殊的输入进行特殊的
验证与响应。通过继承unittest提供的测试基类(TestCase),可以创建新的测试用例。
3)testsuite(测试套件)
一个testsuite就是一组测试用例,一组测试套件或者两者共同组成的集合。它的作用是将测试用例集
合到一起,然后一次性执行集合中所有的测试用例。
4)testrunner(测试运行器)
一个testrunner由执行设定的测试用例和将测试结果提供给用户两部分功能组成。
单元测试加载方法
在unittest单元测试框架中,提供了两种单元测试加载方法:
1)直接通过unittest.main()方法加载单元测试的测试模块,这是一种最简单的加载方法,所有的测试
方法执行顺序都是按照方法名的字符串表示的ASCII码升序排列。
2)将所有的单元测试脚本(TestCase)添加到测试套件(TestSuite)集合中,然后一次性加载所有
测试对象。
测试脚本
软件测试中最基本的组成单元是测试脚本,unittest框架通过TestCase类来构建测试脚本,并要求所有
自动以的测试类都必须继承该类,它是所有测试脚本的基类,传入一个测试方法名,将返回一个测试脚
本实例。TestCase的子类中实现测试脚本的代码既可以单独运行,也可以和其他测试脚本构成测试脚
本集,然后批量执行。
TestCase类中定义的几个特殊方法如下:
1)setUp():每个测试方法运行前运行,测试前的初始化工作。
2)tearDown():每个测试方法运行结束后运行,执行清理工作。
3)setUpClass():所有测试方法运行前运行,单元测试前期准备,必须使用@classmethod装饰器进
行修饰,setUp()函数之前执行,整个测试过程只执行一次。
4)tearDownClass():所有的测试方法运行结束后执行,单元测试后期清理,必须使用
@classmethod装饰器进行修饰,tearDown()之后执行,整个测试过程只执行一次。
示例ex1.py:
import
unittest,random
class
TestFunction1(unittest.TestCase):
# 测试固件
def
setUp(self):
self.seq = range(10)
def
runTest(self):
element = random.choice( range(10))
self.assertTrue(element
in
range(10))
class
TestFunction2(unittest.TestCase):
# 测试固件
def
setUp(self):
self.seq = range(10)
def
test_runTest2(self):
random.shuffle(self.seq)
self.seq.sort()
self.assertEqual(self.seq,range(10))
# 此处会抛异常
self.assertRaises(TypeError,random.shuffle,(1,2,3))
if
__name__ ==
'__main__'
:
unittest.main()
如果要在unittest单元测试框架中构造上述测试类的一个实例,需要按testCase==TestFunction1()这
行代码实现,并且一个测试脚本通常只能对测试模块中一个方法进行单元测试,如果要对测试模块中多
个方法进行单元测试,就需要构造多个执行测试类,就如上例中TestFunction1类和TestFunction2
类,而对于同一测试模块,测试用例间可能有着相同的初始状态,如果还是采用上述方法就会出现很多
冗余代码。针对这一问题,unittest给出一个动态的解决方法,脚本编写人员只需要写一个测试类来完
成对整个测试模块的单元测试,而初始化工作直接在setUp()方法中完成,资源的释放等清理工作直接
在tearDown()方法中完成即可,这种方法规定所有需要被执行的测试方法都必须以“test”开头,具
体实例如下。
示例ex2.py:
import
unittest
class
myclass():
@classmethod
def
sum(cls,a,b):
return
a+b
@classmethod
def
sub(cls,a,b):
return
a-b
class
myTest(unittest.TestCase):
# 测试固件
@classmethod
def
setUpClass(cls):
print(
"----setUpClass"
)
# 测试固件
@classmethod
def
tearDownClass(cls):
print(
"----tearDownClass"
)
# 测试固件
def
setUp(self):
self.a = 3
self.b = 1
print(
"----setUp"
)
# 测试固件
def
tearDown(self):
print(
"----tearDown"
)
def
testsum(self):
self.assertEqual(4,myclass.sum(self.a,self.b),
"test sum fail!"
)
def
testsub(self):
self.assertEqual(2,myclass.sub(self.a,self.b),
"test sub fail!"
)
if
__name__ ==
'__main__'
:
unittest.main()
执行结果:
----setUpClass
----setUp
----tearDown
----setUp
----tearDown
剩余14页未读,继续阅读
迷丝Young
- 粉丝: 3
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0