python怎么测试异步接口

当业务处理比较耗时时, 接口一般会采用异步处理的方式, 这种异步处理的方式又叫Future模式.

一般流程
当你请求一个异步接口,接口会立刻返回你一个结果告诉你已经开始处理,结果中一般会包含一个任务id类似的东西用于追踪结果, 另外会提供一个查询结果的接口, 当结果未处理完查询接口会返回相应的"未完成"状态, 如果已经处理完,则会返回相应的数据.

处理方法
异步接口我们一般采取轮询的方法,每隔一定时间间隔取请求一下查询结果的接口,直到接口返回的状态是已完成/查询到指定数据或超时

如果异步接口没有提供追踪id和查询接口,我们可以通过同样的方法轮询查取数据库数据或日志数据直到获取到指定结果或超时

示例接口

  1. 创建订单接口

请求地址
http://115.28.108.130:5000/api/order/create/

请求方法
GET/POST

请求格式
POST: 表单

参数类型说明
user_idString用户id
goods_idString商品id
numint数量
amountfloat总价

响应示例
缺少参数:

{
    "msg": "参数缺失"
}

成功:

{
    "order_id": "69561"
}
  1. 获取订单结果接口

请求地址
http://115.28.108.130:5000/api/order/get_result/?order_id=***

请求方法
GET

参数类型说明
order_idString订单id

响应示例
创建中:

{}

创建成功:

{
    "amount": "20.0",
    "goods_id": "123",
    "num": "2",
    "user_id": "123"
}

Python实现方法

import time
import requests

def create_order():
    url = "http://115.28.108.130:5000/api/order/create/"   # 异步接口
    data = {
        "user_id": "1234",
        "goods_id": "136",
        "num": 10,
        "amount": 20.00
    }
    res = requests.post(url=url, data=data)
    return res.json().get("order_id")  # 返回order_id用于追踪

def get_order_result(interval = 1, time_out = 60):  # 设置了默认时间间隔和超时时间,可以修改
    order_id = create_order()
    # 查询结果接口
    url = "http://115.28.108.130:5000/api/order/get_result/?order_id={}".format(order_id) 
    start_time = time.time()  # 启动时间
    end_time = start_time + time_out  启动时间+超时时间=结束时间
    count = 1  # 计数器, 此处是为了显示更直观, 可以去掉
    while time.time() < end_time:   # 当未到结束时间时, 循环请求
        res = requests.get(url)  # 请求查询结果接口
        print(count, res.json())
        count += 1
        time.sleep(interval)   # 休眠指定时间
        if res.json():   # 如果有数据则退出循环
            break
    else:
        return None   # 正常退出(达到end_time, 非break退出) 返回None
    return res.json()  # break退出返回 接口数据


if __name__ == '__main__':
    order_result = get_order_result()
    print(order_result)


转载自:https://www.jianshu.com/p/eecf0c985ba0
 

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值