Linux服务器上shell脚本批量循环测试接口连通性,bash工具循环测试curl性能
使用curl的-w选项来输出各种时间信息
- -o /dev/null 用于丢弃响应体,只关心头部信息
- -s 用于静默模式,不输出进度信息
- %{http_code} 输出HTTP状态码
- %{time_namelookup} 输出DNS解析时间
- %{time_connect} 输出连接时间
- %{time_total} 输出总时间(包括响应时间)
结合shell脚本的循环执行逻辑就可以批量测试了。
实例:
#!/bin/bash
# 测验URL访问速度 Test URL access speed
# author: xiongzaiqiren
# 测试次数
num=3
testUrl="https://www.bing.com"
# testUrl="http://10.10.28.121/#/open/"
# testUrl="http://wenxuebank.com/book/info/b2d5e8"
start_time=$(date +%Y%m%d%H%M%S)
echo -e ">>>总次数=${num} URL=${testUrl} 开始>>> \n" | tee -a "./log_testUrl_${start_time}.log"
while true; do
echo ${num}
if [ ${num} -lt 1 ]; then
echo -e "<<< 完成 <<< \n" | tee -a "./log_testUrl_${start_time}.log"
break
else
date_now=$(date +%Y/%m/%d[%H:%M:%S])
total_time=$(curl -w "StatusCode: %{http_code}, 总耗时: %{time_total}, tcp连接建立时间: %{time_connect}, 服务端处理时间: %{time_starttransfer}, DNS解析时间: %{time_namelookup}, 网络响应时间: %{time_pretransfer}, 握手时间: %{time_redirect}" -o /dev/null -s "$testUrl")
total_time_show=$(echo -e "$total_time"|head -1|awk '{print $4}')
total_time_sec=$(echo -e "$total_time"|head -1|awk '{print $4}'|awk -F ['.'] '{print $1}')
if [ ${total_time_sec} -lt 1 ]; then
echo -e "【$date_now】 URL耗时 ${total_time_show} seconds,小于1s 正常\n ${total_time} \n" | tee -a "./log_testUrl_${start_time}.log"
else
echo -e "\033[1;31m############### \n 【$date_now】 URL耗时 ${total_time_show} seconds,大于1s 异常 \n ${total_time}\n################\033[0m\n" | tee -a "./log_testUrl_${start_time}.log"
fi
let num--
sleep .5
fi
done
# 使用curl的-w选项来输出各种时间信息
# -o /dev/null 用于丢弃响应体,只关心头部信息
# -s 用于静默模式,不输出进度信息
# %{http_code} 输出HTTP状态码
# %{time_namelookup} 输出DNS解析时间
# %{time_connect} 输出连接时间
# %{time_total} 输出总时间(包括响应时间)
以上代码复制到.sh文件里(例如 testSingleUrlAccessSpeed.sh )然后赋予+x可执行权限。
执行过程及结果如图:

当然,也可以直接一条命令测试:
for i in {1..1000}; do \
curl -w "StatusCode: %{http_code} 总耗时: %{time_total} tcp连接建立时间: %{time_connect} 服务端处理时间: %{time_starttransfer} DNS解析时间: %{time_namelookup} 网络响应时间: %{time_pretransfer} 握手时间: %{time_redirect}" -o /dev/null -s 'http://wenxuebank.com/book/info/b2d5e8' -H 'X-MyUser-Id:1023174472804585472'; \
done | awk '{if ($4 > 1 || $10 > 1) print $0}'
也可以直接测试 DNS解析:
for i in {1..100}; do dig @192.168.0.4 xxx.xxx.com|grep "Query time" >>dns_1056.query.txt; sleep 1s;done
循环遍历测验URL访问速度
我们可以结合 for ... in ... 循环,和 while ... 循环来实现多个Url组合与多次访问测验。
原理:
- 首先定义两个变量,分别将多个目标Url组合,与期望循环测验的次数预设起来;
- 其次在Traverse_URLs()方法实现遍历预设的Url集合,在Loop_Nums()方法实现每个Url循环使用测验;
- 第三在Measure_time()方法里实现Url测验核心代码。主要是通过执行curl命令并收集相关各项时间参数,以易于理解的格式输出。根据URL响应耗时时长判断正常或异常。
- 最后,将脚本文件赋予可执行权限,执行测验即可。
完整代码:
#!/bin/bash
# 循环遍历测验URL访问速度 Loop traversal test URL access speed
# author: xiongzaiqiren
# 测验目标URL的集合,多个之间用空格分隔
urls=("http://wenxuebank.com/book/info/b2d5e8" "https://www.google.com" "https://www.bing.com")
# 每个URL测验次数
num=2
######以下是业务逻辑,请勿改动!!!(The following is the business logic, please do not modify it !!!)
start_time=$(date +%Y%m%d%H%M%S)
echo -e ">>>循环遍历次数=${num} URL数量=${#urls[@]} 开始>>> \n" | tee -a "./log_testUrl_${start_time}.log"
# 定义一个函数来测量DNS解析时间
Measure_time() {
testUrl=$1
echo -e "\033[0;32m Measure_time()> $testUrl \033[0m" | tee -a "./log_testUrl_${start_time}.log"
date_now=$(date +%Y/%m/%d[%H:%M:%S])
total_time=$(curl -w "StatusCode: %{http_code} 总耗时: %{time_total} tcp连接建立时间: %{time_connect} 服务端处理时间: %{time_starttransfer} DNS解析时间: %{time_namelookup} 网络响应时间: %{time_pretransfer} 握手时间: %{time_redirect}" -o /dev/null -s "$testUrl")
total_time_show=$(echo -e "$total_time"|head -1|awk '{print $4}')
total_time_sec=$(echo -e "$total_time"|head -1|awk '{print $4}'|awk -F ['.'] '{print $1}')
if [ ${total_time_sec} -lt 1 ]; then
echo -e "【$date_now】 URL耗时 ${total_time_show} seconds,小于1s 正常\n ${total_time} \n" | tee -a "./log_testUrl_${start_time}.log"
else
echo -e "\033[1;31m############### \n 【$date_now】 URL耗时 ${total_time_show} seconds,大于1s 异常 \n ${total_time}\n################\033[0m\n" | tee -a "./log_testUrl_${start_time}.log"
fi
}
Loop_Nums() {
local Single_url=$1
local Single_num=$2
while true; do
# echo -e "\033[47;36m $Single_num \033[0m \033[1;36m $Single_url \033[0m" | tee -a "./log_testUrl_${start_time}.log"
if [ ${Single_num} -lt 1 ]; then
echo -e "单个URL已完成。" | tee -a "./log_testUrl_${start_time}.log"
break
else
echo -e "\033[47;36m $Single_num \033[0m \033[1;36m $Single_url \033[0m" | tee -a "./log_testUrl_${start_time}.log"
Measure_time "${Single_url}"
let Single_num--
sleep .5
fi
done
}
Traverse_URLs() {
# 循环遍历URL数组
for url in "${urls[@]}"; do
echo -e "\033[47;30m -----Start----- ${url} \033[0m" | tee -a "./log_testUrl_${start_time}.log"
# 测量DNS时间
Loop_Nums "${url}" $num
echo -e "\033[47;30m -----Complete----- ${url} \033[0m \n" | tee -a "./log_testUrl_${start_time}.log"
done
}
Traverse_URLs
# 使用curl的-w选项来输出各种时间信息
# -o /dev/null 用于丢弃响应体,只关心头部信息
# -s 用于静默模式,不输出进度信息
# %{http_code} 输出HTTP状态码
# %{time_namelookup} 输出DNS解析时间
# %{time_connect} 输出连接时间
# %{time_total} 输出总时间(包括响应时间)
将代码复制到你的Linux里面,文件命名为 testUrlAccessSpeed.sh,赋予可执行权限 sudo chmod +x testUrlAccessSpeed.sh 修改开头的两个变量的值(urls、num),然后就可以执行了。
示例:

执行过程记录在相同目录下的 log_testUrl_20241231xxx.log 日志文件里。
【完】
Linux服务器上shell脚本批量循环测试接口连通性,bash工具循环测试curl性能的更多相关文章
- Java 连接远程Linux 服务器执行 shell 脚本查看 CPU、内存、硬盘信息
pom.xml jar 包支持 <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch& ...
- linux 远端执行shell脚本 批量结束各个远端节点进程
#以下是一个本地的shell脚本,用于同时重启远端多台服务器tomcat服务 #!/bin/sh# ancyshi 重新启动节点tomcat服务function restartNodeTomcatSe ...
- Shell脚本实现超简洁的在Linux服务器上安装nginx、resin、java、tomcat、redis等程序
说明: 用平常的方式在Linux服务器上安装程序,需要下载安装包.进入安装包位置.给安装包文件赋予可执行权限.执行安装.设置环境变量--等等一系列复杂的操作.并且如果有关联也需要一个一个的挨着安装.耗 ...
- Linux利用nc命令脚本批量检测服务器指定端口是否开放
一.nc命令检测端口的用法 # nc -v -w 10 %IP% -z %PORT% -v 显示指令执行过程. -w <超时秒数> 设置等待连线的时间. -u 表示使用UDP协议 -z 使 ...
- Linux 服务器系统监控脚本 Shell【转】
转自: Linux 服务器系统监控脚本 Shell - 今日头条(www.toutiao.com)http://www.toutiao.com/i6373134402163048961/ 本程序在Ce ...
- Linux shell脚本 批量创建多个用户
Linux shell脚本 批量创建多个用户 #!/bin/bash groupadd charlesgroup for username in charles1 charles2 charles3 ...
- shell脚本批量执行命令----必需判断上一步执行结果--没有捷径
# 注意:shell脚本批量执行命令,不能只写一个函数,然后把所有命令复制进去,之前试过这样是不行的.必须要有一个判断命令执行成功与否的语句 # 简单的命令可以不加结果判断符号,但是遇到解压包.sed ...
- 监控Linux服务器上python服务脚本
提供给公司使用的测试平台这两天频繁地挂掉,影响到相关同事的正常使用,决定在服务器上写个监控脚本,监控到服务挂了就启动起来,一分钟检查一次.注:后台服务使用的是python.监控脚本如下: NUM=`p ...
- linux系统配置文件或shell脚本批量注释
1. 配置文件批量注释 1.1 批量注释 ① 进入命令行模式,按ctrl + v进入 visual block模式,键盘上下箭头选中多行,把需要注释的行标记起来 ② 按大写字母I,再输入注释符:# ③ ...
- Linux服务器上监控网络带宽的18个常用命令nload, iftop,iptraf-ng, nethogs, vnstat. nagios,运用Ntop监控网络流量
Linux服务器上监控网络带宽的18个常用命令 本文介绍了一些可以用来监控网络使用情况的Linux命令行工具.这些工具可以监控通过网络接口传输的数据,并测量目前哪些数据所传输的速度.入站流量和出站流量 ...
随机推荐
- 3.16 Linux删除文件或目录(rm命令)
当 Linux 系统使用很长时间之后,可能会有一些已经没用的文件(即垃圾),这些文件不但会消耗宝贵的硬盘资源,还是降低系统的运行效率,因此需要及时地清理. rm 是强大的删除命令,它可以永久性地删除文 ...
- isObjectLike:检查 value 是否是 类对象。 如果一个值是类对象,那么它不应该是 null,而且 typeof 后的结果是 "object"
function isObjectLike(value) { return value != null && typeof value == 'object';}
- php ice框架
ice框架是php扩展框架 概念和 yaf Phalcon 那种框架类似,就是把框架编译为C扩展,调用起来就等于调用C,这样框架本身的加载消耗就省下来了. pecl https://pecl.php ...
- Nginx服务器配置---反向代理服务时proxy_pass的转发规则
nginx是由俄罗斯开发的一款http web服务器,我们经常用这款服务器做负载均衡和反向代理.今天我们就来聊聊Nginx作为反向代理时,如何进行路由配置.假设你已经部署好Nginx了,我们进入Ngi ...
- 返璞归真!使用 alpinejs 开发交互式 web 应用,抛弃 node_modules 和 webpack 吧!
前言 最近一直在使用 DjangoStarter 开发各种小项目,之前我是比较喜欢前后端分离的,后端用 Ninja API,前端 nextjs,开发起来也挺舒服的,交互体验也比较好. 不过我在网上冲浪 ...
- 关于ClassLoader中getResource与getResourceAsStream的疑问
背景: 某日临近下班,一个同事欲任何类中获取项目绝对路径,不通过Request方式获取,可是始终获取不到预想的路径.于是晚上回家google了一下,误以为是System.getProperty(&qu ...
- .NET 6,7,8 本地化的 IntelliSense 文件
官方的汉化教程 目前仅提供了.NET5 的本地化 IntelliSense 文件 https://mp.weixin.qq.com/s?__biz=MzI3ODc3NzIxMw==&mid=2 ...
- openEuler欧拉配置Nacos集群
一.安装Nacos systemctl stop firewalld systemctl disable firewalld mkdir -p /home/nacos tar xvf nacos- ...
- 中电金信:亚洲TOP1 霸榜15年
近日,国际权威语言服务研究机构CSA Research公布了<2022年全球语言服务提供商100强>和<亚太地区TOP 30语言服务商>排名报告. 中电金信凭借卓越的品质管控. ...
- PySAGES结合CUDA SPONGE增强采样
技术背景 在前面的一篇博客中,我们介绍过PySAGES这个增强采样软件的基本安装和使用方法.该软件类似于Plumed是一个外挂增强采样软件,但是PySAGES是基于Python语言和Jax框架来实现的 ...