导语
在熟悉了如何去分解需求编写web自动化、接口测试脚本以后,要开始探索框架,测试框架可以实现对所有的测试脚本、测试数据及测试报告的管理,提升测试执行和回归的效率,方便随时进行工作的开展及相关成果物的查看。本次先来学习已有的unittest框架,了解如何使用unittest框架。
一、初识unittest框架
本次通过unittest框架实现登录接口的测试,来认识unittest基本用法,编写的代码如下:
import unittest
import requests, csv
# 定义测试类,继承unittest框架
class fram_test_v1(unittest.TestCase):
# 使用框架提供的setup方法完成接口初始化
def setUp(self):
self.url = "http://localhost:8080/.../login.do"
self.test_data = open("userinfo.csv", "r")
# 定义unittest测试方法,必须已test_打头
def test_login(self):
# 发送接口请求
table = csv.reader(self.test_data)
userinfo = {}
for ele in table:
userinfo["username"] = ele[0]
userinfo["password"] = ele[1]
response = requests.post(self.url, data=userinfo).text
print(response)
# 断言函数
self.assertIn(ele[2], str(response))
# 通过框架提供的teardown方法来进行回收工作
def tearDown(self):
self.test_data.close()
if __name__ == '__main__':
unittest.main()
脚本中已有相关注释,就不多做描述了,运行以后,就可以看到打印出的响应结果,如果说在定义方法时,没有以test_打头,在运行后,就只能看到OK,并不能看到相应的响应结果。如果想了解程序具体运行的过程,可以使用debug的方式来看,如下图(图1):
二、通过unittest框架实现多个接口的测试
1、unittest.main
为了了解unittest框架式如何实现多个接口的测试,编写了简单的程序,不用涉及复杂的功能业务,代码如下:
import unittest
class fram_test_v1(unittest.TestCase):
def setUp(self):
print("setup")
def test_case1(self):
print("test_case1")
def test_case3(self):
print("test_case3")
def test_case2(self):
print("test_case2")
def tearDown(self):
print("teardown")
if __name__ == '__main__':
unittest.main()
运行程序,观察打印语句的顺序,如下图(图2):
执行顺序其实是根据asc码顺序执行,如果其中有setUp和tearDown方法,顺序则是setUp-->test_case1-->tearDown-->setUp-->test_case2-->tearDown......与方法编写的位置顺序无关,这就是用unittest.main的特点。
2、测试套TestSuite
如果要根据自己想要的顺序来运行,或者是指定运行的方法,怎么操作呢?这里可以使用测试套TestSuite,修改main下的内容如下(图3):
此时如果仍然还是右键-->run...是不会执行suit相关代码的,需要修改运行方式,,操作步骤如下:
从运行结果可以看出,使用测试套,仅执行了定义的test_case2方法。
3、以文件方式执行
以文件方式执行,一般直接写调用程序即可,本次就调用上面用测试套方式编写的脚本,如下图所示(图7):
通过运行结果可以看出,并没有像上个使用测试套编写的脚本一样,只执行了test_case2,而是将所有的方法均按asc码顺序执行了一遍。
三、总结
1、unittest框架的使用要求
(1)需要导包import unittest
(2)定义测试类需要继承unittest:class 类名(unittest.TestCase)
2、unittest框架的基本组成要素
(1)setUp初始化方法:可选,测试前期的初始化工作
(2)自定义的测试方法:test_X
(3)tearDown方法:可选,通常用来关闭对象等
3、三种运行方式的对比
(1)unittest.main
依次执行当前文件中对应测试类的所有方法,执行顺序则是按照asc码的顺序来执行。
(2)测试套
可以按照自定义的顺序和数量来运行,但是必须是以指定的Python文件方式来运行。
(3)测试文件
可以运行任意指定路径的指定的Python文件下的所有测试方法,执行顺序也是按照asc码的顺序来执行。