哈喽,大家好,我是了不起!
由于软件测试行业目前已经越来越卷,现在很多公司都会要求我们测试人员掌握编写UI自动化或者是接口自动化,在编写自动化时我们就需要使用到框架,今天我们就来了解一下python自带的框架:unittest框架
在学习之前我们先了解一下什么是unittest的定义,unittest框架是什么呢?
UnitTest是Python自带的一个单元测试框架,用它来做单元测试;自带的框架:不需要单外安装,只要安装了Python ,就可以使用;能够组织多个用例去执行,内部提供了丰富的断言,可以生成自动化测试报告
接下来我们可以先举一个简单的例子说明一下,在使用钱我们需要先导入unittest模块
#导入unittest模块
import unittest
接下来就是写一个简单的unittest运行代码
classfunc(unittest.TestCase):
deftest_1(self):
print("测试方法1")
deftest_2(self):
print("测试方法2")
if __name__ == '__main__':
func()
在使用unittest框架的时候,我们需要让对象继承TestCase,并且每一个函数名都要以test开头,这个是unittest框架里面的一些使用规则
可以看到运行程序后在控制台中打印了很多内容,我们来一次来说明一下这些内容都是什么意思第一行:说明了我们开始运行程序的时间 第二行:首先是说明了我们使用的是python内部的uinttest方式去运行的程序,并将当前运行的文件夹和文件路径也一起显示出来 第三行:就是将我们运行test_1和test_2两个函数结果打印了出来 第四行:显示了我们本次程序运行的总耗时和是否成功,如果函数全部运行成功则显示OK,如果有函数执行报错则会显示FAILED,失败场景见下方示例
classfunc(unittest.TestCase):
deftest_1(self):
print("测试方法1")
deftest_2(self):
result=2/0
print(result)
deftest_3(self):
print("测试方法3")
if __name__ == '__main__':
func()
在了解如何编写一个uinttest简单对象后,我们接着了解一下在unittest框架常用的一个功能
1.setUp和tearDown
这两个内置方法我们会经常使用到,setup标识在每个函数运行前都会运行一次,而teardown则是在每个函数运行后都会运行一次
classfunc(unittest.TestCase):
defsetUp(cls):
print("我会在每个函数运行前都运行一次")
deftest_1(self):
print("测试方法1")
deftest_2(self):
print("测试方法2")
deftearDown(cls):
print("我会在每个函数运行后都运行一次")
if __name__ == '__main__':
func()
运行后结果如下
可以看到不管我们写了多少个函数,在运行后都会依次在每个函数运行前后都会跟着运行一次2.setUp class和tearDown class
setUp class和tearDown class方法都是属于类方法,在执行测试类之前需要执行的方法是setUp class,在执行完测试类之后执行的方法是tearDown class,在使用这两个方法需要注意的是,装饰符"@ classmethod"和传入参数"cls"都是不可缺少的
classfunc(unittest.TestCase):
@ classmethod
defsetUp class(cls) -> None:
print("在所有函数运行开始之前运行一次")
@ classmethod
deftearDown class(cls) -> None:
print("在所有函数运行结束之后运行一次")
deftest_1(self):
print("测试方法1")
deftest_2(self):
print("测试方法2")
if __name__ == '__main__':
func()
运行结果如下 这两个方法也是使用评率较高的,比如在进行接口自动化时,通常会在setUp class中进行登录获取token之类的;而setDown class多用于UI自动化中关闭窗口或者断开数据库连接等操作
3.skip跳过执行
使用unittest.skip可以选择函数进行跳过不执行
classfunc(unittest.TestCase):
@unittest.skip
deftest_1(self):
print("测试方法1")
deftest_2(self):
print("测试方法2")
if __name__ == '__main__':
func()
classfunc(unittest.TestCase):
@unittest.skip("test_1函数本次不执行")
deftest_1(self):
print("测试方法1")
deftest_2(self):
print("测试方法2")
if __name__ == '__main__':
func()
4.断言
unittest框架中为我们封装了很多常用的断言方法,比如我们经常使用的判断数据相等的断言,就直接使用内置的assertEqual方法
classfunc(unittest.TestCase):
deftest_1(self):
result=2
self.assertEqual(2,result,"判断数字2和result变量值是否相等")
if __name__ == '__main__':
func()
classfunc(unittest.TestCase):
deftest_1(self):
result=2
self.assertEqual(3,result,"判断数字2和result变量值是否相等")
if __name__ == '__main__':
func()
戳蓝字 「 Python都知道 」 关注 我哦!
PS : Python都知道技术交流群(技术交流、摸鱼、白嫖课程为主)又不定时开放了,感兴趣的朋友,可以在下方公号内回复: 666 ,即可进入。
老规矩 ,道友们还记得么, 右下角的 「在看」 点一下 , 如果感觉文章内容不错的话,记得分享朋友圈让更多的人知道!