TSUNG测试HTTP协议详解和实例【原创】

转载 2015年07月07日 10:57:04

TSUNG用于多种协议压测
 

特点:
1.  高性能,支持虚拟100万的轻量级进程。
2.  可用于测试多种协议:目前可以用来测试HTTP, WebDAV, SOAP, PostgreSQL, MySQL, LDAP, and Jabber/XMPP等。
3.  模拟真实用户,利用os IP别名技术在单个机器上使用多个IP。
4.  模式真实流量,支持虚拟用户发呆时间以及随机的概率分布。
5.  提供服务器监控能力
6.  多节点集群能力,能够利用多台机器制造更高的并发,并提供分布式系统的容错能力、保证数据一致性。

 
安装和配置:(略,百度一堆)
 
这里简要介绍TSUNG一些关键设置。
 

<?xml version="1.0" encoding="ISO-8859-1"?>

这里可以设置编码,默认是utf-8.
 
 
 

<tsung loglevel="debug" dumptraffic="true" version="1.0">

这里设置日志级别,会影响到tsung的性能。级别有下面几个:

  •   emergency
  •   critical
  •   error
  •   warning
  •   notice (default)
  •   info
  •   debug

官方推荐高负载时候使用warning级别。
Dumptraffic选项是设置为”true”,所有通信都详细记录到日志文件,这会严重影响tsung性能,一般是调试的时候使用。也可以使用 dumptraffic="light"  ,这样会只记录前面44个字节的内容。


  <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>
 

这里是配置虚拟IP,可以用来测试负载均衡的集群构架。这里是一个tsung集群。第一部测试服务器虚拟两个IP,权重是1。产生的最大用户数为800。
第二部服务器权重是3,产生的最大用户数是600。使用两个CPU,这里最好设置每个CPU对应一个erlang的虚拟机。
这里的权重意思是说:第一步服务器执行一次用户操作,第二部服务器执行三次。而这里第二部用两个CPU,也就是说每个CPU的权重是1.5.
LINUX下单进程开启超过1024个套接字限制,我们设置Maxusers这个参数后,如果测试时候单进程模拟的用户使用的socket超过这个限制,那么TSUNG就启动启动一部erlang虚拟机来继续处理这批用户。当然,socket在linux看来也是一个文件,而每个CPU能打开的文件数目是有限制的,如果Maxusers设置太大,报错too many open files,那么这个时候就需要设置一下 ulimit –n
 
 

<servers>
    <server host="sso.gleasy.cn" port="8082" type="tcp"></server>
</servers>

这里设置服务器入口,如果配置多个server,那么请求会轮询分配到这几个服务器上。
  
 

<options>
  <option name="file_server" id='userdb' value="user_list.csv"/>
  <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>

第一个option这里设置读取user_list.csv这个文件里面的用户名和密码,id设置为userdb.
第二个option这里设置浏览器的agent,可以按照自己的需要,配置对于的agent和出现的比率。
 
 

<monitoring>
    <monitor host="geronimo" type="erlang"></monitor>
    <monitor host="bigfoot-1" type="erlang"></monitor>
    <monitor host="bigfoot-2" type="erlang"></monitor>
    <monitor host="f14-1" type="erlang"></monitor>
    <monitor host="f14-2" type="erlang"></monitor>
    <monitor host="db" type="erlang"></monitor>
  </monitoring>

Monitor是用来获取远程服务器后台资源使用信息的。包括CPU,LOAD负载和内存使用等。需要远程服务器安装了相同版本的erlang。并且远程端口必须可访问。最好是没有防火墙。当然也可以使用其它手段获取远程服务器后台性能信息,比如配置SNMP或Munin。

 

<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>

这里可以设置压力产生的各个阶段,上面这段例子表示:第一阶段,持续10分钟,每两秒创建一个新用户;第二阶段,持续10分钟,每一秒产生一个新用户;第三阶段,持续1分钟,每0.1秒产生一个新用户。当然,也可以通过这样定义<user session="http-example" start_time="185" unit="second"></user>来指定每个阶段使用的session。
当所有用户执行完各自分配到的session 后【session就是后面定义的用户行为】,程序退出,本次压测结束。如果想在指定的时间点结束不去等待所有session完成,可以这样设置<load duration="1" unit="hour">。这样的话,1个钟头后,不管是否所有session执行完,都会结束本次测试。
 
下面是官网一个session的例子: 

<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&amp;name=glop">
       <www_authenticate userid="Aladdin"
                         passwd="open sesame"/></http>
    </request>
  </session>
 
  <session name="backoffice" probability="30" …>
  … </session>
</sessions>

 
 

  <session name="http-example" probability="70" type="ts_http">

这里是定义下面的session名为http-example,并且用户随机分配到该session的概率是70%,类似是HTTP。
 

<request> <http url="/" method="GET" version="1.1"></http> </request>

这里定义http请求,支持GET,POST这些用户行为。
 

<thinktime value="20"></thinktime>
<thinktime value="20" random="true"></thinktime>
<thinktime min="2" max="10" random="true"></thinktime>

这里是session的思考时间,第一个思考时间是20秒。第二个思考时间是按指数分布,平均值是20秒。第三个思考时间是随机在2到10范围内的值。
 

      <setdynvars sourcetype="file" fileid="userdb" delimiter=";" order="iter">
        <var name="user" />
        <var name="user_password" />
      </setdynvars>

之前在配置option的时候定义过打开user_list.csv这个数据文件,并且命名为uesrdb,上面这一段是在SESSION里面使用这个数据文件。定义变量user和user_password。
 
CSV文件的内容格式如下:

user_1;123456;
user_2;123456;
user_3;123456;

 
 
下面是明月用的一个简单的登录压测样本,协议是HTTP:

<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/local/share/tsung/tsung-1.0.dtd">
<tsung loglevel="debug" dumptraffic="true" version="1.0">
 
  <clients>
    <client host="localhost" weight="1" maxusers="10000" use_controller_vm="true"/>
  </clients>
 
  <servers>
    <server host="sso.gleasy.cn" port="8082" type="tcp"></server>
  </servers>
 
  <monitoring>
    <monitor host="localhost" type="erlang"/>
  </monitoring>
 
  <load>
    <arrivalphase phase="1" duration="1" unit="minute">
      <users maxnumber="100" interarrival="0.1" unit="second"/>
  </arrivalphase>
  </load>
 
  <options>
    <option name="file_server" id='userdb' value="user_list.csv"/>
    <option type="ts_http" name="user_agent">
      <user_agent probability="100">
        Some browser version 42
      </user_agent>
    </option>
  </options>
 
  <sessions>
    <session name="http_test_1" probability="100" type="ts_http">
 
 
      <setdynvars sourcetype="file" fileid="userdb" delimiter=";" order="iter">
        <var name="user" />
        <var name="user_password" />
      </setdynvars>
     
 
 
      <thinktime min="2" max="4"></thinktime>
 
      <request subst="true">
        <http url="http://sso.gleasy.cn:8082/auth/gclientLogin?account=%%_user%%&amp;psd=%%_user_password%%&amp;type=os" method="GET" version="1.1"/>
      </request>
      <thinktime value="5" random="true"/>
 
 
                <for from="1" to="10" incr="1" var="counter">
      <request subst="true">
        <http url="http://sso.gleasy.cn:8082/auth/beatheart/check" method="GET" version="1.1"/>
      </request>
      <thinktime value="3" />
                </for>
 
 
    </session>
</sessions>
 
</tsung>

 

 
用TSUNG来测试XMPP协议是个不错的选择,写个自动应答的机器人,就可以测试openfire这里即时通讯平台了。这方面的测试方法明月正在整理。

相关文章推荐

tsung测试http的get和post方法配置

tsung测试HTTP服务器时,GET或POST方法有时需配置参数。 这里只颜色固定参数情况 GET: http url=’http://www.csdn.com/develop/c...

【Tsung学习】4.脚本学习

使用代理记录器 记录器有三个插件 ︰ HTTP,WebDAV,PostgreSQL。 运行tsung-recorder -p ,而插件可以是 http,webdav 或 pgsqlPostgreS...

【Tsung学习】1.了解软件功能和运行环境

1.【了解软件功能和运行环境】 Tsung是指开源的、多协议的、分布式的压力测试工具。 Tsung的设计目的是模拟真实用户测试基于IP的服务器程序的伸缩性和性能,可以分步在多个客户机,并能够模拟成千上...

【Tsung学习】Tsung.xml配置文件

Tsung.xml配置文件 1.文件结构 默认的编码是UTF-8。你可以使用不同的编码,如: Tsung标签的场景 ... 如果您添加属性 dumptraffic ="true",所...

奔3的80后 - Qzone日志

|返回日志列表 转载自 455340109 2011年01月21日 12:09 阅读(loading...) 评论(0) 分类:杂侃   10年前我以为孩子是一个奇迹;10年后我知道母亲才是一个奇迹。...

Tsung解析Tsung.xml配置文件

Tsung.xml(HTTP)配置文件模板

Tsung指南[荐]

1、tsung安装 tsung 一个非常优秀的压力测试工具,在8核32G机器上可以轻易的产生每秒10000个并发请求,且占用的资源很少,当前版本1.5.0 使用erlang开发,需要先安装erla...

NGINX最新版正式增加了对reuseport (SO_REUSEPORT) 的支持,正式补丁代码分析

NGINX release 1.9.1 introduces a new feature that enables use of the SO_REUSEPORT  https://www.ngin...

Tsung测试统计报告说明

Tsung测试统计报告说明 **********************  report.html  *********************** 1.主要统计信息   Tsung统计数据是平...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)