高并发测试工具Tsung使用教程
tsung是erlang
开发的一款开源的多协议分布式负载并发测试工具,
可用作HTTP、WebDAV、SOAP、PostgreSQL、MySQL、LDAP 和 Jabber/XMPP的服务器压力测试。
tsung可分布在多个客户机,并能够模拟成千上万的虚拟用户数并发。
1 下载安装
Tsung 已经在Linux、FreeBSD和Solaris上通过测试,
其他系统,只要支持Erlang语言的平台上,也是可以工作的(Linux、Solaris、*BSD、Win32 和 Mac OS X)。
Mac OS X通过 Homebrew 即可安装 tsung,命令:
brew install tsung
Ubuntu 安装也很简单,命令:
apt-get install tsung
其他系统需要先下载源码包再安装,源码包下载地址:
以tsung 1.6.0为例,下载安装命令:
wget http://tsung.erlang-projects.org/dist/tsung-1.6.0.tar.gz # 以1.6.0版本为例 tar -zxf tsung-1.6.0.tar.gz # 解压 cd tsung-1.6.0 # 进入目录 ./configure # 配置,生成 Makefile 文件 make # 编译 make install # 安装
configure
的时候,如果没有安装 tsung 依赖的 Erlang 语言库,会提示下面的错误:
... checking for Erlang/OTP root directory... configure: error: in `/root/tsung-1.6.0': configure: error: test Erlang program execution failed ...
可以用下面的命令先安装erlang,再 configure
。
brew install erlang # OS X Homebrew port install erlang # OS X MacPorts apt-get install erlang # Ubuntu 和 Debian yum install erlang # Fedora pkg install erlang # FreeBSD
其他系统需要从源码安装 Erlang,稍微复杂一些,可参考:https://github.com/erlang/otp/blob/maint/HOWTO/INSTALL.md 。
2 运行
tsung安装完成后,会生成两个命令文件:
- tsung
- tsung-recorder
默认生成在 /usr/local/bin 目录下,使用-h
参数可以查到它们所有的参数:
tsung -h
在启动 tsung 之前,我们需要一个 XML 格式的配置文件,tsung会根据该配置文件进行测试。
/usr/share/doc/tsung/examples 目录下有一些 XML 配置文件范例,
将其中HTTP测试配置文件 http_simple.xml 拷贝到当前目录,
再执行,命令如下:
cp /usr/local/share/doc/tsung/examples/http_simple.xml ./ # 拷贝范例配置文件 tsung -f http_simple.xml start # 指定xml文件并开始。如果不指定,则默认使用 ~/.tsung/tsung.xml
这个命令会打印出测试的日志目录,直到测试结束。
3 结果
tsung 测试结束后,测试结果 Log 保存在目录 ~/.tsung/log/ 下。
当启动一个新的测试时,会在这个目录下面创建一个新的子目录,用以保存测试的数据。
Log 格式为当前日期和时间的组合,例如:~/.tsung/log/20160217-0940。
默认情况下,控制节点会启动一个嵌入的网站服务器,侦听8091
端口(可以用 -n
选项禁用)。
测试过程也可以用tail
命令查看实时记录:
tail -f ~/.tsung/log/20140430-1126/tsung.log
测试结束之后,再用tsung_stats.pl
生成报表。
yum install gnuplot # tsung_stats.pl 需要用到的 gnuplot mkdir http_simple # 创建用以保存报表的目录 cd http_simple # 进入目录 /usr/local/lib/tsung/bin/tsung_stats.pl --stats ~/.tsung/log/20160305-0933/tsung.log # 生成报表
之后,会在 http_simple 目录下生成3个目录和1个 log 文件,其中 images 目录下就是报表图片,类似如下。
以上仅是测试,没有实际用处,因为没有配置要测试的网站,所以所得到的结果没有实际意义。
需要修改 XML 配置文件后再测试,才会得到有意义的结果。
4 配置文件
打开 http_simple.xml ,下面来讲几个关键的配置。
4.1 clients
用户产生的方式:
<clients> <client host="localhost" use_controller_vm="true" maxusers="30000"/> </clients>
tsung运行时可以由很多的虚拟机(VM)组成,client
配置指明这个client
机器上最多生成的用户数,
如果use_controller_vm
为true
的话,那么当用户数达到maxusers
,tsung会自动生成新的虚拟机。
4.2 servers
<servers> <server host="garden.blue.jude.poppen.lab" port="80" type="tcp"></server> </servers>
server
段可以配置被测服务器的相关信息,也可以配置成集群,如下
<servers> <server host="server1" port="80" type="tcp" weight="4"></server> <server host="server2" port="80" type="tcp" weight="1"></server> </servers>
tsung会根据weight
值来选择发起请求的server
。
4.3 monitoring
系统监控服务,配置完后可获取被测server
的CPU、内存、负载、数据库等相关信息。
可以配置成erlang的监控服务和snmp的监控服务。
<monitoring> <monitor host="garden" type="erlang"> <mysqladmin port="3306" username="root" /> </monitor> </monitoring>
4.4 load
<load> <arrivalphase phase="1" duration="3" unit="minute"> <users maxnumber="100" interarrival="0.02" unit="second" ></users> </arrivalphase> </load>
load
段可配置访问的负载,访问可以配成多个阶段,由phase
值指定。
duration
是测试持续时间,unit
是单位。
users
段的maxnumber
限制了生成的最大用户数,
interarrival="0.02"
表示0.02
秒产生一个新用户,用户按照session
的配置顺序执行session
中的request
。
4.5 options
<options> <option type="ts_http" name="user_agent"> <user_agent probability="80">Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.8) Gecko/20050513 Galeon/1.3.21</user_agent> <user_agent probability="20">Mozilla/5.0 (Windows; U; Windows NT 5.2; fr-FR; rv:1.7.8) Gecko/20050511 Firefox/1.0.4</user_agent> </option> </options>
options
段可配置一些请求的信息,如agent
信息。
4.6 sessions
<sessions> <session name="http-example" probability="70" type="ts_http"> <setdynvars sourcetype="random_number" start="1" end ="100"> <var name="itemid" /> </setdynvars> <transaction name='getlist'> <request subst="true"> <http url="/comment/getList" method="POST" contents = "item_type=image&item_id=%%_itemid%%"></http> </request> </transaction> </session> <session name="http-example" probability="30" type="ts_http"> <setdynvars sourcetype="random_number" start="1" end="100"> <var name="itemid" /> </setdynvars> <setdynvars sourcetype="random_number" start="20" end="5000000"> <var name="content" /> </setdynvars> <transaction name='getlist'> <request subst="true"> <http url="/comment/addComment" method="POST" contents = "item_type=image&item_id=%%_itemid%%&content=%%_content%%"></http> </request> </transaction> </session> </sessions>
可配置多个子session
,进而可测试多个api,
可以设置请求概率,在probability
里定义,
要求每个session
的probability
之和是100,类型是http。
sessions
里可用for
来设定请求次数,如下
<for from="1" to="@loop" incr="1" var="counter">
在里面可以设置请求的具体信息。
在请求参数里可以带上随机数。
随机数和随机字符串的定义如下:
<setdynvars sourcetype="random_number" start="20" end="5000000"> <var name="xxx" /> </setdynvars> <setdynvars sourcetype="random_string" length="10"> <var name="xxx" /> </setdynvars>
以%%_xxx%%
的形式来调用。
这里必须注意的是,要使用随机数,request
必须加上subst="true"
参数,不然随机数无法被引用成功。
随机数也可从文件读取,如csv
。
http
内部可定义header
参数:
<http_header name="Authorization" value="111"/> <http_header name="Cookie" value="authToken=%%_auth_token%%; Path=/"/> <!-- content-Type:POST请求参数的格式,如果是json格式可以这样写 --> <http_header name="Content-Type" value="application/json"/>
thinktime
可用于定义两个请求的间隔时间
<thinktime value="1"/>
另外可定义不同的transaction
,这样子结果里就会显示不同transaction
的具体信息。
参考文档:
- Tsung 1.6.0 documentation
- Load Testing using Tsung
- Test the Performance and Scalability of Your Web Applications With Tsung
- 压力测试工具tsung用法简介
tsung_stats.pl文件在哪儿?
ubuntu 在 /usr/lib/tsung/bin/tsung_stats.pl
楼主,请问tsung可以发https的请求吗?
支持,请参考:Use tsung to test https site
非常感谢
Log directory is: /Users/hongwei/.tsung/log/20170907-1011
[os_mon] cpu supervisor port (cpu_sup): Erlang has closed
压测的时候回报错, Erlang has closed 这是啥原因?对压测结果有影响吗?最大链接数也只能到220
如何提高并发量呢?我加大了每秒产生的用户数量也不行
看看这个是否有帮助:https://stackoverflow.com/questions/34952385/os-mon-cpu-supervisor-port-cpu-sup-error-while-starting-tsung-test
我也出现了这样的错误,请问你解决了吗?
I serіously love your website.. Greаt colors & theme.
Did you develop this site yourself? Please reply back ɑs I’m hoping to create my own blog
and would love to find out where you got this from or what the
thеme is called. Many thanks!
Yes, I develop it myself. It named Maizi.
You can download the source code from my github: https://github.com/yeszao/maizi.
centOS 可以用 yum install tsung
收藏了
请问每秒创建的虚拟用户是不是执行完session里面的请求然后这个用户的生命周期就结束了?
还是会一直执行session里面的request直到arrivalphace 的duration时间结束后,这个用户才停止请求session里面的request?
报表里显示的并发用户数上不去,都是20左右,尽管我设置每秒1000虚拟用户的增长。
请求参数是动态的怎么解决 求帮助
博主还在吗
博主还在吗?如果是Windows系统下载安装怎么弄呢?