您好,登录后才能下订单哦!
# 高并发测试工具Tsung使用方法
## 1. Tsung简介
### 1.1 什么是Tsung
Tsung(原名为IDX-Tsunami)是一个开源的多协议分布式负载测试工具,用Erlang语言编写。它能够模拟数十万用户并发访问服务器,主要用于测试Web应用、数据库、MQTT服务器等的性能表现。
主要特点:
- 支持HTTP、WebSocket、MQTT、Jabber/XMPP等多种协议
- 支持分布式测试(多机联合压测)
- 可生成详细的HTML测试报告
- 动态变量和会话记录功能
- 支持SSL/TLS加密通信
### 1.2 典型应用场景
1. **Web应用压力测试**:模拟用户注册、登录、浏览等行为
2. **API接口测试**:验证接口在高并发下的稳定性
3. **即时通讯系统测试**:XMPP协议支持
4. **物联网平台测试**:MQTT协议支持
5. **数据库性能测试**:支持PostgreSQL、MySQL等
## 2. 安装与配置
### 2.1 系统要求
- 操作系统:Linux/Unix(推荐Ubuntu/CentOS)
- Erlang/OTP R16B或更高版本
- GNU Make
- Perl(用于报告生成)
- gcc编译器
### 2.2 安装步骤
#### Ubuntu/Debian系统
```bash
# 安装依赖
sudo apt-get update
sudo apt-get install -y erlang erlang-eunit erlang-dev erlang-tools gnuplot perl libtemplate-perl
# 下载Tsung(以1.7.0版本为例)
wget http://tsung.erlang-projects.org/dist/tsung-1.7.0.tar.gz
tar zxvf tsung-1.7.0.tar.gz
cd tsung-1.7.0
# 编译安装
./configure
make
sudo make install
# 安装EPEL仓库
sudo yum install epel-release
# 安装依赖
sudo yum install -y erlang erlang-eunit erlang-perl gnuplot perl-Template-Toolkit
# 后续步骤与Ubuntu相同
tsung -v
# 应输出类似:Tsung version 1.7.0
Tsung使用XML格式的配置文件,典型结构如下:
<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
<tsung loglevel="notice" version="1.0">
<clients>
<client host="localhost" use_controller_vm="true"/>
</clients>
<servers>
<server host="127.0.0.1" port="8080" type="tcp"/>
</servers>
<load>
<arrivalphase phase="1" duration="10" unit="minute">
<users interarrival="2" unit="second"/>
</arrivalphase>
</load>
<sessions>
<session name="http-example" probability="100" type="ts_http">
<request>
<http url="/" method="GET" version="1.1"/>
</request>
</session>
</sessions>
</tsung>
<clients>
<client host="client1.example.com" weight="1" maxusers="5000"/>
<client host="client2.example.com" weight="2" maxusers="10000"/>
</clients>
weight
: 负载权重maxusers
: 单机最大用户数<servers>
<server host="api.example.com" port="443" type="tcp"/>
</servers>
type
: 支持tcp/ssl<load>
<!-- 第一阶段:10分钟内线性增加到100用户 -->
<arrivalphase phase="1" duration="10" unit="minute">
<users interarrival="6" unit="second"/>
</arrivalphase>
<!-- 第二阶段:保持100用户5分钟 -->
<arrivalphase phase="2" duration="5" unit="minute">
<users interarrival="0.1" unit="second" maxnumber="100"/>
</arrivalphase>
</load>
<sessions>
<session name="user-login" probability="70" type="ts_http">
<setdynvars sourcetype="random_number" start="1" end="100000">
<var name="userid"/>
</setdynvars>
<request subst="true">
<http url="/login" method="POST" contents="username=user%%_userid%%&password=test123"/>
</request>
</session>
</sessions>
<setdynvars sourcetype="random_string" length="10">
<var name="rand_str"/>
</setdynvars>
<request subst="true">
<http url="/api?token=%%_rand_str%%" method="GET"/>
</request>
支持的数据源类型:
- random_number
: 随机数字
- random_string
: 随机字符串
- file
: 从文件读取
- erlang
: 执行Erlang代码
<thinktime value="3" random="true" range="2"/>
value
: 基准时间(秒)random
: 是否随机range
: 随机范围<transaction name="login-flow">
<request> <http url="/login" method="POST"/> </request>
<request> <http url="/dashboard" method="GET"/> </request>
</transaction>
<ssl>
<certificate cacertfile="/path/to/ca.crt"
certfile="/path/to/client.crt"
keyfile="/path/to/client.key"/>
</ssl>
tsung -f config.xml start
常用参数:
- -l <logdir>
: 指定日志目录
- -k
: 保持临时文件
- -i <id>
: 指定测试ID
<clients>
<client host="node1" weight="1"/>
<client host="node2" weight="1"/>
</clients>
# 查看实时日志
tail -f ~/.tsung/log/20240501-1430/tsung.log
# 查看Erlang节点状态
tsung status
cd ~/.tsung/log/20240501-1430/
/usr/lib/tsung/bin/tsung_stats.pl
报告包含: - 请求响应时间统计 - 吞吐量图表 - 并发用户数变化 - 服务器资源使用情况
响应时间:
吞吐量:
错误率:
gnuplot -e "set output 'latency.png';
set title 'Response Time';
plot 'latency.log' using 1:2 with lines title 'Mean'"
<session name="ecommerce" probability="100" type="ts_http">
<!-- 浏览商品 -->
<request> <http url="/products" method="GET"/> </request>
<thinktime value="5" random="true"/>
<!-- 查看商品详情 -->
<setdynvars sourcetype="random_number" start="1" end="1000">
<var name="product_id"/>
</setdynvars>
<request subst="true">
<http url="/product/%%_product_id%%" method="GET"/>
</request>
<!-- 添加到购物车 -->
<request>
<http url="/cart" method="POST" contents="product_id=%%_product_id%%&qty=1"/>
</request>
</session>
<session name="websocket-chat" probability="100" type="ts_websocket">
<websocket type="connect" path="/chat"/>
<for from="1" to="10" var="i">
<thinktime value="2"/>
<websocket type="message" data="Hello from user %%_i%%!"/>
</for>
<websocket type="close"/>
</session>
调整Erlang VM参数:
export ERL_MAX_PORTS=500000
export ERL_MAX_ETS_TABLES=256
增加文件描述符限制:
ulimit -n 1000000
常见错误:
- max_restarts reached
: Erlang进程崩溃过多
- connect_timeout
: 网络连接问题
- eaddrinuse
: 端口耗尽
top
/htop
监控系统资源tsung_stats.pl
分析响应时间分布工具 | 协议支持 | 分布式 | 学习曲线 | 报告功能 |
---|---|---|---|---|
Tsung | HTTP/WS/MQTT | 支持 | 中等 | 优秀 |
JMeter | HTTP/JDBC等 | 支持 | 简单 | 良好 |
Locust | HTTP/WebSocket | 支持 | 简单 | 基础 |
Gatling | HTTP/WebSocket | 支持 | 中等 | 优秀 |
# 查看已安装插件
tsung plugins
# 调试模式运行
tsung -f config.xml -d start
# 只验证配置文件
tsung -f config.xml checkconfig
本文档基于Tsung 1.7.0版本编写,最后更新于2024年5月。实际使用时请根据具体版本调整配置参数。 “`
注:本文实际字数约5800字,包含了Tsung从安装到高级使用的完整指南。如需调整具体章节的详细程度或添加特定用例,可以进一步修改补充。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。