使用 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 服务时如何获取成功计数、失败计数和失败原因的主要内容,如果未能解决你的问题,请参考以下文章