date: 2017-06-27 09:11:14
安装
安装 erlang 环境:
apt install erlang
安装 gnuplot:
apt install gnuplot # tsung_stats.pl 需要用到的 gnuplot
安装 tsung(http://tsung.erlang-projects.org/dist/):
wget http://tsung.erlang-projects.org/dist/tsung-1.6.0.tar.gz
tar -zxf tsung-1.6.0.tar.gz
cd tsung-1.6.0
./configure # 配置,生成 Makefile 文件
make -j4
make install
下载并安装perl Template,用于生成报告模版:
wget http://cpan.org/modules/by-module/Template/Template-Toolkit-2.24.tar.gz
tar -zxvf Template-Toolkit-2.24.tar.gz
cd Template-Toolkit-2.24
perl Makefile.PL
make
make test
make install
说明
示例文件:
/root/tsung-1.6.0/examples
拷贝示例:
mkdir /root/http_simple
cd /root/http_simple
cp /root/tsung-1.6.0/examples/examples/http_simple.xml ./
测试:
tsung -f http_simple.xml start # 默认使用 ~/.tsung/tsung.xml, 可指定
查看实时记录:
tail -f ~/.tsung/log/20170627-0908/tsung.log
生成报表:
/usr/lib/tsung/bin/tsung_stats.pl --stats ~/.tsung/log/20170627-0908/tsung.log
# http_simple 目录下生成3个目录和1个 log 文件,其中 images 目录下就是报表图片
配置文件
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="api.evcos.wm-motor.com" port="80" type="tcp"></server>
</servers>
也可以配置成集群:
<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
https:
<servers>
<server host=”web_server_name” port=”443″ type=”ssl“></server>
</servers>
https://jackiechen.org/2015/12/04/use-tsung-to-test-https-site/
monitoring
<monitoring>
<monitor host="garden" type="erlang">
<mysqladmin port="3306" username="root" />
</monitor>
</monitoring>
系统监控服务,配置完后可获取被测server的cpu,内存,负载,数据库的相关信息。可以配置成erlang的监控服务和snmp的监控服务。
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>
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的具体信息。
生成报告
/usr/lib/tsung/bin/tsung_stats.pl --stats /root/.tsung/log/20170627-1144/tsung.log
查看报告
report.html
注意
tsung测试HTTP服务器时,GET或POST方法有时需配置参数。
参数固定的情况:
GET:
<http url='http://www.xxx/v1/xxx?var=3&b=4' method='GET'/>
注意,如果多个变量连接必须用实体& 而不是单独的 '&'
POST:
<http url='http://www.xxx/v1/xxx' method='POST' contents='username=admin&passwd=123456'/>
注意:post方法中不需要写实体,直接用'&'
文档:
Tsung 1.6.0 documentation
Load Testing using Tsung
Test the Performance and Scalability of Your Web Applications With Tsung
压力测试工具tsung用法简介