因为某测试平台很是坑,致使建立了十个HTTP接口测试用例后便没法继续建立测试用例。所以本文便利用Python的单元测试功能,完整实现了相似的接口黑盒测试功能。python
Python3.6 Pycharm2017
本文默认读者拥有上述环境,再也不阐述环境搭建问题json
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.运行单元测试,若是最终结果为绿色,表明全部测试样例均已经过session
pip install requests -i https://pypi.douban.com/simple
若是还欠缺其余库,可按照格式,将requests替换掉便可函数
上述代码包含一个测试类,这个测试类继承了unittest.TestCase。这是一种python unittest的规范格式。工具
class Login_Module(unittest.TestCase):
下面第一个方法是做为工具方法存在的,因为方法名不以test开头,所以在测试时该方法并不会做为测试方法参与测试,可是能够被其余测试方法调用。
这个方法的主要目的是获取sessionID,在个人项目逻辑中存在sessionID这样一个标识符,用来表示用户的身份信息。(相似于WEB开发中的Session)post
# 获取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进行了断言,若是断言成功,则继续执行。若是断言失败,则会中止执行,输出该测试用例的相应信息。spa
# 登陆接口测试 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()进行测试。