前言
由于某测试平台非常坑,导致创建了十个HTTP接口测试用例后便无法继续创建测试用例。因此本文便利用Python的单元测试功能,完整实现了类似的接口黑盒测试功能。
测试环境
Python3.6 Pycharm2017
本文默认读者拥有上述环境,不再阐述环境搭建问题
测试流程
1.创建测试代码文件,新建普通Python文件即可
2.复制如下代码,本代码大致原理会在下文讲到,本代码仅为示例,如需运行,需要自行编写相应后端代码
import unittest
import requests
import json
URL = 'http://xxx:9000'
# 针对登录模块的测试类
class Login_Module(unittest.TestCase):
# 获取sessionID
def get_session(self):
r = requests.post(URL + '/login',
data={'realPhone': '18890000000', 'password': '123456'})
return json.loads(r.text)['data']
# 登录接口测试
def test_login(self):
r = requests.post(URL + '/login',
data={'realPhone': '18890000000', 'password': '123456'})
obj = json.loads(r.text)
self.assertEqual(obj['code'], 0) # 判断返回结果码是否为0
# 身边用户接口测试
def test_near_user(self):
r = requests.get(URL + '/nearuser',
params={'sessionID': self.get_session()})
obj = json.loads(r.text)
self.assertEqual(len(obj['data']), 10) # 判断返回列表中用户是否只有十个
if __name__ == '__main__':
unittest.main()
3.新建PythonTest运行环境(此步骤并非必须,只是为了更好的测试展示效果,需要配置)
此处需要注意target文件选择包含测试代码的文件
4.运行单元测试,如果最终结果为绿色,代表所有测试样例均已通过
注意事项
- 如果是Python初始环境,那么很有可能不存在requests这个PythonHTTP请求库,需要打开CMD窗口,运行
pip install requests -i https://pypi.douban.com/simple
如果还欠缺其他库,可按照格式,将requests替换掉即可
代码解释
上述代码包含一个测试类,这个测试类继承了unittest.TestCase。这是一种python unittest的规范格式。
class Login_Module(unittest.TestCase):
下面第一个方法是作为工具方法存在的,由于方法名不以test开头,因此在测试时该方法并不会作为测试方法参与测试,但是可以被其他测试方法调用。
这个方法的主要目的是获取sessionID,在我的项目逻辑中存在sessionID这样一个标识符,用来表示用户的身份信息。(类似于WEB开发中的Session)
# 获取sessionID
def get_session(self):
r = requests.post(URL + '/login',
data={'realPhone': '18890000000', 'password': '123456'})
return json.loads(r.text)['data']
此处的重点是如下两个函数
#这段代码post代表post方法,post函数的第一个参数代表接口URL地址,第二个参数代表数据信息
requests.post(URL + '/login',
data={'realPhone': '18890000000', 'password': '123456'})
#这段代码loads代表将返回的相应字符串转化为python字典数据类型,然后['data']就可以取出属性为data的数据
return json.loads(r.text)['data']
在上述的过程中,发现需要知道相应信息的结构才能更好地进行测试,但是由于接口不完善,有时候可能无法得到完整的接口信息,这时候就需要使用print函数自行打印接口返回信息
print(json.loads(r.text))
然后看下面的第二个函数,这个函数主要和第一个函数相同,只是有一点不同,这个函数通过assertEqual进行了断言,如果断言成功,则继续执行。如果断言失败,则会停止执行,输出该测试用例的相应信息。
# 登录接口测试
def test_login(self):
r = requests.post(URL + '/login',
data={'realPhone': '18890000000', 'password': '123456'})
obj = json.loads(r.text)
self.assertEqual(obj['code'], 0) # 判断返回结果码是否为0
接下来看第三个函数,这个函数的特色在于这个函数所对应的接口的请求方式不是POST而是GET,针对GET请求,大体上方式还是一致的,只是数据参数名由data变成了params。
# 身边用户接口测试
def test_near_user(self):
r = requests.get(URL + '/nearuser',
params={'sessionID': self.get_session()})
obj = json.loads(r.text)
self.assertEqual(len(obj['data']), 10) # 判断返回列表中用户是否只有十个
最后,在main函数中调用unittest.main()进行测试。