背景:最近高可用测试,双机倒换后,需要统计多久倒换结束了。我的方法是通过业务来测试,客户端和服务端都能正常访问了,对外提供服务的能力肯定就提供了。
因为不知道什么时候倒换开始和结束,需要每一秒都发curl请求,然后统计每次调用接口的时间和响应结果,并根据响应结果写入文件,方便统计和分析测试结果。
我选择简单的shell脚本,上手快。Python的话需要环境上安装相应软件,请求的响应更容易处理更便于处理。本文选择shell,curl来发请求。
根据需求开始写脚本
1) #! /bin/bash
# 指脚本使用/bin/bash来解释执行,#!是对脚本的解释器程序路径。标记为#!/bin/sh的脚本不应使用任何POSIX没有规定的特性 (如let等命令, 但#!/bin/bash可以)。
2) while循环的格式
while expression
do
command
command
```
done
或while [条件判断式]
do
程序
done
举例:计数器控制的while循环
#!/bin/bash
int=1
while [ $int<=5 ]
do
echo $int
let "int++"
done
3) if判断
if [ 条件判断一 ] && (||) [ 条件判断二 ]; then
elif [ 条件判断三 ] && (||) [ 条件判断四 ]; then
else
执行第三段內容程式
fi
4) curl
curl -I -s --connect-timeout 5 -m 5 -w "%{http_code}" -o /dev/null http://baidu.com
200
-I/--head 仅返回消息头部,使用HEAD请求
-s/--slient 减少输出的信息,比如进度
--connect-timeout <seconds> 指定尝试连接的最大时长
-m/--max-time <seconds> 指定处理的最大时长
-w "参数" 自定义curl的输出
-o/--output <file> 指定输出文件名称
上脚本
#!/bin/bash
#根据测试背景填写连接超时时长,单位秒
ct=5
#根据测试背景填写响应最大时长,单位秒
rm=5
#根据测试背景填写URL
uri="http://baidu.com"
i=1
while [ $i<=36000 ]
do
echo `date` === $i === >> get-baidu.log
let i++
resp=`curl -I -s --connect-timeout $ct -m $rm -w "%{http_code}" -o /dev/null $url`
if [ $resp==200 ]; then
echo `date` == $i ==$resp >> get-baidu.log
else
echo `date` == $i ==$resp >> get-baidu.log
echo `date` == $i ==$resp >> get-baidu-fail.log
fi
done
使用
找个和待测试环境网络可达的Linux环境,修改相关信息,直接运行即可。
注意uri是get请求,如果是post需要修改curl。
如果需要token认证则根据待测系统的实现进行携带token,修改curl命令即可。
如果需要ssl证书,则携带相应证书,修改curl命令即可。
如果是ipv6的URL,curl中带上-6 -g参数。
计算响应时长(本例子是双机倒换时长)日志查看,从get-baidu-fail.log找到失败点,在总的日志中找到相应记录,进行计算即可。