您好,我尝试仅在应用程序启动并运行时执行特定测试(我正在使用 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
Run Code Online (Sandbox Code Playgroud)
如果应用程序已启动并正在运行,则执行测试
请让我知道脚本中缺少什么。
谢谢
-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
Run Code Online (Sandbox Code Playgroud)
但由于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
Run Code Online (Sandbox Code Playgroud)
这&& break意味着只有当请求成功时我们才会跳出循环;curl 的参数--fail意味着只有服务器返回非错误的退出状态(例如 200),它才会返回成功。