基于Python的HTTP接口测试

前言

因为某测试平台很是坑,致使建立了十个HTTP接口测试用例后便没法继续建立测试用例。所以本文便利用Python的单元测试功能,完整实现了相似的接口黑盒测试功能。python

测试环境

Python3.6 Pycharm2017
本文默认读者拥有上述环境,再也不阐述环境搭建问题json

测试流程

1.建立测试代码文件,新建普通Python文件便可
2018-05-08-20-33-03
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运行环境(此步骤并不是必须,只是为了更好的测试展现效果,须要配置)
2018-05-08-20-37-48
此处须要注意target文件选择包含测试代码的文件
2018-05-08-20-36-55
4.运行单元测试,若是最终结果为绿色,表明全部测试样例均已经过
2018-05-08-20-39-23session

注意事项

  1. 若是是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)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()进行测试。

相关文章
相关标签/搜索