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命令行工具.这些工具可以监控通过网络接口传输的数据,并测量目前哪些数据所传输的速度.入站流量和出站流量 ...
随机推荐
- ArcGIS遥感影像重采样操作及不同算法对比
本文介绍在ArcMap软件中,实现栅格图像重采样的具体操作,以及不同重采样方法的选择依据. 在之前的博客中,我们介绍了基于Python中Arcpy模块对栅格图像加以批量重采样的方法:而在Arc ...
- Netty+Spring Boot 加持,解锁高性能 Web 应用
MiniTomcat(https://github.com/daichangya/MiniTomcat) 这个项目是一个基于Netty的Java Web服务器,它提供了从简单HTTP服务器到集成Spr ...
- 鸿蒙NEXT开发案例:温度转换
[引言] 温度是日常生活中常见的物理量,但不同国家和地区可能使用不同的温度单位,如摄氏度(Celsius).华氏度(Fahrenheit).开尔文(Kelvin).兰氏度(Rankine)和列氏度(R ...
- 软件逆向之OD
OD全称OllyDbg ,是一种具有可视化界面的 32 位汇编-分析调试器.和IDA不同之处在于可以动态调试软件功能,可以有效的去分析程序构成. 以下软件讲解均以吾爱破解中的OD进行讲解.软件下载 打 ...
- 关于《完全手册Excel VBA典型实例大全——通过368个例子掌握》随书样例的下载
按照早先下载的电子教程查看和编写vba,有些例子使用运行错误,想着看看原始文件.容易看到,网上有提供的doc或者pdf文档,都不完整,可能是{完全手册Excel_VBA典型实例大全:通过368个例子掌 ...
- .NET周刊【11月第4期 2024-11-24】
国内文章 C# 入门深度学习:万字长文讲解微积分和梯度下降 https://www.cnblogs.com/whuanle/p/18551532 这篇文章主要介绍了使用 C# 进行深度学习的方法,特别 ...
- 【题目全解】ACGO巅峰赛#15
ACGO 巅峰赛#15 - 题目解析 间隔四个月再战 ACGO Rated,鉴于最近学业繁忙,比赛打地都不是很频繁.虽然这次没有 AK 排位赛(我可以说是因为周末太忙,没有充足的时间思考题目-(好吧, ...
- Nuxt.js 应用中的 request 事件钩子
title: Nuxt.js 应用中的 request 事件钩子 date: 2024/12/4 updated: 2024/12/4 author: cmdragon excerpt: 在构建现代 ...
- C#实现控制台显示动态进度条百分比
C#实现控制台显示动态进度条 前言 private static void Main(string[] args) { bool isBreak = false; ConsoleColor color ...
- Windows 触控笔
平板以及二合一平板均是触控屏,Laptop现在也有很多屏幕带触控 触控屏,都会配置触控笔配件,目前市场上一般是电容屏+电容笔的技术方案. 触控笔分为主动笔和被动笔,主动笔占绝大部分.主动笔是通过内部电 ...