资讯专栏INFORMATION COLUMN

基于Python的HTTP接口测试

longshengwang / 1277人阅读

摘要:前言由于某测试平台非常坑,导致创建了十个接口测试用例后便无法继续创建测试用例。因此本文便利用的单元测试功能,完整实现了类似的接口黑盒测试功能。身边用户接口测试判断返回列表中用户是否只有十个最后,在函数中调用进行测试。

前言

由于某测试平台非常坑,导致创建了十个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()进行测试。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41695.html

相关文章

  • 基于PythonHTTP接口测试

    摘要:前言由于某测试平台非常坑,导致创建了十个接口测试用例后便无法继续创建测试用例。因此本文便利用的单元测试功能,完整实现了类似的接口黑盒测试功能。身边用户接口测试判断返回列表中用户是否只有十个最后,在函数中调用进行测试。 前言 由于某测试平台非常坑,导致创建了十个HTTP接口测试用例后便无法继续创建测试用例。因此本文便利用Python的单元测试功能,完整实现了类似的接口黑盒测试功能。 测试...

    Hanks10100 评论0 收藏0
  • 函数计算搭建 Serverless Web 应用(一)- HTTP 触发器

    摘要:配置触发器的函数可以通过请求触发执行。目前函数计算的触发器支持等编程语言,并不同程度支持对应的框架,具体内容请参看参考文档。编写处理函数编写处理函数的时候一定注意配置了触发器的函数接口与普通函数接口不同。 摘要: Web 应用(Serverless web backend) 是函数计算很重要的一个使用场景。相比于传统的在服务器上搭建 web 应用,函数计算无需您管理服务器等基础设施,只...

    ad6623 评论0 收藏0
  • Python使用HTTP2实现苹果原生推送

    摘要:由于苹果原生蛋疼的协议致使本来很简单的个推送服务让人望而却步。直到苹果最近的协议的出现才有所改善。如果推送失败后苹果的推送服务器会返回个错误的信息。结语虽然通过使用来实现苹果的推送服务是个比较简单的事情甚至会觉得比较枯燥无味的事情。 原文地址: http://52sox.com/python-use-h... 说起苹果的推送,可能很多开发人员就开始头疼了,因为实现苹果推送服务是1个比较...

    The question 评论0 收藏0
  • 【压力测试】Mac下进行locust配置和测试

    摘要:页面数据说明性能测试参数请求的类型,例如。当前请求失败的数量。中间值,单位毫秒,一半的服务器响应时间低于该值,而另一半高于该值。平均值,单位毫秒,所有请求的平均响应时间。单个请求的大小,单位字节。 写在前面:此文章在通过学习、实践网络资料写成,相关链接在文章结尾。 一、简介 1、locust是一种可用python编写脚本的开源压测工具(实质是由python下的一些库构成),可定义用户行...

    channg 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<