使用Python并发请求测试接口

我的接口需要进行并发测试,查看是否正确对余额进行相减的操作,避免出现重复相减导致余额不一致的问题。

使用aiohttp和asyncio并发发送请求,设置好需要测试的API地址,如果需要接口认证,就在header里面进行添加。

import aiohttp
import asyncio

# 设置API URL
url = "http://<ip>:<port>/api/merchant/{merchant_id}/balance/withdraw"
headers = {
    "Authorization": "Bearer xxxx"  # 添加 Bearer Token
}

# 发送提现请求的异步函数
async def send_withdrawal_request(session, merchant_id, withdrawal_data):
    try:
        async with session.post(
            url.format(merchant_id=merchant_id),
            json={"data": withdrawal_data},  # 包装成与接口期望一致的格式
            headers=headers
        ) as response:
            print(
                f"Merchant ID: {merchant_id}, "
                f"Amount: {withdrawal_data['amount']}, "
                f"Bank Account ID: {withdrawal_data['bank_account_id']}, "
                f"Status Code: {response.status}, "
                f"Response: {await response.json()}"
            )
    except Exception as e:
        print(
            f"Merchant ID: {merchant_id}, "
            f"Amount: {withdrawal_data['amount']}, "
            f"Error during request: {e}"
        )

# 使用asyncio模拟并发请求
async def simulate_multiple_withdrawals():
    # 定义多个提现请求的数据列表
    withdrawal_requests = [
        {"amount": 150, "remark": "并发提现测试1", "bank_account_id": 1},
        {"amount": 200, "remark": "并发提现测试2", "bank_account_id": 1},
        {"amount": 300, "remark": "并发提现测试3", "bank_account_id": 1},
        {"amount": 250, "remark": "并发提现测试4", "bank_account_id": 1},
        {"amount": 180, "remark": "并发提现测试5", "bank_account_id": 1},
        {"amount": 400, "remark": "并发提现测试6", "bank_account_id": 1},
        {"amount": 120, "remark": "并发提现测试7", "bank_account_id": 1},
        {"amount": 350, "remark": "并发提现测试8", "bank_account_id": 1},
        {"amount": 280, "remark": "并发提现测试9", "bank_account_id": 1},
        {"amount": 500, "remark": "并发提现测试10", "bank_account_id": 1},
    ]

    async with aiohttp.ClientSession() as session:
        tasks = []
        # 为每个提现请求创建任务
        for withdrawal in withdrawal_requests:
            merchant_id = "1"  # 可以根据需要修改为不同的 merchant_id
            tasks.append(send_withdrawal_request(session, merchant_id, withdrawal))
            print(
                f"提现请求:金额={withdrawal['amount']}, "
                f"备注={withdrawal['remark']}, "
                f"银行账户ID={withdrawal['bank_account_id']}"
            )
        # 并发执行所有请求
        await asyncio.gather(*tasks)

if __name__ == "__main__":
    asyncio.run(simulate_multiple_withdrawals())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值