tsung压力测试——tcp测试tsung.xml配置模版说明
Tsung解析Tsung.xml配置文件 见http://blog.csdn.net/libing1991_/article/details/47684433
<?xml version="1.0"?> <!DOCTYPE tsung SYSTEM "/usr/local/share/tsung/tsung-1.0.dtd"> <tsung loglevel="info" dumptraffic="true" version="1.0"> <!-- weight 集群时有用--> <!-- maxusers 产生测试用户数--> <!-- Client side setup --> <!-- 集群Client设置 --> <!-- host必须是主机名,不能是IP地址 --> <!-- weight: 节点上面用户的比例,一般设置为1即可 --> <!-- maxusers: 一般设置为800,3000即可,根据机器配置来设置大小 超过这个数目 会自动开启更多的节点--> <!-- cpu: 根据机器硬件配置来设置,如果是4核CPU,最佳设置为3,以此类推 --> <clients> <client host="localhost" weight="1" maxusers="10" use_controller_vm="true"/> </clients> <!-- 测试服务器配置信息 --> <servers> <server host="localhost" port="8102" type="tcp"></server> </servers> <!-- load段可配置访问的负载,访问可以配成多个阶段,由phase值指定。duration是测试持续时间,unit是单位 users段的maxnumber限制了生成的最大用户数,interarrival=”0.02”表示0.02秒产生一个新用户,用户按照session的配置顺 序执行session中的request --> <!-- 负载场景设置 --> <!-- phase:阶段,填数字即可,系统会按顺序执行,可以设置多个阶段组合场景 --> <!-- duration:持续时段,填数字即可,单位是unit="minute"设置,是分钟 也可设置小时,天,详细情况参考API --> <!-- arrivalrate:虚拟用户数,填写数字即可,一般最大800,如过机器配置好,可自己调试最佳参数 有效单位unit="second" 是秒,每秒虚拟300个虚拟用户,实际执行情况可能超过,也可能达不到,需要根据调试得到最佳参数 --> <!-- interarrival: 时间间隔默认是2秒产生一个用户 这个选项可以和arrivalrate互相调换 --> <!-- maxnumber: 这个是设置最大用户数,所产生的总用户数不会超过这个 --> <load> <arrivalphase phase="1" duration="1" unit="minute"> <users arrivalrate="2" unit="second"></users> </arrivalphase> </load> <sessions> <!-- 测试接口配置信息 --> <session probability="100" name="raw" type="ts_raw"> <!-- 随机生成15位数 --> <!-- 调用这个随机生成数 %%_iemi_%% ,前提 <request> 必须配 subst="true"--> <setdynvars sourcetype="random_string" length="15"> <var name="imei" /> </setdynvars> <!-- 这里可以配置多个事物,每个事物代表一个接口请求--> <transaction name="login"> <request subst="true"> <!-- 向 服务器 发送 data 这段 数据 --> <raw data="[SG*%%_imei%%*000D*LK,50,100,100]" ack="no_ack"></raw> </request> </transaction> <!-- 会话持续时间 10 秒,即10后tcp断开连接 --> <thinktime value="10"/> </session> </sessions> </tsung>
配置文件
打开 http_simple.xml ,下面来讲几个关键的配置。
clients
用户产生的方式
<clients>
<client host="localhost" use_controller_vm="true" maxusers="30000"/>
</clients>
tsung运行时可以由很多的虚拟机组成,client配置指明这个client机器上最多生成的用户数,如果use_controller_vm为true的话,那么当用户数达到maxusers,tsung会自动生成新的VM。
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
monitoring
系统监控服务,配置完后可获取被测server的cpu,内存,负载,数据库的相关信息。可以配置成erlang的监控服务和snmp的监控服务。
<monitoring>
<monitor host="garden" type="erlang">
<mysqladmin port="3306" username="root" />
</monitor>
</monitoring>
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。
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信息。
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的具体信息。