# tsung
## 安装
操作系统: centos 7.0
erlang:otp_17
tsung: 1.6.0
tsung 主要包含测试功能、报表生成工具、测试结果比较工具。tsung的[安装](http://blog.youkuaiyun.com/jimesum1/article/details/7847924)依赖于erlang的安装,更详细的[安装](http://blog.sina.com.cn/s/blog_13cc013b50102v5nw.html)。tsung安装的依赖项和简单使用在链接里面有说明。erlang的安装依赖项请参考erlang的对应安装文档。tsung 安装并配置完毕后,测试功能就可以正常使用了。报表生成工具和测试结构比较工具不能正常使用。
### tsung直接依赖库
Template-Toolkit:2.26 (前面的安装文档中使用的2.24)
gnuplot:使用yum -y install gnuplot安装即可
其他依赖使用 “yum -y install 模块名” 安装
### 报表生成工具依赖库(安装Template-Toolkit之前就应该安装)
yum install -y perl-Image*
yum install -y perl-Pod*
yum -y install perl-CGI*
yum -y install perl-CPAN
yum install python-devel
### 测试结果比较工具(tsplot)依赖库
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libpng-devel harfbuzz-devel
easy_install six
easy_install python_dateutil
tsplot 依赖库[安装](https://www.douban.com/note/432207495/),在centos7.0环境下验证可用。
## 源码分析
系列[博客](http://jzhihui.iteye.com/category/205905),对于理解websocket for Tsung、tsung启动过程、压力生成过程、服务器监控、数据统计等有帮助。博文结合代码看,理解起来更快。
## xml参数
tsung的压力过程分三个阶段:读取配置、开启监控、启动客户端进程。
tsung的配置是以[xml](http://blog.youkuaiyun.com/libing1991_/article/details/47684433)文件存在的。配置文件的结构: 顶级标签<tsung>、客户端标签<clients>、服务端标签<servers>、监控标签<monitor>、负载标签<load>、选项标签<options>、过程标签<sessions>.
## tsung 使用
### 测试工具使用
tsung start
### 报表生成工具
定位到 log目录下,执行/usr/local/tsung/lib/tsung/bin/tsung_stats.pl
### 比较工具
tsplot FirstTestName FirstTestDir SecondTestName SecondTestDir -d Outputdir
不指定outputdir,输出到 /tmp/tsung/
## Tsung测试结果说明
tsung统计数据每十秒钟采样一次。
### 统计报表说明
1.主要统计数据
<table>
<tr>
<td>Name</td>
<td>highest 10sec mean</td>
<td>lowest 10sec mean</td>
<td>Highest Rate</td>
<td>Mean Rate</td>
<td>Mean</td>
<td>Count</td>
</tr>
<tr>
<td >connect</td>
<td >64.51 msec </td>
<td >1.72 msec</td>
<td >1.6 / sec</td>
<td >0.96 / sec</td>
<td >12.03 msec </td>
<td >100 </td>
</tr>
<tr>
<td>page</td>
<td >0.31 sec </td>
<td >0.23 sec</td>
<td >1.5 / sec</td>
<td >0.96 / sec</td>
<td >0.25 sec </td>
<td >100 </td>
</tr>
<tr>
<td >request</td>
<td >0.31 sec </td>
<td >0.23 sec</td>
<td >1.5 / sec</td>
<td >0.96 / sec</td>
<td >0.25 sec </td>
<td >100 </td>
</tr>
<tr>
<td >session</td>
<td >0.30 sec </td>
<td >0.23 sec</td>
<td >1.6 / sec</td>
<td >0.96 / sec</td>
<td >0.25 sec </td>
<td >100 </td>
</tr>
</table>
<table>
<tr>
<td>名字</td>
<td>10s内最高平均值</td>
<td>10s内最低平均值</td>
<td>最高速率</td>
<td>最低速率</td>
<td>平均值</td>
<td>最大值</td>
</tr>
<tr>
<td >connect每个连接建立的消耗时间</td>
<td >10s 内每个连接建立的最大平均耗时 64.51 msec </td>
<td > 10s 内每个连接建立的最小平均耗时 1.72 msec</td>
<td >每秒最高建立连接速率1.6 / sec</td>
<td >每秒平局建立连接速率0.96 / sec</td>
<td >平均每个连接建立耗时12.03 msec </td>
<td >最后一次写日志的之前的连接总数100 </td>
</tr>
<tr>
<td>page每个请求集合的响应时间(一个页面表示一组没有被thinktime 间隔的请求)</td>
<td >一个页面请求的最长响应时间0.31 sec </td>
<td >一个页面请求的最短响应时间0.23 sec</td>
<td >请求的最大速率 1.5 / sec</td>
<td >请求的平均速率0.96 / sec</td>
<td >平均每个请求的响应时间0.25 sec </td>
<td >请求总数100 </td>
</tr>
<tr>
<td >request 每个请求的响应时间</td>
<td >每个请求的最长响应时间0.31 sec </td>
<td >每个请求的最短响应时间0.23 sec</td>
<td >请求的最大速率1.5 / sec</td>
<td >请求的平均速率0.96 / sec</td>
<td >平均每个请求的响应时间0.25 sec </td>
<td >请求总数100 </td>
</tr>
<tr>
<td >session 每个session的持续时间</td>
<td > 每个session的最大持续时间0.30 sec </td>
<td >每个session的最小持续时间0.23 sec</td>
<td >session 最大响应速率1.6 / sec</td>
<td >session 的最平均响应速率0.96 / sec</td>
<td >session的平均持续时间0.25 sec </td>
<td >session总数100 </td>
</tr>
</table>
每个采用时间段内尚未完成的connect、page、request、session 计入到下一个采样时间段。
2.事务统计数据
transaction 仅作为 自定义的统计项 和具体业务无关。事务名称必须以"tr_" 为前缀。
<table>
<tr>
<td>Name</td>
<td>highest 10sec mean</td>
<td>lowest 10sec mean</td>
<td>Highest Rate</td>
<td>Mean Rate</td>
<td>Mean</td>
<td>Count</td>
</tr>
<tr>
<td >tr_test1</td>
<td >0.22 sec </td>
<td >0.21 sec </td>
<td >0.3 / sec</td>
<td >0.11 / sec</td>
<td >0.22 sec </td>
<td >12 </td>
</tr>
</table>
<table>
<tr>
<td>事务名称</td>
<td>10s 内最大平均值</td>
<td>10s 内最小平均值</td>
<td>最大速率</td>
<td>平均速率</td>
<td>平均响应时间</td>
<td>事务执行次数</td>
</tr>
<tr>
<td >事务名tr_test1</td>
<td >10内响应时间平均最大值0.22 sec </td>
<td >10内响应时间平均最小值0.21 sec </td>
<td >最大响应速率0.3 / sec</td>
<td >平均响应速率0.11 / sec</td>
<td >平均响应时间0.22 sec </td>
<td >事务名为tr_test1的事务执行12次</td>
</tr>
</table>
3.网络吞吐统计
<table>
<tr>
<td> Name </td>
<td> Highest Rate </td>
<td> Total </td>
</tr>
<tr>
<td >size_rcv</td>
<td >6.28 Kbits/sec</td>
<td >52.35 KB</td>
</tr>
<tr>
<td >size_sent</td>
<td >1.59 Kbits/sec</td>
<td >13.29 KB</td>
</tr>
</table>
<table>
<tr>
<td> 名称</td>
<td> 最大速率 </td>
<td> 流量总计</td>
</tr>
<tr>
<td >接收流量</td>
<td >接收速率</td>
<td >接收数据总量</td>
</tr>
<tr>
<td >发送流量</td>
<td >发送速率</td>
<td >发送数据总量</td>
</tr>
</table>
4.计数统计
<table>
<tr>
<td> Name </td>
<td> Highest Rate </td>
<td> Mean Rate </td>
<td> Total number</td>
</tr>
<tr>
<td >match</td>
<td >1.5 / sec</td>
<td >0.96 / sec</td>
<td >100 </td>
</tr>
</table>
<table>
<tr>
<td> 名称</td>
<td> 最大速率 </td>
<td> 平均速率 </td>
<td> 总数</td>
</tr>
<tr>
<td >匹配match</td>
<td >最大匹配速率1.5 / sec</td>
<td >平均匹配速率 0.96 / sec</td>
<td >匹配总数100 </td>
</tr>
</table>
<table>
<tr><th >Name</th> <th>Max</th> </tr>
<tr>
<td >connected</td>
<td >1 </td>
</tr>
<tr>
<td >finish_users_count</td>
<td >100 </td>
</tr>
<tr>
<td >users</td>
<td >3 </td>
</tr>
<tr>
<td >users_count</td>
<td >100 </td>
</tr>
</table>
<table>
<tr><th >Name</th> <th>Max</th> </tr>
<tr>
<td >connected 表示并发最大websocket连接数 </td>
<td >最大并发连接数为1</td>
</tr>
<tr>
<td >finish_users_count 表示已经完成会话的最大用户数</td>
<td >最大用户数为100 </td>
</tr>
<tr>
<td >users 表示会话开始且尚未结束的最大用户数(同时存在的ts_client进程数)</td>
<td >最大用户数为3 </td>
</tr>
<tr>
<td >users_count 表示tsung 总共生成的用户总数</td>
<td >tsung 生成的用户总数为 100 </td>
</tr>
</table>
5.服务器(运行压测工具的服务器)监控
cpu cpu消耗
highest 10sec mean CPU最大消耗
lowest 10sec mean CPU最小消耗
freemem: 空闲内存
highest 10sec mean 最大空闲内存
lowest 10sec mean 最小空闲内存
load 负载
highest 10sec mean 最大负载
lowest 10sec mean 最小负载
### 测试结果比较说明
connected 会话开始尚未结束,已经连接的最大连接数
finish 已经完成会话的最大连接数
http 每秒http请求数
page_count 每秒请求集合数
page_mean 请求集合的平均持续时长
request_count 每秒请求次数
request_mean 请求平均持续时长
size_rcv 网络吞吐(接收)
size_sent 网络吞吐(发送)
users 会话开始尚未结束的最大连接数
### 分布式测试
多台 centos 7 虚拟机,erlang、tsung的版本、安装路径需要保持一致。集群配置[参考](http://wenku.baidu.com/link?url=o-WRWQQ3YLoHascA5Ez53FnVgZYscuZArtp8VfesCi7APFWbN4jC5IcL6bN6WISOPWP4c8B1cNkWjRlyxpkW4HU44ByB8duEMs7bU5vsoF7)。关闭selinuxenabled、防火墙服务。测试代码需要在集群内的每一台机器上保存一份。
## 安装
操作系统: centos 7.0
erlang:otp_17
tsung: 1.6.0
tsung 主要包含测试功能、报表生成工具、测试结果比较工具。tsung的[安装](http://blog.youkuaiyun.com/jimesum1/article/details/7847924)依赖于erlang的安装,更详细的[安装](http://blog.sina.com.cn/s/blog_13cc013b50102v5nw.html)。tsung安装的依赖项和简单使用在链接里面有说明。erlang的安装依赖项请参考erlang的对应安装文档。tsung 安装并配置完毕后,测试功能就可以正常使用了。报表生成工具和测试结构比较工具不能正常使用。
### tsung直接依赖库
Template-Toolkit:2.26 (前面的安装文档中使用的2.24)
gnuplot:使用yum -y install gnuplot安装即可
其他依赖使用 “yum -y install 模块名” 安装
### 报表生成工具依赖库(安装Template-Toolkit之前就应该安装)
yum install -y perl-Image*
yum install -y perl-Pod*
yum -y install perl-CGI*
yum -y install perl-CPAN
yum install python-devel
### 测试结果比较工具(tsplot)依赖库
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libpng-devel harfbuzz-devel
easy_install six
easy_install python_dateutil
tsplot 依赖库[安装](https://www.douban.com/note/432207495/),在centos7.0环境下验证可用。
## 源码分析
系列[博客](http://jzhihui.iteye.com/category/205905),对于理解websocket for Tsung、tsung启动过程、压力生成过程、服务器监控、数据统计等有帮助。博文结合代码看,理解起来更快。
## xml参数
tsung的压力过程分三个阶段:读取配置、开启监控、启动客户端进程。
tsung的配置是以[xml](http://blog.youkuaiyun.com/libing1991_/article/details/47684433)文件存在的。配置文件的结构: 顶级标签<tsung>、客户端标签<clients>、服务端标签<servers>、监控标签<monitor>、负载标签<load>、选项标签<options>、过程标签<sessions>.
## tsung 使用
### 测试工具使用
tsung start
### 报表生成工具
定位到 log目录下,执行/usr/local/tsung/lib/tsung/bin/tsung_stats.pl
### 比较工具
tsplot FirstTestName FirstTestDir SecondTestName SecondTestDir -d Outputdir
不指定outputdir,输出到 /tmp/tsung/
## Tsung测试结果说明
tsung统计数据每十秒钟采样一次。
### 统计报表说明
1.主要统计数据
<table>
<tr>
<td>Name</td>
<td>highest 10sec mean</td>
<td>lowest 10sec mean</td>
<td>Highest Rate</td>
<td>Mean Rate</td>
<td>Mean</td>
<td>Count</td>
</tr>
<tr>
<td >connect</td>
<td >64.51 msec </td>
<td >1.72 msec</td>
<td >1.6 / sec</td>
<td >0.96 / sec</td>
<td >12.03 msec </td>
<td >100 </td>
</tr>
<tr>
<td>page</td>
<td >0.31 sec </td>
<td >0.23 sec</td>
<td >1.5 / sec</td>
<td >0.96 / sec</td>
<td >0.25 sec </td>
<td >100 </td>
</tr>
<tr>
<td >request</td>
<td >0.31 sec </td>
<td >0.23 sec</td>
<td >1.5 / sec</td>
<td >0.96 / sec</td>
<td >0.25 sec </td>
<td >100 </td>
</tr>
<tr>
<td >session</td>
<td >0.30 sec </td>
<td >0.23 sec</td>
<td >1.6 / sec</td>
<td >0.96 / sec</td>
<td >0.25 sec </td>
<td >100 </td>
</tr>
</table>
<table>
<tr>
<td>名字</td>
<td>10s内最高平均值</td>
<td>10s内最低平均值</td>
<td>最高速率</td>
<td>最低速率</td>
<td>平均值</td>
<td>最大值</td>
</tr>
<tr>
<td >connect每个连接建立的消耗时间</td>
<td >10s 内每个连接建立的最大平均耗时 64.51 msec </td>
<td > 10s 内每个连接建立的最小平均耗时 1.72 msec</td>
<td >每秒最高建立连接速率1.6 / sec</td>
<td >每秒平局建立连接速率0.96 / sec</td>
<td >平均每个连接建立耗时12.03 msec </td>
<td >最后一次写日志的之前的连接总数100 </td>
</tr>
<tr>
<td>page每个请求集合的响应时间(一个页面表示一组没有被thinktime 间隔的请求)</td>
<td >一个页面请求的最长响应时间0.31 sec </td>
<td >一个页面请求的最短响应时间0.23 sec</td>
<td >请求的最大速率 1.5 / sec</td>
<td >请求的平均速率0.96 / sec</td>
<td >平均每个请求的响应时间0.25 sec </td>
<td >请求总数100 </td>
</tr>
<tr>
<td >request 每个请求的响应时间</td>
<td >每个请求的最长响应时间0.31 sec </td>
<td >每个请求的最短响应时间0.23 sec</td>
<td >请求的最大速率1.5 / sec</td>
<td >请求的平均速率0.96 / sec</td>
<td >平均每个请求的响应时间0.25 sec </td>
<td >请求总数100 </td>
</tr>
<tr>
<td >session 每个session的持续时间</td>
<td > 每个session的最大持续时间0.30 sec </td>
<td >每个session的最小持续时间0.23 sec</td>
<td >session 最大响应速率1.6 / sec</td>
<td >session 的最平均响应速率0.96 / sec</td>
<td >session的平均持续时间0.25 sec </td>
<td >session总数100 </td>
</tr>
</table>
每个采用时间段内尚未完成的connect、page、request、session 计入到下一个采样时间段。
2.事务统计数据
transaction 仅作为 自定义的统计项 和具体业务无关。事务名称必须以"tr_" 为前缀。
<table>
<tr>
<td>Name</td>
<td>highest 10sec mean</td>
<td>lowest 10sec mean</td>
<td>Highest Rate</td>
<td>Mean Rate</td>
<td>Mean</td>
<td>Count</td>
</tr>
<tr>
<td >tr_test1</td>
<td >0.22 sec </td>
<td >0.21 sec </td>
<td >0.3 / sec</td>
<td >0.11 / sec</td>
<td >0.22 sec </td>
<td >12 </td>
</tr>
</table>
<table>
<tr>
<td>事务名称</td>
<td>10s 内最大平均值</td>
<td>10s 内最小平均值</td>
<td>最大速率</td>
<td>平均速率</td>
<td>平均响应时间</td>
<td>事务执行次数</td>
</tr>
<tr>
<td >事务名tr_test1</td>
<td >10内响应时间平均最大值0.22 sec </td>
<td >10内响应时间平均最小值0.21 sec </td>
<td >最大响应速率0.3 / sec</td>
<td >平均响应速率0.11 / sec</td>
<td >平均响应时间0.22 sec </td>
<td >事务名为tr_test1的事务执行12次</td>
</tr>
</table>
3.网络吞吐统计
<table>
<tr>
<td> Name </td>
<td> Highest Rate </td>
<td> Total </td>
</tr>
<tr>
<td >size_rcv</td>
<td >6.28 Kbits/sec</td>
<td >52.35 KB</td>
</tr>
<tr>
<td >size_sent</td>
<td >1.59 Kbits/sec</td>
<td >13.29 KB</td>
</tr>
</table>
<table>
<tr>
<td> 名称</td>
<td> 最大速率 </td>
<td> 流量总计</td>
</tr>
<tr>
<td >接收流量</td>
<td >接收速率</td>
<td >接收数据总量</td>
</tr>
<tr>
<td >发送流量</td>
<td >发送速率</td>
<td >发送数据总量</td>
</tr>
</table>
4.计数统计
<table>
<tr>
<td> Name </td>
<td> Highest Rate </td>
<td> Mean Rate </td>
<td> Total number</td>
</tr>
<tr>
<td >match</td>
<td >1.5 / sec</td>
<td >0.96 / sec</td>
<td >100 </td>
</tr>
</table>
<table>
<tr>
<td> 名称</td>
<td> 最大速率 </td>
<td> 平均速率 </td>
<td> 总数</td>
</tr>
<tr>
<td >匹配match</td>
<td >最大匹配速率1.5 / sec</td>
<td >平均匹配速率 0.96 / sec</td>
<td >匹配总数100 </td>
</tr>
</table>
<table>
<tr><th >Name</th> <th>Max</th> </tr>
<tr>
<td >connected</td>
<td >1 </td>
</tr>
<tr>
<td >finish_users_count</td>
<td >100 </td>
</tr>
<tr>
<td >users</td>
<td >3 </td>
</tr>
<tr>
<td >users_count</td>
<td >100 </td>
</tr>
</table>
<table>
<tr><th >Name</th> <th>Max</th> </tr>
<tr>
<td >connected 表示并发最大websocket连接数 </td>
<td >最大并发连接数为1</td>
</tr>
<tr>
<td >finish_users_count 表示已经完成会话的最大用户数</td>
<td >最大用户数为100 </td>
</tr>
<tr>
<td >users 表示会话开始且尚未结束的最大用户数(同时存在的ts_client进程数)</td>
<td >最大用户数为3 </td>
</tr>
<tr>
<td >users_count 表示tsung 总共生成的用户总数</td>
<td >tsung 生成的用户总数为 100 </td>
</tr>
</table>
5.服务器(运行压测工具的服务器)监控
cpu cpu消耗
highest 10sec mean CPU最大消耗
lowest 10sec mean CPU最小消耗
freemem: 空闲内存
highest 10sec mean 最大空闲内存
lowest 10sec mean 最小空闲内存
load 负载
highest 10sec mean 最大负载
lowest 10sec mean 最小负载
### 测试结果比较说明
connected 会话开始尚未结束,已经连接的最大连接数
finish 已经完成会话的最大连接数
http 每秒http请求数
page_count 每秒请求集合数
page_mean 请求集合的平均持续时长
request_count 每秒请求次数
request_mean 请求平均持续时长
size_rcv 网络吞吐(接收)
size_sent 网络吞吐(发送)
users 会话开始尚未结束的最大连接数
### 分布式测试
多台 centos 7 虚拟机,erlang、tsung的版本、安装路径需要保持一致。集群配置[参考](http://wenku.baidu.com/link?url=o-WRWQQ3YLoHascA5Ez53FnVgZYscuZArtp8VfesCi7APFWbN4jC5IcL6bN6WISOPWP4c8B1cNkWjRlyxpkW4HU44ByB8duEMs7bU5vsoF7)。关闭selinuxenabled、防火墙服务。测试代码需要在集群内的每一台机器上保存一份。