当前位置: 欣欣网 > 码农

Python系列:浅聊uinttest框架

2024-05-10码农

哈喽,大家好,我是了不起!

由于软件测试行业目前已经越来越卷,现在很多公司都会要求我们测试人员掌握编写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()

可以看到我们故意让test_2函数运行报错,并且在运行结果中将对应函数运行结果显示为FAILED,并显示对应的错误信息。并且可以发现虽然test_2运行报错了,但是我们新增的test_3函数依旧是正常运行,这里就是uinttest的强大支出,多个函数之间互不影响,一个函数报错后是不会影响到后面函数的运行的。

在了解如何编写一个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()

执行结果程序还是执行了两个函数,只是我们在test_1上面添加了装饰符「@unittest.skip」后就直接跳过没有执行了,执行结果中会在对应函数位置显示一个Skipped。同时可以在使用使用skip()进行传参备注

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()

断言结果一致就直接显示一个OK,表明本次断言通过,如果是断言失败则会显示FAILED,并将输出断言结果

classfunc(unittest.TestCase):
deftest_1(self):
result=2
self.assertEqual(3,result,"判断数字2和result变量值是否相等")

if __name__ == '__main__':
func()

可以看到它自动将我们断言的预期结果和实际结果都打印了出来,除了断言结果是否相同之外,还有很多其他的断言方法,有兴趣的小伙伴可以一一去尝试

以上是我们刚开始学习unittest框架时经常会用到的一些功能方法,如果还想继续深入学习其他方法或者学习如何生成测试报告可以留言评论。

戳蓝字 Python都知道 关注 我哦!

PS Python都知道技术交流群(技术交流、摸鱼、白嫖课程为主)又不定时开放了,感兴趣的朋友,可以在下方公号内回复: 666 ,即可进入。

老规矩 ,道友们还记得么, 右下角的 「在看」 点一下 如果感觉文章内容不错的话,记得分享朋友圈让更多的人知道!