Tsung在实际使用过程中的一些问题总结

对于海外服务器集群压力测试,基于erlang开发的Tsung是一款现成的工具,也满足了测试所需的基本要求。

1)Tsung的安装

首先必须安装erlang 版本当时用的是8.3 因为当时服务器已经安装了erlang 所以这里就不详细叙述了 只是erlang安装过程需要依赖很多组件 这里需要补充完整

  1. wget http://erlang.org/download/otp_src_19.1.tar.gz
  2. tar xzf otp_src_19.1.tar.gz
  3. cd到目录下 ./configure --prefix=/home/erlang
  4. yum install gcc
  5. yum install ncurses-devel
  6. yum install openssl-devel
  7. yum install java-devel
  8. yum install unixODBC-devel
  9. yum install gcc-c++
  10. ./configure --with-ssl=/home/ssl/ --prefix=/home/erl
  11. make
  12. make install
  13. ln -s /home/erlang/bin/erl /usr/local/bin/erl

 除了erlang之外 还需要一些其他组件,如果只是单纯的测试可以不安装

  1. perl5:生成报表的脚本支持环境 yum install perl -y
  2. gnuplot:报表统计图片生成工具 yum install perl5 gnuplot
  3. libtemplate-perl: 生成报表所需的画图模板库

 去官网下载tsung-1.7.0.tar.gz(亲测可用) 也可以直接wget http://tsung.erlang-projects.org/dist/tsung-1.7.0.tar.gz

  1. chmod 755 tsung-1.7.0.tar.gz
  2. tar –xvzf tsung-1.7.0.tar.gz
  3. cd tsung-1.7.0
  4. ./configure --prefix=/usr/local/tsung
  5. 注意 这里会报错 原因是找不到可执行的erl
  6. 需要配置一下erl的安装路径export PATH=$PATH:/otp/erlang/bin
  7. make
  8. make install
  9. ln -s /usr/local/tsung/bin/tsung /usr/bin/
[root@izwz90zkx5ohgkq04rpm4az tsung]# find / -name erl
/otp/erlang/bin/erl

安装完毕之后 tsung -version查看版本是否安装成功 sh tsung启动Tsung

将配置好的tsung.xml放到指定目录  启动 tsung -f tsung.xml start

2)xml配置

<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/local/tsung/share/tsung/tsung-1.0.dtd">
<tsung loglevel="notice" dumptraffic="false" version="1.0">

<!-- weight 集群时有用-->
<!-- maxusers 产生测试用户数-->
<!-- Client side setup -->
<!-- 集群Client设置 -->
<!-- host必须是主机名,不能是IP地址 -->
<!-- weight: 节点上面用户的比例,一般设置为1即可 -->
<!-- maxusers: 一般设置为800,3000即可,根据机器配置来设置大小 超过这个数目
   会自动开启更多的节点-->
<!-- cpu: 根据机器硬件配置来设置,如果是4核CPU,最佳设置为3,以此类推 -->

<clients>
<!-- <client host="localhost" use_controller_vm="true" maxusers="1000" /> -->
	<client host="testuser1" weight="1" maxusers="800" use_controller_vm="true" cpu="3" />
	<client host="testuser2" weight="1" maxusers="800" use_controller_vm="true" cpu="3" />
	<client host="testuser3" weight="1" maxusers="800" use_controller_vm="true" cpu="3" />
</clients>
 
<servers>
	<server host="这里是服务器域名" port="900" type="tcp" />
</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="60" unit="second">
		<users maxnumber="1200" arrivalrate="20" unit="second" />
	 </arrivalphase>
 </load>

<sessions>
<!-- 测试接口配置信息 -->
<session name="websocket" probability="0" type="ts_websocket">

    <!-- 随机生成15位数   -->
    <!-- 调用这个随机生成数 %%_iemi_%%    ,前提 <request> 必须配 subst="true"-->
    <setdynvars sourcetype="random_string" length="15">
          <var name="imei" />
    </setdynvars>

	<request subst="true">
		<websocket type="connect" path="/websocket"></websocket>
	</request>
	<request>
		<websocket type="message" ack="no_ack" frame="text">{type:1,userId:"13588701163"}</websocket>
	</request>
	<request>
		<websocket type="close"></websocket>
	</request>

    <transaction name='getlist'>
      <request subst="true">
         <http url="/comment/addComment" method="POST" contents = "item_type=image&amp;item_id=%%_itemid%%&amp;content=%%_content%%"></http>
      </request>
    </transaction>

</session>
<!-- 可配置多个子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的具体信息。 -->
<session name="http" probability="100" type="ts_http">

    <setdynvars sourcetype="random_number" start="60000" end="90000">
      <var name="itemid" />
    </setdynvars>
	<setdynvars sourcetype="random_number" start="1" end="4">
      <var name="style" />
    </setdynvars>
	<setdynvars sourcetype="random_number" start="1" end="2">
      <var name="sex" />
    </setdynvars>
    <setdynvars sourcetype="random_string" length="10">
          <var name="imei" />
    </setdynvars>
	<setdynvars sourcetype="random_number" start="100000" end="900000">
      <var name="uidx" />
    </setdynvars>
	<transaction name='test_create'>
	  <request subst="true">
		 <http url="/game/create_role" method="POST" contents = "phone=0;style=%%_style%%;sex=%%_sex%%;random_num=%%_itemid%%;server=0;time=1558525433;name=%%_imei%%;uidx=%%_uidx%%"></http>
	  </request>
	</transaction>
</session>

</sessions>
</tsung>

生成的文件 可以在指定目录查看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值