使用 shell 脚本从文件中测试其余 web 服务时如何获取成功计数、失败计数和失败原因

Posted

技术标签:

【中文标题】使用 shell 脚本从文件中测试其余 web 服务时如何获取成功计数、失败计数和失败原因【英文标题】:How to get success count, failure count and failure reason when testing rest webservices from file using shell script 【发布时间】:2018-05-11 15:15:36 【问题描述】:

您好,我正在使用 shell 脚本通过多个 if 条件测试 Web 服务,使用 shell 脚本编码我得到成功计数、失败计数和失败原因

success=0
failure=0

if curl -s --head --request DELETE http://localhost/bimws/delete/deleteUser?email=pradeepkumarhe1989@gmail.com | grep "200 OK" > /dev/null; then 
  success=$((success+1))
else
echo "DeleteUser is not working"$'\r' >> serverLog.txt
  failure=$((failure+1))
fi

if curl -s --head  --request GET http://localhost/bimws/get/getUserDetails?email=anusha4saju@gmail.com | grep "200 OK" > /dev/null; then 
  success=$((success+1))
else
 curl -s --head  --request GET http://localhost/bimws/get/getUserDetails?email=anusha4saju@gmail.com > f1.txt
 echo "getUserDetails is not working"$'\r' >> serverLog.txt
  failure=$((failure+1))
fi

if curl -s -i -X POST -H "Content-Type:application/json"  http://localhost/bimws/post/addProjectLocationAddress -d '"companyid":"10","projectid":"200","addresstypeid":"5","address":"1234 main st","city":"san jose","state":"CA","zip":"989898","country":"United States"' | grep "200 OK" > /dev/null; then 
  success=$((success+1))
else
echo "addProjectLocationAddress is not working"$'\r' >> serverLog.txt
  failure=$((failure+1))
fi

echo $success Success
echo $failure failure

但我期待从一个名为 web_services.txt 的文件中测试 Web 服务,该文件包含我使用 shell 脚本的所有 Web 服务我如何执行以及成功计数、失败计数和失败原因

web_services.txt

所有都是不同的调用删除、获取和发布

http://localhost/bimws/delete/deleteUser?email=pradeepkumarhe1989@gmail.com


http://localhost/bimws/get/getUserDetails?email=anusha4saju@gmail.com



http://localhost/bimws/post/addProjectLocationAddress -d '"companyid":"10","projectid":"200","addresstypeid":"5","address":"1234 main st"
,"city":"san jose","state":"CA","zip":"989898","country":"United States"'

【问题讨论】:

使用-w将http退出代码写入文件,然后统计不成功的并回显。 我是新手……我没有让你详细解释一下 【参考方案1】:

首先,您当前的代码不能正确处理空行。您需要跳过这些。

您的行已经包含 shell 命令。对它们运行 curl 没有任何意义。相反,您应该评估这些命令。

然后,你需要修改curl,让它通过添加-f来报告请求是否成功:

FILE=D:/WS.txt
success=0
failure=0
while read LINE; do
    if test -z "$LINE"; then
        continue
    fi
    if eval $(echo "$LINE" | sed 's/^curl/curl -f -s/') > /dev/null; then 
        success=$((success+1))
    else
        echo $LINE >> aNewFile.txt
        failure=$((failure+1))
    fi
done < $FILE
echo $success Success
echo $failure failure

【讨论】:

如果我的 curl 命令不止一行,那么上面的代码对于单行工作正常,然后第二个连续行计数为失败计数 if curl -s -i -X POST -H "Content-Type:application/json" localhost/bimws/post/addProjectLocationAddress -d '"companyid":"10","projectid":"200" ,"addresstypeid":"5","address":"1234 main st","city":"san jose","state":"CA","zip":"989898","country":"United州”' | grep "200 OK" > /dev/null;然后success=$((success+1)) else echo deleteUser is not working > aNewFile.txt failure=$((failure+1)) fi 在我回答时,WS.txt 确实只包含单行命令。如果它包含多行命令,那么简单的read 循环将无法执行。相反,您需要先解析命令,然后在上面的代码中运行循环的内部主体。但这确实是另一个不相关的问题。

以上是关于使用 shell 脚本从文件中测试其余 web 服务时如何获取成功计数、失败计数和失败原因的主要内容,如果未能解决你的问题,请参考以下文章

Shell脚本没有拿起密码文件......

Shell脚本之;Web自动化

linux shell 测试题目,在线等

shell脚本的调试

游戏搭服自动化脚本shell

shell脚本命令