如何进行接口压力测试?

本文共有1703个字,关键词:

问题:如何对接口进行压力测试?测试并发数能支持多少?

解决:使用python脚本进行异步请求查看每次消耗时间;使用ab命令进行测试

方法:

1、ab命令进行压力测试

#!/bin/bash

echo "开始压测..."
ab -n 3 -c 3 -p {"phone": "1232324"} -T application/json -H "Authorization: Bearer eyJhbGciOiJIUzIrE" https://x.com/api/send/smscode > ab_result.txt

echo "压测完成,结果已保存到 ab_result.txt"

2、异步请求脚本

import asyncio
import aiohttp

# 异步POST请求函数
async def fetch_post(session, url, headers, data):
    try:
        async with session.post(url, headers=headers, json=data, timeout=10, ssl=False) as response:
            status = response.status
            text = await response.text()
            return url, status, text
    except Exception as e:
        return url, str(e), 0

# 主函数,创建任务并运行
async def main():
    # 自定义请求头
    headers = { 
        'Authorization': 'Bearer eyJhbGciOiJIUzIrE',
        'Content-Type': 'application/json'
    }   

    # 要发送的数据(JSON 格式)
    payload = { 
        'phone': '9de2a041-cb82-4c=_=#cLE4NZTXb8fB9OYb36typA=='
    }   

    # 请求的 URL 列表
    urls = [ 
        'https://x.com/api/send/smscode'
    ]*3 

    async with aiohttp.ClientSession() as session:
        tasks = [fetch_post(session, url, headers, payload) for url in urls]
        results = await asyncio.gather(*tasks)

        # 打印结果
        for result in results:
            print(f"URL: {result[0]} | Status: {result[1]} | Response: {result[2]}")

if __name__ == '__main__':
    asyncio.run(main())
版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。
添加新评论
暂无评论