1、默认编码:utf-8,你能够根据须要进行修改,如
<?xml version=”1.0″ encoding=”ISO-8859-1″?>
2、xml文件的结构
先总体了解xml文件的结构,它是由下面这些标签构成
2.1顶级标签<tsung>
2.2客户端标签<clients>
2.3服务端标签<servers>
2.4监控标签<monitor>
2.5负载标签<load>
2.6选项标签<options>
2.7过程标签<sessions>
3、顶级标签:
1.1顶级标签是tsung,如
<?xml version=”1.0″?>
<!DOCTYPE tsung SYSTEM “/usr/share/tsung/tsung-1.0.dtd” [] >
<tsung loglevel=”info”>
…
</tsung>
1.2参数:
1.2.1:dumptraffic
true:全部的通讯都会被记录,注:这会大大下降tsung速度,通常是用于调试
light:只转储前44字节
1.2.2:loglevel:
emergency
critical
error
warning(推荐)
notice (默认)
info
debug(须要察看详细信息时,注:使用这个属性时要用make debug从新编译tsung)
3、客户端标签与服务端标签(这两个有关联,需对照理解)
3.1简单设置:
<clients>
<client host=”localhost” use_controller_vm=”true”/>
</clients>
<servers>
<server host=”127.0.0.1″ port=”80″ type=”tcp”></server>
</servers>
注:最基本的设置,在同一机器上。
3.2高级设置:
<clients>
<client host=”louxor” weight=”1″ maxusers=”800″>
<ip value=”10.9.195.12″></ip>
<ip value=”10.9.195.13″></ip>
</client>
<client host=”memphis” weight=”3″ maxusers=”600″ cpu=”2″/>
</clients>
<servers>
<server host=”10.9.195.1″ port=”8080″ type=”tcp”></server>
</servers>
能够用多个虚拟IP来模拟出更多的机器,在负载均衡器使用客户端IP把流量分配到服务端集群中时,这点十分有用。
在这个例子中,第二个机器在tsung集群中,它被设定更高的比重、两个cpu。它用两个erlang虚拟机来充分利用cpu数量。
注意:即便如今erlang vm能处理多个cpu(erlang SMP),测试显示,对一个tsung客户端来讲,一个cpu用一个vm更高效。所以你的cpu数最好和你的结点数相等。若是你还坚持用erlang SMP,在启动tsung加上-s选项,而且不要在配置文件中设定cpu个数。
默认状况下,负载被统一的分配到全部的cpu上(默认一个客户端一个cpu)。参数的比重能够用来衡量客户端机器的处理速度。例如,有两台真实机器,一台比重为1,另外一台为2,那么第二台机器会比第一台机器多启动一倍的用户(比重是1/3,2/3).在上面的例子中,第二台机器有2个cpu比重是3,这就至关于每一个cpu的比重是1.5。
参数maxusers被用来忽略单个进程对套接字打开数的限制(默认是1024)。当用户数高于这个限制后,就会启动一个新的vm来处理新的用户。参数maxusers的默认值是800。如今的机器开启kernel poll功能后,你就能够对maxusers设定一个最高的值(如30000)而没有性能损失(但注意不要忘记用ulimit -n提升os的限制[这点不大明白]),
3.3运行一个带有做业调度器的tsung[不理解]
原文在文档6.2.3
4、监控标签
tsung监控多个远程服务器, 每一个远程服务器都是由多个用远程代理进行交互的后台。这个能够在<monitor>标签中配置。可统计的数据有:cpu使用状况,平均的工做量状况,内存利用状况。
这儿注意:你能够从做业调试器获得监控结点,如:
<monitor batch=”true” host=”torque” type=”erlang”></monitor>
这儿支持多种类型的远程代理(默认是erlang)。
4.1
5、负载标签
5.1随机生成用户
负载标签订义了几个用户到达阶段
<load>
<arrivalphase phase=”1″ duration=”10″ unit=”minute”>
<users interarrival=”2″ unit=”second”></users>
</arrivalphase>
<arrivalphase phase=”2″ duration=”10″ unit=”minute”>
<users interarrival=”1″ unit=”second”></users>
</arrivalphase>
<arrivalphase phase=”3″ duration=”10″ unit=”minute”>
<users interarrival=”0.1″ unit=”second”></users>
</arrivalphase>
</load>
上面这段配置文件表示:用户的生成分三个阶段,第一阶段,每2秒生成一个新用户;第二阶段,每秒生成一个新用户,第三阶段,每秒生成10个新用户。这些测试将在全部用户执行完它们的过程(后面的session标签表明的过程)以后,整个测试就结束了。
上面的第三阶段是每秒生成10个用户,但它字面上理解是每0.1秒生成一个用户,你还能够经过另外一种方法实现一样的功能,用arrivalrate来代替arrivalphase,例:
<arrivalphase phase=”1″ duration=”10″ unit=”minute”>
<users arrivalrate=”10″ unit=”second”></users>
</arrivalphase>
还能够用load标签中用loop属性来让整个过程执行屡次,如:loop=’2′的意思是这序列被循环两次,因此成天负载被执行三次。(这个要在版本1.2.2以后可用)
负载由每秒http的请求数和每一个session的request的个数来决定,例如:每一个session有100个request, 每秒生成10个新用户,那么理论的平均吞吐量是每秒1000个request。
5.2静态生成用户
你想在测试的过程当中在指定的时间上启动给定的session,你的愿望在1.3.1版本以后能够实现。
<load>
<arrivalphase phase=”1″ duration=”10″ unit=”minute”>
<users interarrival=”2″ unit=”second”></users>
</arrivalphase>
<user session=”http-example” start_time=”185″ unit=”second”></user>
<user session=”http-example” start_time=”10″ unit=”minute”></user>
<user session=”foo” start_time=”11″ unit=”minute”></user>
</load>
<sessions>
<session name=”http-example” probability=”0″ type=”ts_http”>
<request> <http url=”/” method=”GET”></http> </request>
</session>
<session name=”foo” probability=”100″ type=”ts_http”>
<request> <http url=”/” method=”GET”></http> </request>
</session>
<sessions>
在这个例子中,有两个session,一个的probability为“0”(所以在第一阶段不会被执行,就是随机生成用户部分), 而另外一个是100。在测试开始以后,咱们设置3个用户分别启动,第一个在3分5秒(执行http-example session)启动,第二个在10分钟后启动(http-example session),最后一个在11分钟后启动(foo session)。
5.3负载测试的过程
默认状况下,tsung在全部用户都完成他们的session以后结束,所以这会比用户生成的过程要长的多。若是你想要中止tsung而无论阶段是否完成,也不论是否有session正处于激活状态。那么你能够在load标签中增长duration属性(版本1.3.2后有效)。
<load duration=”1″ unit=”hour”>
<arrivalphase phase=”1″ duration=”10″ unit=”minute”>
<users interarrival=”2″ unit=”second”></users>
</arrivalphase>
</load>
当前最大值是50天,unit能够是”second”, “minute”, “hour”。
6、option标签:
全局变量的默认值能够在这儿进行设定,好比:场景中两次请求间的思考时间,ssl加密算法,tcp/udp缓存大小(默认是32K)。若是override设置为true,这些值会把session配置文件中的对应值覆盖。
<option name=”thinktime” value=”3″ random=”false” override=”true”/>
<option name=”ssl_ciphers” value=”EXP1024-RC4-SHA,EDH-RSA-DES-CBC3-SHA”/>
<option name=”tcp_snd_buffer” value=”16384″></option>
<option name=”tcp_rcv_buffer” value=”16384″></option>
<option name=”udp_snd_buffer” value=”16384″></option>
<option name=”udp_rcv_buffer” value=”16384″></option>
注:在1.3.1版本以后,增长一个属性——hibernate,这个被用来减小模拟用户在思考时间的内存消耗。默认状况下,当思考时间超过10s以后hibernate就会被激活,这个能够进行修改,如:
<option name=”hibernate” value=”5″></option>
想要禁止hibernate时,把值设为”infinity”
6.1XMPP/Jabber 选项
暂略…
6.2http 选项
对应http,你能够设定UserAgent的值[版本1.1.0后],对每一个user_agent都有一个probability属性(全部的probability值的和是100),如:
<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>html
7、session标签
session定义了场景自己,它描述了要运行的请求。
每一个session都有一个指定的probality属性,这个被用来决定一个新用户要运行哪一个session,全部session的probability属性和为100。
一个事务是一种手工统计数据的一种方式。好比说你想知道你网站登陆页面的反应时间,你就须要把这个页面的全部请求(html和内嵌的图片等)放到这个事务里面。在下面的例子中你就会看到,名为index_request的事务统计数据和报告。这儿要注意的是,若是思考时间也是请求的一部分的话,你也要在事务中加入思考时间。
7.一、思考时间
你能够对每个单独的请求分配一个固定的或随机的思考时间,默认状况下,随机思考时间是以value为基准的指数分布
<thinktime value=”20″ random=”true”></thinktime>
这儿思考时间就是以20为基准的指数分布。
1.3.0版本以后,还增长了一个范围的控制,能够设定一个最大最小值,随机时间就在最大最小值之间波动
<thinktime min=”2″ max=”10″ random=”true”></thinktime>
7.二、http协议
下面这个例子展现了http协议的多种上特性:get, post请求、基本的认证、事务、数据统计定义、状态请求(if modified since)
<sessions>
<session name=”http-example” probability=”70″ type=”ts_http”>
<request>
<http url=”/” method=”GET” version=”1.1″></http>
</request>
<request>
<http url=”/images/logo.gif” method=”GET” version=”1.1″ if_modified_since=”Fri, 14 Nov 2003 02:43:31 GMT”> </http>
</request>
<thinktime value=”20″ random=”true”></thinktime>
<transaction name=”index_request”>
<request>
<http url=”/index.en.html” method=”GET” version=”1.1″ ></http>
</request>
<request>
<http url=”/images/header.gif” method=”GET” version=”1.1″> </http>
</request>
</transaction>
<thinktime value=”60″ random=”true”></thinktime>
<request>
<http url=”/” method=”POST” version=”1.1″ contents=”bla=blu”> </http>
</request>
<request>
<http url=”/bla” method=”POST” version=”1.1″ contents=”bla=blu&name=glop”>
<www_authenticate userid=”Aladdin” passwd=”open sesame”/>
</http>
</request>
</session>
<session name=”backoffice” probability=”30″ …>
… </session>
</sessions>
在1.2.2版本以后,你还能够像下面这样增长任何的http头:
<request>
<http url=”/bla” method=”POST” contents=”bla=blu&name=glop”>
<www_authenticate userid=”Aladdin” passwd=”open sesame”/>
<http_header name=”Cache-Control” value=”no-cache”/>
<http_header name=”Referer” value=”http://www.w3.org/”/>
</http>
</request>
在版本1.3.0你能够从外部文件中读取post和put的内容。
<http url=’mypage’ method=’POST’ contents_from_file=’/tmp/myfile’ />
在版本1.3.1以后,你还能够手工的设定一个cookie,因为cookie不是可持久的,因此你要在每一个的请求中增长它个代码
<http url=”/”>
<add_cookie key=”foo” value=”bar”/>
<add_cookie key=”id” value=”123″/>
</http>
7.3~7.7暂略算法
8、高级配置
8.一、动态替换
8.二、读外部文件
8.三、动态变量
8.四、检查服务器反应
8.五、循环、选择(loop,if)
在1.3.0版本后,能够增长条件/非条件循环:
8.5.一、<for>:
from:初使值
to:最终值
incr:增量
var:保存当数值的变量名
<for from=”1″ to=”10″ incr=”1″ var=”counter”>
[...]
<request> <http url=”/page?id=%%_counter%%”></http> </request>
[...]
</for>
8.5.二、<repeat>
name:循环名
max_repeat:循环次数
注意:循环的最后一个标签是<while>或<until>
<repeat name=”myloop” max_repeat=”40″>
[...]
<request>
<dyn_variable name=”result” regexp=”Result: (.*)”/>
<http url=”/random” method=”GET” version=”1.1″></http>
</request>
[...]
<until var=”result” eq=”5″/>
</repeat>
8.5.三、<if>
1.3.1版本后,支持基于动态变量的if表达式
<if var=”tsung_userid” eq=”3″>
<request> <http url=”/foo”/> </request>
<request> <http url=”/bar”/> </request>
</if>
你能够用eq或neq来检查变量缓存
9、数据统计与报告
9.一、可用属性
request:每次请求的请求时间
page:一系列请求的请求时间(一个页面是不包含“思考时间“的一系列请求)
connect:链接创建的过程
reconnect:从新链接的数量
size_rcv:反应的大小(单位是byte)
size_sent:请求的大小(单位是byte)
session:一个用户会话的持续时间
users:同步用户的数量
connected:同步链接用户的数量
custom transaction:
9.二、设计
9.3生成报告
首先进行你测试的log日志目录(“~/.tsung/log/yyyyMMdd-hhmm/”),而后进行控制台,执行:”tsung_stats.pl”(完整命令/usr/lib/tsung/bin/tsung_stats.pl)
你甚至能够在测试运行的时候,生成统计数据。
使用-help能够察看全部的可变选项:
9.4tsung摘要
Available options:
[--help] (this help text)
[--verbose]
[--debug]
[--noplot] (don’t make graphics)
[--gnuplot <command>] (path to the gnuplot binary)
[--nohtml] (don’t create HTML reports)
[--logy] (logarithmic scale for Y axis)
[--tdir <template_dir>] (Path to the HTML tsung templates)
[--noextra (don’t generate graphics from extra data (os monitor, etc)
[--stats <file>] (stats file to analyse, default=tsung.log)服务器
9.5图形概述
可查看附件20110531-10:33.tar.gz(这是我本身运行后的文件的压缩包)
9.6tsung绘图
9.7RRDcookie