执行压测任务:
tsung -f test.xml start
将压测结果复制到web目录方便查看:
sh report.sh /root/.tsung/log/20220804-1834
#/bin/bash
cd $1
idata=`echo $1 |awk -F '/' '{print $5}'`
tsung_stats
grep error $1/*.dump
rm -fr *.dump *.log
mv $1 /data/httpd/tsung/
cd /root/.tsung/
echo ""
echo "http://yourdomain.com/tsung/"$idata"/graph.html#http_status"
tsung出现错误 error_inet_etimedout: 原因可能是目标机器无法连接,也有可能是压测机器的出口带宽不足。出现这种错误建议更换一台压测机器再试试。或者将目标机器的域名更换成ip,从内网ip压测。
压到服务器上限后,数据库可能会锁表。这时候需要重启php-fpm。
tsung配置文件解析:
loglevel: 日志记录的等级,支持的设置有 error / debug等,一般设置成error即可。
<tsung loglevel="error" dumptraffic="false" version="1.0">
<clients>
<client host="localhost" use_controller_vm="true" maxusers="120000"/>
maxusers: 指压测机器最大可以模拟的用户数量。
</clients>
<servers>
<server host="baidu.com" port="80" type="tcp"/>
host: 目标机器。可以是ip地址或者域名。注意不要写http前缀。
port: 端口,一般是80 或者 443。如果有特殊端口也可以指定。
type:一般是tcp。如果是https协议,这里写 ssl。
</servers>
<load>
<arrivalphase phase="1" duration="1" unit="minute">
duration:压测周期长度。配合后面的unit来指定压测时间。
unit: 压测周期的单位。minute 分钟。second 秒。
<users arrivalrate="200" unit="second"/>
arrivalrate:压测的最大并发请求数。
</arrivalphase>
</load>
<options>
<option name="file_server" id="auth_file" value="token.csv"/>
这里可以从文件中加载一些压测参数。
</options>
<sessions>
<session name="login" probability="5" type="ts_http">
压测比例:probability, 百分比。所有session的比例加起来必须等于100。
<setdynvars sourcetype="file" fileid="auth_file" delimiter=";" order="iter">
<var name="authorization" />
从文件中加载压测参数,并赋值给 authorization
</setdynvars>
<transaction name="login">
<request subst="true">
subst:设置成true,表示下面的目标压测地址里存在替换变量。
<http url="/api/h5app/wxapp/enterprises?page=1&pageSize=20&company_id=1" version="1.1" method="GET">
url: 目标压测地址。这里如果是以http开头,则忽略上面指定的 host。否则会自动拼接 host。注意,网址里如果包含&,要替换成 &
<http_header name="Authorization" value="%%_authorization%%"/>
引用变量:红色部分为变量名,%%_authorization%%
<http_header name="Accept-Encoding" value="gzip,deflate"/>
</http>
</request>
<request subst="true">
<http url="/api/h5app/wxapp/employee/auth" contents="enterprise_id=2&mobile=member_mobile&showError=false&company_id=1" version="1.1" method="POST" content_type='application/x-www-form-urlencoded; charset=UTF-8'>
这里是发起post请求,参数放在contents里,需要指定 content_type。
<http_header name="Authorization" value="%%_authorization%%"/>
</http>
</request>
</transaction>
</session>
有话要说