@@ -88,36 +88,51 @@ function validate_service() {
8888 local FORM_DATA5=" ${11} "
8989 local FORM_DATA6=" ${12} "
9090
91- if [[ $VALIDATE_TYPE == * " json" * ]]; then
92- HTTP_RESPONSE=$( curl --silent --write-out " HTTPSTATUS:%{http_code}" -X POST -d " $INPUT_DATA " -H ' Content-Type: application/json' " $URL " )
93- else
94- CURL_CMD=(curl --silent --write-out " HTTPSTATUS:%{http_code}" -X POST -F " $FORM_DATA1 " -F " $FORM_DATA2 " -F " $FORM_DATA3 " -F " $FORM_DATA4 " -F " $FORM_DATA5 " -H ' Content-Type: multipart/form-data' " $URL " )
95- if [[ -n " $FORM_DATA6 " ]]; then
96- CURL_CMD+=(-F " $FORM_DATA6 " )
91+ local MAX_RETRIES=${13:- 3}
92+ local RETRY_DELAY=${14:- 2}
93+
94+ local retry_count=0
95+ local success=false
96+
97+ while [ $retry_count -lt $MAX_RETRIES ] && [ " $success " = false ]; do
98+ retry_count=$(( retry_count + 1 ))
99+
100+ echo " [ $SERVICE_NAME ] 尝试第 $retry_count /$MAX_RETRIES 次..."
101+ if [[ $VALIDATE_TYPE == * " json" * ]]; then
102+ HTTP_RESPONSE=$( curl --silent --write-out " HTTPSTATUS:%{http_code}" -X POST -d " $INPUT_DATA " -H ' Content-Type: application/json' " $URL " )
103+ else
104+ CURL_CMD=(curl --silent --write-out " HTTPSTATUS:%{http_code}" -X POST -F " $FORM_DATA1 " -F " $FORM_DATA2 " -F " $FORM_DATA3 " -F " $FORM_DATA4 " -F " $FORM_DATA5 " -H ' Content-Type: multipart/form-data' " $URL " )
105+ if [[ -n " $FORM_DATA6 " ]]; then
106+ CURL_CMD+=(-F " $FORM_DATA6 " )
107+ fi
108+ HTTP_RESPONSE=$( " ${CURL_CMD[@]} " )
97109 fi
98- HTTP_RESPONSE=$( " ${CURL_CMD[@]} " )
99- fi
100- HTTP_STATUS=$( echo $HTTP_RESPONSE | tr -d ' \n' | sed -e ' s/.*HTTPSTATUS://' )
101- RESPONSE_BODY=$( echo $HTTP_RESPONSE | sed -e ' s/HTTPSTATUS\:.*//g' )
102-
103- docker logs ${DOCKER_NAME} >> ${LOG_PATH} /${SERVICE_NAME} .log
104-
105- # check response status
106- if [ " $HTTP_STATUS " -ne " 200" ]; then
107- echo " [ $SERVICE_NAME ] HTTP status is not 200. Received status was $HTTP_STATUS "
108- exit 1
109- else
110- echo " [ $SERVICE_NAME ] HTTP status is 200. Checking content..."
111- fi
112- # check response body
113- if [[ " $RESPONSE_BODY " != * " $EXPECTED_RESULT " * ]]; then
114- echo " EXPECTED_RESULT==> $EXPECTED_RESULT "
115- echo " RESPONSE_BODY==> $RESPONSE_BODY "
116- echo " [ $SERVICE_NAME ] Content does not match the expected result: $RESPONSE_BODY "
117- exit 1
118- else
119- echo " [ $SERVICE_NAME ] Content is as expected."
120- fi
110+ HTTP_STATUS=$( echo $HTTP_RESPONSE | tr -d ' \n' | sed -e ' s/.*HTTPSTATUS://' )
111+ RESPONSE_BODY=$( echo $HTTP_RESPONSE | sed -e ' s/HTTPSTATUS\:.*//g' )
112+
113+ docker logs ${DOCKER_NAME} >> ${LOG_PATH} /${SERVICE_NAME} .log
114+
115+ # check response status
116+ if [ " $HTTP_STATUS " -ne " 200" ]; then
117+ echo " [ $SERVICE_NAME ] HTTP status is not 200. Received status was $HTTP_STATUS "
118+ exit 1
119+ else
120+ echo " [ $SERVICE_NAME ] HTTP status is 200. Checking content..."
121+ fi
122+ # check response body
123+ if [[ " $RESPONSE_BODY " != * " $EXPECTED_RESULT " * ]]; then
124+ echo " EXPECTED_RESULT==> $EXPECTED_RESULT "
125+ echo " RESPONSE_BODY==> $RESPONSE_BODY "
126+ echo " [ $SERVICE_NAME ] Content does not match the expected result: $RESPONSE_BODY "
127+ if [ $retry_count -lt $max_retries ]; then
128+ echo " [ $SERVICE_NAME ] will retry after $retry_delay seconds ..."
129+ sleep ${retry_delay} s
130+ fi
131+ else
132+ success=true
133+ echo " [ $SERVICE_NAME ] Content is as expected."
134+ fi
135+ done
121136
122137 sleep 1s
123138}
0 commit comments