首页 > 系统相关 >Linux服务器上shell脚本批量循环测试接口连通性,bash工具循环测试curl性能

Linux服务器上shell脚本批量循环测试接口连通性,bash工具循环测试curl性能

时间:2024-12-31 16:41:41浏览次数:1  
标签:连通性 log echo 循环 测试 time testUrl 033 total

使用curl的-w选项来输出各种时间信息

  • -o /dev/null 用于丢弃响应体,只关心头部信息
  • -s 用于静默模式,不输出进度信息
  • %{http_code} 输出HTTP状态码
  • %{time_namelookup} 输出DNS解析时间
  • %{time_connect} 输出连接时间
  • %{time_total} 输出总时间(包括响应时间)

结合shell脚本的循环执行逻辑就可以批量测试了。
实例:

#!/bin/bash
# 测试次数
num=2
testUrl="http://wenxuebank.com/book/info/b2d5e8"

start_time=$(date +%Y%m%d%H%M%S)
echo -e ">>>总次数=${num} URL=${testUrl} 开始>>> \n" >> ./log_testUrl_${start_time}.log

while true; do
	echo ${num}
  if [ ${num} -lt 1 ]; then
    echo -e "<<< 完成 <<< \n" >> ./log_testUrl_${start_time}.log
	exit 1
  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】 api 接口回调耗时 ${total_time_show} seconds,小于1s 正常\n ${total_time} \n" >> ./log_testUrl_${start_time}.log
	else
		echo -e "\033[1;31m############### \n 【$date_now】 api 接口回调耗时 ${total_time_show} seconds,大于1s 异常 \n ${total_time}\n################\033[0m\n" >> ./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文件里(例如 test_api_240118.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 日志文件里。
【完】

标签:连通性,log,echo,循环,测试,time,testUrl,033,total
From: https://www.cnblogs.com/xiongzaiqiren/p/18612504

相关文章

  • HackMyVM-Adria靶机的测试报告
    目录一、测试环境1、系统环境2、使用工具/软件二、测试目的三、操作过程1、信息搜集2、Getshell3、提权四、结论一、测试环境1、系统环境渗透机:kali2021.1(192.168.101.127)靶 机:debian/linux(192.168.101.226)注意事项:该类型靶场只能在virtualBox上搭建,因......
  • 做软件测试,28岁失业了,转行做什么好呢?零基础入门到精通,收藏这篇就够了
    如今做软件测试失业已经不是什么新鲜事了,失业并不可怕,最可怕的是失业后不知道要干嘛。见过太多人,害怕失业,但又恐惧失业后自己能做什么?计算机热门就业方向从目前市场情况来讲,网络安全的就业前景是非常不错的,2022年的统计数据,网络安全专业的缺口已经增长到140万人。1、就......
  • 由 Mybatis 源码畅谈软件设计(五):ResultMap 的循环引用
    作者:京东保险王奕龙本节我们来了解Mybatis是如何处理ResultMap的循环引用,它的解决方案非常值得在软件设计中参考。另外作为引申,大家可以了解一下Spring是如何解决Bean的循环注入的。以单测org.apache.ibatis.submitted.permissions.PermissionsTest#checkNestedResult......
  • 记一次 .NET某汗液测试机系统 崩溃分析
    一:背景1.讲故事上个月在社区写的文章比较少,一直关注的朋友应该知道那段时间被狗咬了以及一些琐事处理,所以手头上也攒了不少需要分享的案例,这段时间比较空闲,逐个给大家做个分享吧,刚好年后为新版的.NET高级调试训练营做案例储备,所以抓紧时间疯狂输出吧!这次生产事故的dump是训......
  • 车身舒适系统HIL仿真测试解决方案
    概述    车身舒适控制系统是指为驾乘人员提供舒适性控制的装置,包括车内外照明控制、中央门锁、电动窗机、智能雨刮器、无钥匙系统、电动转向柱、电动座椅、辅助加热系统、智能空调器等,有着开关及传感器种类繁多、负载及执行器样式各异、硬件设计高冗余、高集成度、软件版......
  • 服务器上的网站需要测试,如何设置访问?
    当您需要在服务器上设置一个新网站进行测试时,确保其能够顺利访问是至关重要的。以下是详细的步骤指南和注意事项,帮助您顺利完成这一操作:确认服务器状态:首先,确保服务器处于正常运行状态。登录到云服务提供商的管理控制台,检查服务器是否已启动并分配了正确的IP地址(如127.0.0.1)......
  • iOS 覆盖率检测原理与增量代码测试覆盖率工具实现11
     背景对苹果开发者而言,由于平台审核周期较长,客户端代码导致的线上问题影响时间往往比较久。如果在开发、测试阶段能够提前暴露问题,就有助于避免线上事故的发生。代码覆盖率检测正是帮助开发、测试同学提前发现问题,保证代码质量的好帮手。对于开发者而言,代码覆盖率可以反馈两......
  • iOS 覆盖率检测原理与增量代码测试覆盖率工具实现10
     背景对苹果开发者而言,由于平台审核周期较长,客户端代码导致的线上问题影响时间往往比较久。如果在开发、测试阶段能够提前暴露问题,就有助于避免线上事故的发生。代码覆盖率检测正是帮助开发、测试同学提前发现问题,保证代码质量的好帮手。对于开发者而言,代码覆盖率可以反馈两......
  • web安全测试
    1、软件安全测试概述网络世界中,安全问题无处不在,安全意识仍需提高,只有通过不断地安全测试,才能保证我们的软件不被非法入侵,才能够尽量的去规避我们软件中的一些问题,提升软件质量和安全。21世纪以来,智能化的软件成为商业决策、推广等不可缺少的利器,很多软件涉及了客户商业上重要......
  • 连通性
    图论中的连通性相关的算法(适合学过之后,总结复习的观看)割边,割点,缩点其实都有个共同的名字:tarjan割边对于一个连通的无向图,如果存在一条边,去除后,使其分为两个子图,无法连通,那么这个边可以称为割边例题炸铁路对于一个访问过的点,且不是父节点\(low[u]=min(low[u],dfn[v])\)......