shell脚本发送随机请求

需求

在日常开发测试中,模拟发送请求是一项极为常见且重要的任务,尤其是在对API进行全面测试以验证其响应准确性、性能稳定性以及边界条件的处理能力时。

参数随机

为了实现更为真实和全面的测试环境,我们需要能够模拟发送具备随机性的不同参数请求,这些参数的随机性可以体现在请求内容、查询参数、头部信息等各个方面。

不同时间不同发送频率

发送请求的频率也应能够随时间动态变化,以模拟实际使用场景中可能出现的突发请求、高峰时段及低峰时段的请求模式。通过编写脚本实现这种动态变化的发送频率,可以更精确地评估系统在不同负载下的表现。

处理响应

考虑到实际测试场景中可能存在对特定请求的响应时间要求,我们还需要在发送请求后根据具体场景设置等待需求。这意味着脚本需要能够处理请求响应的延迟,并在必要时调整发送下一个请求的时机,以确保测试过程能够按照预定的时间线进行。

实现

为了实现上述需求,计划使用Shell脚本结合如curl这样的命令行工具来编写模拟请求发送的脚本。脚本中可以通过随机数生成器来创建具有随机性的参数,利用循环和条件语句来控制请求的发送频率,以及使用sleep函数来实现对响应时间的模拟等待。

判断时间区域

# 获取当前小时和分钟
current_hour=$(date +%H)
echo "当前时间戳: $ts $current_hour"
if [[ $current_hour -ge 10 && $current_hour -lt 13 ]] || [[ $current_hour -ge 18 && $current_hour -le 23 ]]; then  
    echo "当前时间在10:00-13:00或18:00-23:00之间。"   
else
    echo "当前时间不在10:00-13:00或18:00-23:00之间。"
fi

随机数

输出一个介于0.5到1.9之间的随机浮点数

awk 'BEGIN{srand(); print ((1.5 - 0.1) * rand()+0.5);}'

awk 是一个强大的文本处理工具,常用于Linux和Unix环境中。它允许你编写简单的程序来处理数据行。awk
程序的基本结构可以包括三个部分:BEGIN 部分、主程序部分以及END部分。

  • BEGIN{srand();}:这部分告诉 awk 在开始处理任何输入之前执行一些初始化代码。
  • srand() 函数用于初始化随机数生成器。如果不调用 srand() 或者每次调用时使用相同的种子值,那么每次运行程序时产生的随机数序列将会相同。
  • print ((1.5 - 0.1) * rand()+0.5);:这部分代码计算并打印一个随机数。具体来说:
    rand() 返回一个大于等于0且小于1的随机浮点数。
    (1.5 - 0.1) 计算出结果为1.4。
  • (1.5 - 0.1) * rand() 会返回一个介于0(包含)到1.4(不包含)之间的随机数。
    最后,加上0.5,得到的结果将是一个介于0.5(包含)到1.9(不包含)之间的随机数。

文件随机读取

shuf
是一个Unix/Linux命令行工具,用于生成伪随机排列(洗牌)。它的名字来源于“shuffle”(洗牌),通常用来从列表中随机抽取元素。

使用

 shuf -n 1 a.txt  

的各部分含义如下:

  • shuf:这是命令的名字,用于执行洗牌操作。
  • -n 1:这个选项告诉 shuf 只要输出一行(一个元素)。-n 后面跟的是要抽取的行数,在这里是指定输出第一行经过随机选择后的结果。
  • a.txt:这是命令的作用对象,即输入文件名。shuf 将从这个文件中读取内容,并从中随机选择行。

完整代码

#!/bin/bash
while (1>0)
do
ts=$(date +%s)
# echo "当前时间戳: $ts"
# 获取当前小时和分钟
current_hour=$(date +%H)
echo "当前时间戳: $ts $current_hour"
if [[ $current_hour -ge 10 && $current_hour -lt 13 ]] || [[ $current_hour -ge 18 && $current_hour -le 23 ]]; then  
    echo "当前时间在10:00-13:00或18:00-23:00之间。"
    stime=$(awk 'BEGIN{srand(); print ((1.5 - 0.1) * rand()+0.5);}' | awk '{printf "%.1f\n", $0}')
else
    echo "当前时间不在10:00-13:00或18:00-23:00之间。"
    stime=$(awk 'BEGIN{srand(); print ((3 - 0.9) * rand() + 2.1);}' | awk '{printf "%.1f\n", $0}')
fi
chnid="001"
filename="uuid-$chnid.txt"
codefile="code-$chnid.txt"
echo $filename $mediafile
uu_token=`shuf -n 1 $filename`
echo "$uu_token"
uuid=$(echo "$uu_token" | cut -d',' -f1)
token=$(echo "$uu_token" | cut -d',' -f2)
tid=$(echo "$uu_token" | cut -d',' -f3)
code=`shuf -n 1 $codefile`
download_url="http://127.0.0.1:8081/test/v1/hello?chnid=$chnid&uuid=$uuid&tid=$tid&ts=$ts&code=$code&token=$token"
echo $download_url
wget -qO - $download_url
echo $stime
sleep $stime
done

  • 15
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值