基于Python的HTTP接口测试

前言

由于某测试平台非常坑,导致创建了十个HTTP接口测试用例后便无法继续创建测试用例。因此本文便利用Python的单元测试功能,完整实现了类似的接口黑盒测试功能。

测试环境

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

测试流程

1.创建测试代码文件,新建普通Python文件即可
《基于Python的HTTP接口测试》
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运行环境(此步骤并非必须,只是为了更好的测试展示效果,需要配置)
《基于Python的HTTP接口测试》
此处需要注意target文件选择包含测试代码的文件
《基于Python的HTTP接口测试》
4.运行单元测试,如果最终结果为绿色,代表所有测试样例均已通过
《基于Python的HTTP接口测试》

注意事项

  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)

    # 获取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()进行测试。

    原文作者:震灵
    原文地址: https://segmentfault.com/a/1190000014782715
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞