Skip to content

并发测试网站

python
import aiohttp
import asyncio
import time

async def test_url_async(session, url):
    """异步测试单个请求"""
    try:
        start_time = time.time()
        async with session.get(url, timeout=10) as response:
            end_time = time.time()
            return {
                "status": "success",
                "status_code": response.status,
                "time": end_time - start_time
            }
    except Exception as e:
        return {
            "status": "fail",
            "error": str(e),
            "time": time.time() - start_time
        }

async def high_concurrency_async_test(url, concurrency, total_requests):
    """异步高并发测试"""
    print(f"开始异步测试:URL={url},并发数={concurrency},总请求数={total_requests}")
    start_time = time.time()
    
    success = 0
    fail = 0
    total_time = 0
    max_time = 0
    min_time = float('inf')
    
    # 控制并发数(通过信号量)
    semaphore = asyncio.Semaphore(concurrency)
    
    async def bounded_test():
        async with semaphore:
            return await test_url_async(session, url)
    
    async with aiohttp.ClientSession() as session:
        # 创建所有任务
        tasks = [bounded_test() for _ in range(total_requests)]
        # 并发执行
        results = await asyncio.gather(*tasks)
    
    # 统计结果
    for result in results:
        if result["status"] == "success":
            success += 1
            total_time += result["time"]
            max_time = max(max_time, result["time"])
            min_time = min(min_time, result["time"])
        else:
            fail += 1
            # print(f"请求失败:{result['error']}")
    
    end_time = time.time()
    total_duration = end_time - start_time
    
    # 打印统计结果(同方案1)
    print("\n测试结果:")
    print(f"总耗时:{total_duration:.2f}秒")
    print(f"总请求数:{total_requests}")
    print(f"成功数:{success},失败数:{fail}")
    print(f"成功率:{success/total_requests*100:.2f}%")
    if success > 0:
        print(f"平均响应时间:{total_time/success:.4f}秒")
        print(f"最大响应时间:{max_time:.4f}秒")
        print(f"最小响应时间:{min_time:.4f}秒")
    print(f"QPS(每秒请求数):{total_requests/total_duration:.2f}")

# 测试示例
if __name__ == "__main__":
    target_url = "https://020417.xyz"  # 替换为目标URL
    concurrency = 100  # 并发数(异步可支持更高)
    total_requests = 2000  # 总请求数
    asyncio.run(high_concurrency_async_test(target_url, concurrency, total_requests))
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.7.1

Released under the MIT License.