Tsung.xml 参数说明 准有帮助

分类:测试 |

介绍和安装 请使用查看其它文章: 


模拟真实的流量HTML或者图表的方式报告测试结果


<!-- loglevel:工具写日志的标识,级别默认是"info",长时间运行建议调整为error -->  

<!-- dumptraffic:运行的调试信息dump文件,如需要看脚本是否正确可以设置为"true",级别默认是"false",长时间运行建议调整为false -->  

<tsung loglevel="error" dumptraffic="false" version="1.0">  
  
  <!-- 集群Client的设置 -->  
  <clients>  
    <!-- host:填别名,需要先去host文件配置,如:  
    127.0.0.1        localhost        
    10.0.0.252       s252        
    10.0.0.52        sl52  
    -->  
    <!-- weight: 节点上面用户的比例,一般设置为1即可 -->  
    <!-- maxusers: 一般设置为800,3000即可,根据机器配置来设置大小 -->  
    <!-- cpu: 根据机器硬件配置来设置,如果是4核CPU,最佳设置为3,以此类推 -->  
    <client host="localhost" weight="1" maxusers="3000" cpu="3"/>  
  </clients>  
  
    <!-- 集群servers的设置 -->  
    <servers>        
      <!-- host: 填别名,需要先去host文件配置 -->  
      <!-- port: 填可用对外端口,一般8080 -->   
      <!-- type: 协议类型,tsung支持tcp/udp,根据自己的需要 -->   
      <server host="localhost" port="8080" type="tcp"></server>   
   </servers>   
    <!-- 监控(cpu, network, memory). 使用erlang或SNMP,erlang是默认值,但是要保证监控的机器和server可以互相访问,装有erlang,否则用snmp -->   
    <monitoring>   
      <!-- host: 填别名,需要先去host文件配置 -->   
      <monitor host="localhost" type="erlang"></monitor>   
    </monitoring>   
    <!-- 负载场景设置 -->   
    <load>   
      <!-- phase:阶段,填数字即可,系统会按顺序执行,可是设置多个阶段组合场景 -->   
      <!-- duration:持续时段,填数字即可,单位是unit="minute"设置,是分钟也可设置小时,天,详细情况参考API -->   
      <!-- arrivalrate:单位新增虚拟用户数,填写数字即可,一般最大800,如果机器配置好,可自己调试最佳参数有效单位unit="second" 是秒,每秒虚拟300个虚拟用户,实际执行情况可能超过,也可能达不到,需要根据调试得到最佳参数 -->   
      <arrivalphase phase="1" duration="1" unit="minute">   
      <users arrivalrate="300" unit="second"></users>   
      </arrivalphase>  
    </load>  
  <!-- 脚本执行的基本参数设置 -->  
  <options><!-- 从.CSV文件读取测试数据,id必须唯一,如需要从数据库读取测试数据,请参考API -->  
    <option name="file_server" id='userdb' value="/root/.tsung/test_userid.csv"/>  
    <option name="file_server" id='user' value="/root/.tsung/test_user.csv"/>  
    <!-- 设置用户请求的浏览器信息,probability为比重,总值为100 -->  
    <option type="ts_http" name="user_agent">  
      <user_agent probability="50">Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.8) Gecko/20050513 Galeon/1.3.21</user_agent>  
      <user_agent probability="50">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>  
  <!-- 测试脚本,session's的probabilities 参数总和必须为100,在每个-->  
  <sessions>  
    &sessions1;  
    &sessions2;  
    &sessions3;  
    &sessions4;  
 </sessions>  
  
</tsung>

<!-- 测试脚本的设置 -->  

<sessions>  
    <!-- name:脚本名称,唯一值 -->  
    <!-- probability:压力比重,总值100,可按需求设置 -->  
    <!-- type:这里根据测试对象来,我这里是http请求,其他类型参考API -->  
    <session name="msg_statistics" probability="100" type="ts_http">  
        <!-- 变量的设置 -->  
        <!-- sourcetype:根据需求,参考API,我这里是csv文件 -->  
        <!-- fileid:根据tsung.xml内的option文件操作的id一致 -->  
        <!-- order:我这里选择的random随机,根据需求参考API -->  
        <!-- name:这个变量的名称 -->  
        <setdynvars sourcetype="file" fileid="user" order="random">  
            <var name="userid" />  
        </setdynvars>  
          
        <!-- sourcetype:根据需求,参考API,我这里是csv文件 -->  
        <!-- fileid:根据tsung.xml内的option文件操作的id一致 -->  
        <!-- order:我这里选择的random随机,根据需求参考API -->  
        <!-- name:这个变量的名称 -->  
        <setdynvars sourcetype="file" fileid="userdb" order="random">  
            <var name="user" />  
        </setdynvars>  
          
        <!-- sourcetype:根据需求,参考API,random_number随机数字 -->  
        <!-- start:开始数字 -->  
        <!-- end:结束数字 -->  
        <!-- name:这个变量的名称 -->  
        <setdynvars sourcetype="random_number" start="1" end="40">  
            <var name="rndint" />  
        </setdynvars>       
  
        <!-- repeat:定义一个循环,name:名称 -->  
        <repeat name="myloop">  
            <!-- transaction:定义一个事物,name:名称 -->  
            <transaction name="notifications_send">  
                <!-- request:定义一个请求,subst="true"是提交类型的请求 -->  
                <request subst="true">  
                    <!-- http:定义一个http请求内容,根据自己的需求添加 -->  
                    <http url='http://test.rest.msg.sdo.com:80/msg_statistics/%%_userid%%/new_count' content_type='application/json' method='GET' contents=''>  
                        <http_header name="EncType" value="application/json"/>  
                        <http_header name="Mode" value="HTML"/>  
                    </http>  
                </request>  
            </transaction>  
  
            <!-- until:定义一个循环的出口条件,这个变量rndint永远不会为0,为了让虚拟用户不停循环 -->  
            <until var="rndint" eq="0"/>  
        </repeat>       
    </session>  
</sessions>

增加http请求脚本示例:

<pre name="code" class="html"><pre name="code" class="html"><session name="http_send" probability="100" type="ts_http">  
  
    <setdynvars sourcetype="random_number" start="01" end="50">  
  
        <var name="rndint" />  
  
    </setdynvars>  
  
    <for from="1" to="800000" var="i">  
  
        <transaction name="queryWalletBalance">  
  
            <request subst="true">  
  
                <http url="http://xxx:8000/mpay/xx.html" method="POST" version="1.1" contents="userId=deng0000%%_rndint%%&userIdType=1&spId=0&appId=10&businessCode=196&costType=107&queryMode=01&eventTimestamp=20110304111111&signMethod=1&sign=32534535"> </http>  
  
            </request>  
  
              
            <thinktime value="0.1" random="true"></thinktime>  
  
        </transaction>  
  
    </for>  
  
</session>

  

<session name="http_send" probability="100" type="ts_http">  
    <setdynvars sourcetype="random_number" start="01" end="50">  
        <var name="rndint" />  
    </setdynvars>  
    <for from="1" to="800000" var="i">  
        <transaction name="queryWalletBalance">  
            <request subst="true">  
                <http url="http://10.130.70.13:8089/mpay/queryWalletBalance.do" method="POST" version="1.1" contents="userId=deng0000%%_rndint%%&userIdType=1&spId=0&appId=10&businessCode=196&costType=107&queryMode=01&eventTimestamp=20110304111111&signMethod=1&sign=32534535">   
                </http>  
            </request>   
            <thinktime value="0.1" random="true">  
            </thinktime>   
        </transaction>  
    </for>   
</session>


<!-- 负载场景设置 -->  

  

<load>

  

<!--   第1阶段,持续10分钟,每秒2个用户 -->  

  

<arrivalphase phase="1" duration="10" unit="minute">  
  
<users interarrival="2" unit="second"></users>  
  
</arrivalphase>

<!--   第2阶段,持续10分钟,每秒1个用户 -->  

  

<arrivalphase phase="2" duration="10" unit="minute">  
  
<users interarrival="1" unit="second"></users>  
  
</arrivalphase>

  

<!--   第3阶段,持续10分钟,每秒10个用户 -->  

  

<arrivalphase phase="3" duration="10" unit="minute">  
  
<users interarrival="0.1" unit="second"></users>  
  
</arrivalphase>

  

<!--   第4阶段,持续10分钟,每秒10个用户 -->  

  

<arrivalphase phase="4" duration="10" unit="minute">  
  
<users arrivalrate="10" unit="second"></users>  
  
</arrivalphase>
</load>


成果, 压测生成的订单:

image.png