阅读 85

测试篇-压测工具tsung详解

前言

上一篇进行了tsung的安装并演示了样例,本文会对样例中涉及到的配置参数进行详细说明。当然,除此之外,也会对测试报告进行解读。

tsung文档说明

tsung的测试用例是使用xml定义的,这里先贴出最xml文件结构并对其进行说明。官方文档:

tsung.erlang-projects.org/user_manual…

文件结构

<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
<!--顶级标签-->
<tsung loglevel="notice" version="1.0">
  <!--客户端标签-->
  <clients>  
  </clients>
  <!--服务端标签-->
  <servers>
  </servers>
  <!--监控标签-->
  <monitoring>
  </monitoring>
  <!--负载标签-->
  <load>
  </load>
  <!--选项标签-->
  <options>
  </options>
 <!--过程标签-->
 <sessions>
 </sessions>
</tsung>
复制代码

文件编码

默认的文件编码是utf-8,可以如下指定

<?xml version="1.0" encoding="ISO-8859-1"?>
复制代码

顶级标签<tsung>

<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
<!--顶级标签-->
<tsung loglevel="notice" version="1.0">
</tsung>
复制代码

参数说明:

  • dumptraffic:true:所有的通信都会被记录,注:这会大大降低tsung速度,一般是用于调试;light:只转储前44字节
  • loglevel: 日志级别,emergency/critical/error/warning(推荐)/notice (默认)/info/debug(需要察看详细信息时,注:使用这个属性时要用make debug重新编译tsung)

客户端标签<clients>

  • 基础设置:

    <clients>
      <client host="localhost" use_controller_vm="true" maxusers="3000"/>
    </clients>
    复制代码

这将在与控制器相同的主机和同一Erlang虚拟机上启动加载。

  • 高级设置

    <clients>
      <client host="tsung-node1" weight="1" maxusers="800">
        <ip value="192.168.1.100"></ip>
        <ip value="192.168.1.101"></ip>
      </client>
      <client host="tsung-node2" weight="3" maxusers="600" cpu="2"/>
    </clients>
    复制代码

    几个虚拟IP可以用来模拟更多的机器。当负载平衡器使用客户机的IP在服务器集群之间分配流量时,这非常有用。其实也是突破单个主机端口范围为1024 ~ 65535的方式。或N个IP,理论可对外建立连接数为:N*(65535-1024 )

    在这个例子中,Tsung集群中使用了第二台机器,具有更高的权重和2个cpu。将使用两个Erlang虚拟机来利用CPU的数量。

    经测试,如果host不是localhost,需要去/etc/hosts进行配置,并且要求能够用私钥ssh到本机,并且成功连通一次,留下记录在 ~/.ssh/known_hosts上。

    192.168.1.111 tsung-node1
    192.168.1.112 tsung-node2
    复制代码

    上面的多个IP,需保证能正常的分配流量,即外面可以通过多个IP访问同一台主机。这里贴一下配置。

    [root@localhost test]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=static
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    IPV6_ADDR_GEN_MODE=stable-privacy
    NAME=eth0
    UUID=a5b45d89-c03a-4742-ac5f-dd4480eff933
    DEVICE=eth0
    ONBOOT=yes
    IPADDR=192.168.1.100
    IPADDR1=192.168.1.101
    IPADDR2=192.168.1.102
    NETMASK=255.255.255.0
    GATEWAY=192.168.1.1
    DNS1=8.8.8.8
    DNS2=8.8.4.4
    
    复制代码

    可配置多个静态IP,IPADDR/IPADDR1/IPADDR2

    image-20200820144340608

参数说明:

  • weight: 节点上面用户的比例,一般设置为1即可
  • maxusers: 默认值为800,一般设置为800,3000即可,根据机器配置来设置大小
  • cpu: 根据机器硬件配置来设置,如果是4核CPU,最佳设置为3,以此类推
  • use_controller_vm=true与maxusers="3000"表示:如果客户端模拟生成的用户超过3000,则将开启一个新的erlang虚拟机(VM),一般maxusers设置为800-3000

服务端标签<servers>

<servers>
  <server host="192.168.1.10" port="18080" type="tcp" weight="1"></server>
  <server host="192.168.1.10" port="18081" type="tcp" weight="1"></server>
  <server host="192.168.1.20" port="18080" type="tcp" weight="4"></server>
</servers>
复制代码

参数说明:

  • host: 填别名,需要先去host文件配置

  • port: 填可用对外端口,一般8080

  • typeL:协议类型,tsung支持tcp/udp,根据自己的需要

  • weight: 服务器权重,默认1

监控标签<monitoring>

Tsung能够使用多个与远程代理通信的后端来监视远程服务器。这在<monitoring>部分中配置。可用的统计信息包括:CPU活动、平均负载和内存使用情况。

  • erlang

    <monitoring>
      <monitor host="node1" type="erlang"></monitor>
      <monitor host="db" type="erlang"></monitor>
    </monitoring>
    复制代码

    受监控的计算机需要通过网络访问,并且必须允许erlang通信(没有防火墙更好)。SSH(或rsh)需要配置为允许在没有密码的情况下进行连接。必须在所有节点上使用相同版本的Erlang/OTP,否则它可能无法正常工作!

  • snmp

    <monitoring>
      <monitor host="node1" type="erlang"/>
      <monitor host="db" type="snmp">
        <snmp version="v2" community="mycommunity" port="11161"/>
      </monitor>
    </monitoring>
    复制代码

    如果首选snmp监视,则type关键字snmp可以替换erlang关键字。它们可以混合。

  • munin

负载标签<load>

  • 样例一

    <load>
      <arrivalphase phase="1" duration="10" unit="minute">
        <users interarrival="2" unit="second"></users>
      </arrivalphase>
    </load>
    复制代码

使用此设置,在测试的前10分钟内(由duration和unit指定),将每隔2秒(由interarrival和unit指定)创建一个新用户。测试将在所有用户结束会话后结束。

  • 样例二

    <load>
        <arrivalphase phase="1" duration="10" unit="minute">
          <users arrivalrate="10" unit="second"></users>
        </arrivalphase>
    </load>
    复制代码

    使用此设置,在测试的前10分钟内(由duration和unit指定),将每秒(unit指定)创建10个(由interarrival指定)新用户。测试将在所有用户结束会话后结束。

  • 样例三

    <load>
        <arrivalphase phase="1" duration="10" unit="minute">
          <users maxnumber="100" arrivalrate="10" unit="second"></users>
        </arrivalphase>
        <arrivalphase phase="2" duration="10" unit="minute">
          <users maxnumber="200" arrivalrate="10" unit="second"></users>
        </arrivalphase>
    </load>
    复制代码

    这里多了个maxnumber参数,在这种情况下,第一阶段只会创建100个用户,而在第二阶段将创建200个用户。其中阶段由phase指定,每个阶段创建用户数由maxnumber指定。

  • 参数说明:

    • phase:阶段,填数字即可,系统会按顺序执行,可是设置多个阶段组合场景
    • duration:持续时段,填数字即可,单位是unit="minute"设置,是分钟也,可设置时/分/秒
    • unit:时间单位可以是second,minutehour
    • arrivalrate:虚拟用户数,填写数字即可,一般最大800,如过机器配置好,可自己调试最佳参数,有效单位unit="second" 是秒,每秒虚拟300个虚拟用户,实际执行情况可能超过,也可能达不到,需要根据调试得到最佳参数

参数设置标签<options>

用于设置全局参数的。

<options>
    <option name="thinktime" value="3" random="false" override="true"/>
    <option name="ssl_ciphers"W
            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>
</options>
复制代码

可以指定建立TCP连接的超时时间(毫秒)。默认值是无穷大。

<option name="connect_timeout" value="5000" />
复制代码

您还可以全局启用TCP REUSEADDR选项:

<option name="tcp_reuseaddr" value="true" />
复制代码

您可以指定Tsung尝试重试的次数。默认值为3。

<option name="max_retries" value="5" />
复制代码

用于设置空闲超时(用于“parse”和“local”ack)和全局ack超时(用于“global”ack)。默认情况下,空闲超时为10分钟(600000),全局确认超时为无穷大。此值可以这样更改:

<option name="idle_timeout" value="300000"></option>
<option name="global_ack_timeout" value="6000000"></option>
复制代码

hibernate选项用于减少模拟用户在thinktimes期间的内存消耗。默认情况下,thinktimes超过10秒时将激活休眠。此值可以这样更改:禁用为infinity

<option name="hibernate" value="5"></option>
复制代码

您可以限速-带宽

<option name="rate_limit" value="1024"></option>
复制代码

指定商品范围:不建议

<option name="ports_range" min="1025" max="65535"/>
复制代码

特殊参数:如http请求头

<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>
复制代码

会话标签<sessions>

定义请求会话的。

  • 样例一
 <sessions>
  <session name="http-example" probability="100" type="ts_http">
  <transaction name="hello">
     <request subst="true">
        <http url="/" method="GET">
        </http>
      </request>    
   </transaction>
  </session>
 </sessions>
复制代码

这里定义了一个会话,会话名称为http-exameple,请求权重为100,请求类型为http。

tsung统计报告

一些常用的名称解析:

  • request:每个请求的反应时间
  • page:每一系列请求的反应时间(a page是一组不包含think-time的一组请求)
  • connect:连接建立用的时间
  • reconnect:重新连接的次数
  • size_rcv:反应的大小(单位是byte)
  • size_sent:请求的大小(单位是byte)
  • session:用户会话时间
  • users:同步用户数
  • connected:同步连接用户数

主要统计信息

Tsung统计数据是平均每十秒重置一次,所以这里的响应时间(连接、请求、页面、会话)是指每十秒的平均响应时间。

image-20200820162507881

  • connect:每个连接持续时间

    统计项说明
    Hightest 10sec mean连接最长持续时间
    Lowest 10sec mean连接最短持续时间
    Highest rate每秒最高建立连接速率
    Mean平均每个连接持续时间
    Count总连接数
  • page:每个请求集合的响应时间,(一个页面表示一组没有被thinktime间隔的请求)

  • request: 表示 每个请求的响应时间

    统计项说明
    Hightest 10sec mean请求最长响应时间
    Lowest 10sec mean请求最短响应时间
    Highest rate请求最快发送速率
    Mean平均每个请求响应时间
    Count总请求数
  • session: 表示 每个用户会话持续时间

    统计项说明
    Hightest 10sec mean会话最长持续时间
    Lowest 10sec mean会话最短持续时间
    Highest rate每秒最高进行会话速率
    Mean平均每个会话持续时间
    Count总会话数

事务统计

image-20200820164021970

网络吞吐量

image-20200820164040367

size_rcv: 表示 响应请求数据量

size_sent:表示 发送请求数据量

统计项说明
Hightest rate每秒最高 响应/发送 请求数据量
Total响应/发送 请求总数据量

计数统计

image-20200820164352000

统计项说明
connected表示会话开始且尚未结束,并且已建立连接的最大用户数
finished_user_count表示已经完成会话的最大用户数
users表示会话开始且尚未结束的最大用户数
users_count表示Tsung总共生成的用户总数

错误统计

image-20200820164414935

统计项说明
Error_abort_max_conn_retries重新尝试连接错误
Error_connect_timeout连接超时错误
Error_connect_nxdomain不存在的域错误
Error_unknown位置错误
Highest rate发生错误最高速率
Total number发生该错误总个数

服务监控

image-20200820164523499

http返回状态码统计

image-20200820164548455

200:表示客户端请求已成功响应

统计项说明
Highest rate状态码返回最高速率
Total number返回状态码的总个数

统计图

image-20200820164714361

image-20200820164722952

image-20200820164740710

image-20200820164749133

image-20200820164756596

image-20200820164802651

小结

本文主要是对tsung常用配置进行说明,并对一些统计指标进行介绍,下一篇开始进行实战。

相关文章

测试篇-压力测试工具tsung安装与简单使用