Web性能压力测试工具——Siege详解

简介:

Siege是一款开源的压力测试工具,设计用于评估WEB应用在压力下的承受能力。可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行。

Siege可以从您选择的预置列表中请求随机的URL。所以siege可用于仿真用户请求负载,而ab则不能。但不要使用siege来执行最高性能基准调校测试,这方面ab就准确很多。

一、安装

  • 编译安装

  
  
  1. wget http://www.joedog.org/pub/siege/siege-latest.tar.gz 
  2. tar -zxvf siege-latest.tar.gz 
  3. cd siege-2.72/ 
  4. ./configure 
  5. make 
  6. make install 
  • 通过包安装

Debian/Ubuntu


  
  
  1. apt-get install siege 

CentOS


  
  
  1. yum install siege 

二、参数详解

  • 命令行参数说明:

-C,或–config 在屏幕上打印显示出当前的配置,配置是包括在他的配置文件HOME/.siegerc

-f FILE, –file=FILE 指定用特定的urls文件运行siege ,默认为urls.txt,位于siege 安装目录下的etc/urls.txt

-u URL,–url=URL 测试指定的一个URL,对它进行”siege “,此选项会忽略有关urls文件的设定

-b 进行压力测试,不进行延时。

-A, —user-agent=”text” 设置请求的User-Agent

  • siegerc设定档说明:

verbose :要不要显示过程。

display-id :显示过程的时候,要不要显示模拟user的id

show-logfile :跑完之后要不要显示log资讯

logging :要不要log到档案

logfile :要log到档案的话,档名是什么

protocol :HTTP通讯协定( HTTP/1.1或HTTP/1.0 两者择一)

connection :keep-alive表示模拟成persistent connection(写close则反之)

concurrent :模拟有几个user来冲

time :跑多久之后停止( H=hours, M=minutes, S=seconds)

reps :每一个concurrent冲几次。

file :多个目的url情形下的url档案位置。

url :单一url情形下的指定url

delay :非benchmakr行况下,每个模拟user随机延迟0到这个数字(单位:秒)。

timeout :socket connection timeout(单位:秒)。

failures :socket失败次数(timeouts, connection failures)到达这个数字就停下来。

internet :随机从urls.txt抓出url,否则从urls.txt循序。

benchmark :跑benchmark模式的话,siege将不会在每个connection间delay,适合拿来做load testing.

user-agent :送出的agent识别

login :WWW-Authenticate login( login = jdfulmer:topsecret:Admin )(非form based)

username,password :也是login用的(非form based)

Login URL :每一个模拟user都必需经过的第一个login url( form based)

proxy-host,proxy-port,proxy-login :使用proxy的话要填这个。(proxy-login: jeff:secret:corporate)

follow-location :redirection support

zero-data-ok :接不接受zero-length data

chunked :HTTP/1.1需要chunked encoding

三、用法举例


  
  
  1. siege -c 300 -r 100 -f url.txt 

说明:-c是并发量,-r是重复次数。url.txt就是一个文本文件,里面是要测试的url,url.txt每行都是一个url。

urls.txt文件是很多行待测试URL的列表以换行符断开,格式为:


  
  
  1. [protocol://]host.domain.com[:port][path/to/file] 

url.txt内容:

http://192.168.80.166/01.jpg

http://192.168.80.166/02.jpg

http://192.168.80.166/03.jpg

http://192.168.80.166/04.jpg

http://192.168.80.166/05.jpg

http://192.168.80.166/06.jpg

结果说明:


  
  
  1. ** SIEGE 2.72 
  2. ** Preparing 10 concurrent users for battle. 
  3. The server is now under siege..      done. 
  4.  
  5. Transactions:                 300 hits  #已完成的事务总署 
  6. Availability:              100.00 %   #完成的成功率 
  7. Elapsed time:                0.08 secs   #总共使用的时间 
  8. Data transferred:            0.94 MB   #响应中数据的总大小 
  9. Response time:                0.00 secs   #显示网络连接的速度 
  10. Transaction rate:         3750.00 trans/sec  #平均每秒完成的事务数 
  11. Throughput:               11.79 MB/sec  #平均每秒传送的数据量 
  12. Concurrency:                8.50  #实际最高并发链接数 
  13. Successful transactions:         300  #成功处理的次数 
  14. Failed transactions:               0    #失败处理的次数 
  15. Longest transaction:            0.01   #最长事务处理的时间 
  16. Shortest transaction:            0.00   #最短事务处理时间 

四、常用的siege命令举例

  • 200个并发对www.google.com发送请求100次

  
  
  1. siege -c 200 -r 100 http://www.google.com 
  • 在urls.txt中列出所有的网址

  
  
  1. siege -c 200 -r 100 -f urls.txt 
  • 随机选取urls.txt中列出所有的网址

  
  
  1. siege -c 200 -r 100 -f urls.txt -i 

delay=0,更准确的压力测试,而不是功能测试


  
  
  1. siege -c 200 -r 100 -f urls.txt -i -b 

指定http请求头 文档类型


  
  
  1. siege -H "Content-Type:application/json" -c 200 -r 100 -f urls.txt -i -b 

五、Siege使用的一些总结

  • 发送post请求时,url格式为:http://www.xxxx.com/ POST p1=v1&p2=v2
  • 如果url中含有空格和中文,要先进行url编码,否则siege发送的请求url不准确
  • siege自身感觉也是有瓶颈的,并发数最大也就1000,再提高就会报下面这样的错误

  
  
  1. [error] socket: unable to connect sock.c:222: Operation already in progress socket: connection timed out 

这样最终导致测试结果怎么都没法超过2W每秒的请求,所以就把siege -c 1000 -r 100 -i -b -f url.txt 放到shell中并发执行


  
  
  1. #!/bin/bash 
  2. user_agent="Siege 1.0" 
  3. siege_rc="siege.rc" 
  4. concurrent=150 
  5. repet=200 
  6. siege_single_urls="singleurl.txt" 
  7. siege_prefix_urls="prefixurl.txt" 
  8.  
  9. for i in {1..10} 
  10. do 
  11. siege -c $concurrent -r $repet -i -b -f $siege_single_urls -R $siege_rc -A "$user_agent" &; 
  12. done 




作者:运维之美
来源:51CTO
目录
相关文章
|
1月前
|
数据采集 监控 机器人
浅谈网页端IM技术及相关测试方法实践(包括WebSocket性能测试)
最开始转转的客服系统体系如IM、工单以及机器人等都是使用第三方的产品。但第三方产品对于转转的业务,以及客服的效率等都产生了诸多限制,所以我们决定自研替换第三方系统。下面主要分享一下网页端IM技术及相关测试方法,我们先从了解IM系统和WebSocket开始。
57 4
|
13天前
|
人工智能 前端开发 API
Gemini Coder:基于 Google Gemini API 的开源 Web 应用生成工具,支持实时编辑和预览
Gemini Coder 是一款基于 Google Gemini API 的 AI 应用生成工具,支持通过文本描述快速生成代码,并提供实时代码编辑和预览功能,简化开发流程。
96 38
Gemini Coder:基于 Google Gemini API 的开源 Web 应用生成工具,支持实时编辑和预览
|
1月前
|
Web App开发 IDE JavaScript
Selenium IDE:Web自动化测试的得力助手
Selenium IDE:Web自动化测试的利器。作为开源工具,Selenium IDE支持录制与回放用户操作,适用于Chrome、Firefox等多浏览器,简化了测试流程,提升了效率,降低了自动化测试的门槛。它还支持导出多种编程语言的脚本,便于测试集成与复用。
113 31
Selenium IDE:Web自动化测试的得力助手
|
1月前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
210 17
Selenium:强大的 Web 自动化测试工具
|
22天前
|
开发框架 .NET Java
C#集合数据去重的5种方式及其性能对比测试分析
C#集合数据去重的5种方式及其性能对比测试分析
34 11
|
24天前
|
算法 Java 测试技术
使用 BenchmarkDotNet 对 .NET 代码进行性能基准测试
使用 BenchmarkDotNet 对 .NET 代码进行性能基准测试
53 13
|
24天前
|
开发框架 .NET Java
C#集合数据去重的5种方式及其性能对比测试分析
C#集合数据去重的5种方式及其性能对比测试分析
49 10
|
1月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
80 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
1月前
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
122 13
|
2月前
|
缓存 JSON 监控
如何在项目中保证 Web 组件化的性能
保证 Web 组件化的性能需要从多个方面入手,综合运用各种优化方法和策略。通过持续的优化和改进,能够提高组件化的整体性能,为用户提供更好的体验,同时也有助于提高项目的开发效率和质量。
53 8