Python怎么测试异步接口

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

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

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

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

示例接口

  1. 创建订单接口

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

请求方法
GET/POST

请求格式
POST: 表单

参数 类型 说明
user_id String 用户id
goods_id String 商品id
num int 数量
amount float 总价

响应示例
缺少参数:

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

成功:

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

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

请求方法
GET

参数 类型 说明
order_id String 订单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)

更多学习资料请加添加作者微信:lockingfree获取

原文地址:https://www.cnblogs.com/superhin/p/11454965.html

时间: 2024-11-12 07:30:08

Python怎么测试异步接口的相关文章

Python之测试webservice接口

前段时间学习了Python操作http接口,觉得挺容易的.最近项目组也有接触webservice接口,心里想想是否Python也可以操作这类接口.于是利用伟大的度娘,花了6个小时研究出来了,所以迫不及待更新一篇博文来分享.有兴趣讨论的同学可以加入我们的交流Q群:297669715. 一.准备环境 webservice接口测试,需要用到suds库,网上百度的各种suds库都没法安装,我这里的Python3.5版本,所以安装不了那些suds库也没有办法在线安装,所以这里就提供一个大家都可用的方法和s

关于python测试webservice接口的视频分享

现在大公司非常流行用python做产品的测试框架,还有对于一些快速原型产品的开发也好,很好地支持OO编程,代码易读.Python的更新挺快的,尤其是第三方库. 对于测试人员,代码基础薄弱,用python语言容易上手.今天就python测试webservice接口视频分享给大家 视频地址: http://pan.baidu.com/s/1kT5s3iB

接口自动化:Jenkins 自动构建python+nose测试

参考: http://www.cnblogs.com/LanTianYou/p/6559916.html#_label1 http://blog.csdn.net/limm33/article/details/51191263 通过Jenkins自动化构建python nose测试分两步: 1. 创建节点(节点就是执行自动化测试的机器): 2. 创建任务并绑定节点(用指定的机器来跑我们创建的任务,这里我们选择执行一段脚本) 1,创建节点: jenkins->系统管理->管理节点->新增节

python实现建立soap通信(调用及测试webservice接口)

实现代码如下: #调用及测试webservice接口 import requests class SoapConnect: def get_soap(self,url,data): r = requests.post(url,data) print(r.text) if __name__ == '__main__': u = 'http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo' d = {'mobile

Python渗透测试工具合集

Python渗透测试工具合集 如果你热爱漏洞研究.逆向工程或者渗透测试,我强烈推荐你使用 Python 作为编程语言.它包含大量实用的库和工具, 本文会列举其中部分精华. 网络 Scapy, Scapy3k: 发送,嗅探,分析和伪造网络数据包.可用作交互式包处理程序或单独作为一个库. pypcap, Pcapy, pylibpcap: 几个不同 libpcap 捆绑的python库 libdnet: 低级网络路由,包括端口查看和以太网帧的转发 dpkt: 快速,轻量数据包创建和分析,面向基本的

python环境测试MySQLdb、DBUtil、sqlobject性能

python环境测试MySQLdb.DBUtil.sqlobject性能 首先介绍下MySQLdb.DBUtil.sqlobject: (1)MySQLdb 是用于Python连接Mysql数据库的接口,它实现了 Python 数据库API 规范 V2.0,基于 MySQL C API 上建立的.除了MySQLdb外,python还可以通过oursql, PyMySQL, myconnpy等模块实现MySQL数据库操作: (2)DBUtil中提供了几种连接池,用以提高数据库的访问性能,例如Poo

python中asynchat异步socket命令/响应处理

该模块基于asyncore简化了异步客户端和服务器,并使其更容易元素处理由任意的字符串结束,或者是可变长度的的协议.它提供了抽象类async_chat,提供collect_incoming_data()和found_terminator()方法.循环和asyncore的一样,有2种信道:asyncore.dispatcher和asynchat.async_chat,可以自由混合信道.通常asyncore.dispatcher服务器通道在接收到连接请求时产生新的asynchat.async_cha

深入学习python (七) 如何用python调用C/C++接口

python这门优美而以人为本的语言的人性化导致其开发效率的高,高的同时他牺牲了的程序运行效率,在项目开发的后期,可以通过对某些耗时的松耦合的单独的瓶颈模块进行C++重构,然后直接用python改调用C++写的模块即可. 看过了网上的一些例子,自己也来试一试: 首先是一个C++程序的代码,test.cpp如下: #include <iostream> char const* hello() { return "hello, world"; } void bye() { us

Java or Python?测试开发工程师如何选择合适的编程语言?

很多测试开发工程师尤其是刚入行的同学对编程语言和技术栈选择问题特别关注,毕竟掌握一门编程语言要花不少时间成本,也直接关系到未来的面试和就业(不同企业/项目对技术栈要求也不一样),根据自身情况做一个相对正确的选择确实要比盲目投入更明智也更高效. 目前最常见的情况是纠结选择 Java 还是 Python?关于这个问题,我搜索了之前的相关博客,也特意请教了几位资深的测试技术专家,在这里做一个汇总整理,集"各家"之言供大家参考.也欢迎各位朋友根据自己的经验回帖补充意见. P.S. 有一点需要强