嗨,我仅在应用程序启动且正在运行时才尝试执行特定的测试(我正在使用docker),我试图借助bash脚本来实现这一目标。我期望的是我需要运行一个循环,直到收到来自应用程序的200个状态,一旦收到200个脚本,就应该继续执行测试。我正在尝试bash脚本,如下
#!/bin/bash
urlstatus=0
until [ $urlstatus -ne 200 ]; do
urlstatus=$(curl -o /dev/null --silent --head --write-out '%{http_code}' "http://localhost:8000/animals")
echo $urlstatus
done
如果应用程序已启动并正在运行,请执行测试
请让我知道脚本中缺少什么。
谢谢
答案 0 :(得分:0)
-ne
与您实际想要的测试完全相反;循环直到退出状态为200,您应该拥有-eq
,甚至更好(如果存在非数字值,则避免比较时出现错误消息)=
。
#!/bin/sh
fetchstatus() {
curl \
-o /dev/null \
--silent \
--head \
--write-out '%{http_code}' \
"http://localhost:8000/animals"
}
urlstatus=$(fetchstatus) # initialize to actual value before we sleep even once
until [ "$urlstatus" = 200 ]; do # until our result is success...
sleep 1 # wait a second...
urlstatus=$(fetchstatus) # then poll again.
done
但是由于curl
可以调整其退出状态以指示请求是否成功,所以您甚至不需要它。使用--fail
,您可以直接分支:
#!/bin/sh
while :; do
curl -sS --fail -o /dev/null "http://localhost:8000/animals") && break
sleep 1 # actually give your server a little rest
done
&& break
意味着我们只有在请求成功的情况下才跳出循环。 --fail
参数curl表示只有在服务器返回了非错误的退出状态(例如200)时,它才会返回成功。