一、默认编码:utf-8,你可以根据需要进行修改,如
<?xml version=”1.0″ encoding=”ISO-8859-1″?>
二、xml文件的结构
先整体了解xml文件的结构,它是由下面这些标签构成
2.1顶级标签<tsung>
2.2客户端标签<clients>
2.3服务端标签<servers>
2.4监控标签<monitor>
2.5负载标签<load>
2.6选项标签<options>
2.7过程标签<sessions>
三、顶级标签:
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.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
四、监控标签
tsung监控多个远程服务器, 每个远程服务器都是由多个用远程代理进行交互的后台。这个可以在<monitor>标签中配置。可统计的数据有:cpu使用情况,平均的工作量情况,内存利用情况。
这儿注意:你可以从作业调试器得到监控结点,如:
<monitor batch=”true” host=”torque” type=”erlang”></monitor>
这儿支持多种类型的远程代理(默认是erlang)。
4.1
五、负载标签
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”。
六、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>
七、session标签
session定义了场景本身,它描述了要运行的请求。
每个session都有一个指定的probality属性,这个被用来决定一个新用户要运行哪个session,所有session的probability属性和为100。
一个事务是一种手工统计数据的一种方式。比如说你想知道你网站登录页面的反应时间,你就需要把这个页面的所有请求(html和内嵌的图片等)放到这个事务里面。在下面的例子中你就会看到,名为index_request的事务统计数据和报告。这儿要注意的是,如果思考时间也是请求的一部分的话,你也要在事务中加入思考时间。
7.1、思考时间
你可以对每一个单独的请求分配一个固定的或随机的思考时间,默认情况下,随机思考时间是以value为基准的指数分布
<thinktime value=”20″ random=”true”></thinktime>
这儿思考时间就是以20为基准的指数分布。
1.3.0版本之后,还增加了一个范围的控制,可以设定一个最大最小值,随机时间就在最大最小值之间波动
<thinktime min=”2″ max=”10″ random=”true”></thinktime>
7.2、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.1、动态替换
8.2、读外部文件
8.3、动态变量
8.4、检查服务器反应
8.5、循环、选择(loop,if)
在1.3.0版本后,可以增加条件/非条件循环:
8.5.1、<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.2、<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.3、<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.1、可用属性
request:每次请求的请求时间
page:一系列请求的请求时间(一个页面是不包含“思考时间“的一系列请求)
connect:连接建立的过程
reconnect:重新连接的数量
size_rcv:反应的大小(单位是byte)
size_sent:请求的大小(单位是byte)
session:一个用户会话的持续时间
users:同步用户的数量
connected:同步连接用户的数量
custom transaction:
9.2、设计
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.7RRD
转自:http://blog.programfan.info/tsung/178.jsp