Bash中如何将Siege负载测试的统计摘要而非请求日志存入变量
问题根因
Siege 工具默认会将运行过程中的HTTP请求日志输出到标准输出(stdout),而最终的负载测试统计摘要会输出到标准错误(stderr)。你当前使用的$()命令替换逻辑只会捕获stdout的内容,自然无法拿到Lifting the server siege...之后的统计部分。
解决方案
方案1:捕获全部输出(包含请求日志+统计摘要)
在siege命令末尾添加2>&1,将stderr重定向到stdout,即可让命令替换捕获到所有输出内容:
SIEGE="$(siege -c $1 -t $2 [ip] 2>&1)"
方案2:仅捕获统计摘要(推荐,适合后续数值比对)
如果不需要中间的请求日志,可以直接添加siege自带的静默参数-q,关闭请求日志输出,仅保留统计摘要:
# -q 开启静默模式,仅输出最终统计结果 SIEGE_SUMMARY="$(siege -q -c $1 -t $2 [ip] 2>&1)"
小提示:输出变量时如果要保留原始的换行格式,需要用双引号包裹变量,即执行
echo "$SIEGE_SUMMARY"而非echo $SIEGE_SUMMARY,否则所有换行都会被替换为空格。
内容的提问来源于stack exchange,提问作者jxf6947
相关产品推荐
相关产品推荐

