使用Python压测接口

Python接口压测

对Http接口进行压力测试,作为一个码农,我十分喜欢自己写脚本来压测接口,这是我之前写的用来压测http接口的python脚本,用了一个生产者消费者模式,和一个并发队列,用生产者方法来攒接口参数压入并发队列,消费者从队列中取数据执行调用接口,可以准确的记录调取接口的次数,还是比较有用的。

源码下载链接

https://github.com/Dahlin/HTTPInterfaceTest

脚本源代码

脚本里都有注释,挺简单的,我直接上源码了,其实就是对python线程池的一个简单的应用。

from concurrent.futures import ThreadPoolExecutor
import time
from queue import Queue
from HTTPInterfaceTest import HTTPInterfaceTest
import uuid

test_queue = Queue(maxsize=100000)


def create_test(publickey, key, usernames, param, url, timeout=1000):
    """
    生产者创建测试对象
    :param publickey:
    :param key:
    :param usernames:
    :param param:
    :param url:
    :param timeout:
    :return:
    """
    ti = HTTPInterfaceTest(publickey=publickey,
                           key=key,
                           usernames=usernames,
                           param=param,
                           url=url,
                           timeout=timeout)
    test_queue.put(ti)


def call_test(q):
    """
    调取测试接口
    :param q:
    :return:
    """
    while not q.empty():
        ti = q.get()
        ti.test_http('json')


def exec_pressuretest(index, pcount, ccount):
    """
    压力测试  调取总次数 = index*pcount
    :param index:
    :param pcount:
    :return:
    """
    for i in range(0, index):
        with ThreadPoolExecutor(pcount) as Producer:
            for p in range(pcount):
                base_url = 'http://192.168.127.131/'
                publickey = '123456789'
                key = 'A123B456C789D123'
                usernames = ['Jike', 'Jone', 'Ada']
                param = uuid.uuid1()
                Producer.submit(create_test, publickey, key, usernames, param, base_url)
                print(str(p)+' -> '+str(param))
        Producer.shutdown()

        with ThreadPoolExecutor(ccount) as Consumer:
            for c in range(ccount):
                Consumer.submit(call_test, test_queue)
        Consumer.shutdown()


if __name__ == '__main__':
    exec_pressuretest(100, 500, 400)
### 配置与执行 JMeter 进行 API 接口压力测试 #### 创建 HTTP 请求默认值 对于准备阶段,在“测试计划”下通过鼠标右键操作,选择添加配置元件中的HTTP请求默认值。在此处填写目标服务器的域名以及可能共通的部分路径和其他设置项[^3]。 #### 设置线程组 在进行具体的API接口测试前,需定义好线程(用户)数量、循环次数等参数以模拟不同级别的负载情况。这些都可以在线程组中设定,从而控制并发用户的数目及时长等因素。 #### 添加 HTTP 请求 Sampler 针对特定要测试API接口,在对应的线程组内添加Sampler组件——即HTTP请求。这里可以具体化所要访问的服务URL、方法类型(GET/POST)、头部信息及body内容等细节部分。如果涉及到JSON格式的数据交互,则应在Body Data区域输入相应的payload,并确保Content-Type被设为`application/json`[^1]。 #### 实现参数间关联 当存在前后依赖关系的操作时,例如先登录再利用获得的Token去调用其他受保护资源,则可通过两种机制实现这种跨请求的信息传递:一是正则表达式提取器;二是Json Path Extractor。前者适用于响应体较为简单的情形,而后者更适合处理结构化的JSON响应。一旦成功解析并捕获所需字段后,便能将其存储于变量之中供后续使用[^2]。 ```python import json # 示例Python代码用于解释如何构建JSON Payload data = { "username": "testUser", "password": "testPassword" } json_payload = json.dumps(data) print(json_payload) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值