当前位置: 首页 > article >正文

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


http://www.kler.cn/a/288907.html

相关文章:

  • 瑞吉外卖项目学习笔记(七)新增菜品、(批量)删除菜品
  • Android U 多任务启动分屏——system_server流程(更新中)
  • 【MySQL基础篇】多表查询(隐式/显式内连接、左/右外连接、自连接查询、联合查询、标量/列/行/表子查询)
  • 虚幻引擎结构之ULevel
  • 远程控制macOS一直卡在100%,能连接上了却只显示了壁纸?
  • 重塑数字文档处理:TX Text Control的2024年里程碑
  • 计算机视觉之 GSoP 注意力模块
  • 《第二十六章 IO 流 - 字节流》
  • 在项目中使用 redis存储 数据,提高 项目运行速度
  • 【Linux】 理解 Linux 中的 `dup2` 函数
  • Spring框架中的@EventListener注解浅谈
  • 【C++ Primer Plus习题】8.2
  • 直播路由器的原理是什么
  • Linux CentOS 7.39 安装mysql8
  • rabbitmq发送的消息接收不到
  • 告别文档处理烦恼,PDF Guru Anki一键搞定所有
  • 多目标应用:基于双存档模型的多模态多目标进化算法(MMOHEA)的移动机器人路径规划研究(提供MATLAB代码)
  • C语言之猜数字小游戏
  • 【苍穹外卖】Day3 菜品接口
  • dinput8.dll错误应该如何修复呢?五种快速修复dinput8.dll错误的问题
  • SpringBoot开发——初步了解SpringBoot
  • CephX 认证机制及用户管理
  • 功能测试常用的测试用例大全
  • 大模型入门 ch01:大模型概述
  • 强化学习,第 5 部分:时间差异学习
  • 数据结构——单链表相关操作