Files
mkt.ose.tw/scripts/runtime_smoke_test.sh
2026-03-23 20:23:58 +08:00

167 lines
3.8 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
API_BASE_URL="${API_BASE_URL:-}"
SITE_ID="${SITE_ID:-}"
SITE_KEY="${SITE_KEY:-}"
EXPERIMENT_ID="${EXPERIMENT_ID:-}"
EXPERIMENT_KEY="${EXPERIMENT_KEY:-}"
VARIANT_ID="${VARIANT_ID:-}"
VARIANT_KEY="${VARIANT_KEY:-}"
VISITOR_ID="${VISITOR_ID:-visitor_001}"
PAGE_URL="${PAGE_URL:-}"
ASSIGNMENT_SALT="${ASSIGNMENT_SALT:-runtime-smoke}"
RELEASE_ID="${RELEASE_ID:-}"
RELEASE_VERSION="${RELEASE_VERSION:-1}"
if [[ -z "${API_BASE_URL}" ]]; then
echo "Missing API_BASE_URL"
exit 1
fi
if [[ -z "${SITE_ID}" && -z "${SITE_KEY}" ]]; then
echo "Missing SITE_ID or SITE_KEY"
exit 1
fi
if [[ -z "${PAGE_URL}" ]]; then
echo "Missing PAGE_URL"
exit 1
fi
if [[ -z "${EXPERIMENT_ID}" || -z "${EXPERIMENT_KEY}" ]]; then
echo "Missing EXPERIMENT_ID or EXPERIMENT_KEY"
exit 1
fi
if [[ -z "${VARIANT_ID}" || -z "${VARIANT_KEY}" ]]; then
echo "Missing VARIANT_ID or VARIANT_KEY"
exit 1
fi
CONTENT_HEADER="Content-Type: application/json"
EXPERIMENT_JSON="$(cat <<EOF
{
"experiment_id": "${EXPERIMENT_ID}",
"experiment_key": "${EXPERIMENT_KEY}",
"status": "running",
"site_key": "${SITE_KEY}",
"assignment_salt": "${ASSIGNMENT_SALT}",
"release_id": "${RELEASE_ID}",
"release_version": ${RELEASE_VERSION},
"payload": {
"operations": [
{
"selector_type": "css",
"selector_value": "h1",
"action": "replace_text",
"payload": {
"text": "Smoke Test Runtime Heading"
}
}
]
},
"variants": [
{
"id": "${VARIANT_ID}",
"variant_key": "${VARIANT_KEY}",
"traffic_weight": 50,
"is_control": false
},
{
"id": "${VARIANT_ID}_control",
"variant_key": "control",
"traffic_weight": 50,
"is_control": true
}
]
}
EOF
)"
echo ""
echo "== Runtime Bootstrap =="
curl --silent --show-error --fail \
-X POST \
-H "${CONTENT_HEADER}" \
-d "{
\"site_id\": \"${SITE_ID}\",
\"site_key\": \"${SITE_KEY}\",
\"url\": \"${PAGE_URL}\",
\"visitor_id\": \"${VISITOR_ID}\",
\"user_agent\": \"Mozilla/5.0\"
}" \
"${API_BASE_URL}/api/runtime/bootstrap"
echo ""
echo ""
echo "== Runtime Assign =="
curl --silent --show-error --fail \
-X POST \
-H "${CONTENT_HEADER}" \
-d "{
\"visitor_id\": \"${VISITOR_ID}\",
\"experiment\": ${EXPERIMENT_JSON}
}" \
"${API_BASE_URL}/api/runtime/assign"
echo ""
echo ""
echo "== Runtime Payload =="
curl --silent --show-error --fail \
-X POST \
-H "${CONTENT_HEADER}" \
-d "{
\"visitor_id\": \"${VISITOR_ID}\",
\"experiment\": ${EXPERIMENT_JSON}
}" \
"${API_BASE_URL}/api/runtime/payload"
echo ""
echo ""
echo "== Runtime Impression Event =="
curl --silent --show-error --fail \
-X POST \
-H "${CONTENT_HEADER}" \
-d "{
\"site_id\": \"${SITE_ID}\",
\"site_key\": \"${SITE_KEY}\",
\"experiment_id\": \"${EXPERIMENT_ID}\",
\"experiment_key\": \"${EXPERIMENT_KEY}\",
\"variant_id\": \"${VARIANT_ID}\",
\"variant_key\": \"${VARIANT_KEY}\",
\"visitor_id\": \"${VISITOR_ID}\",
\"event_name\": \"experiment_impression\",
\"payload\": {
\"page\": \"${PAGE_URL}\"
}
}" \
"${API_BASE_URL}/api/runtime/events/impression"
echo ""
echo ""
echo "== Runtime Conversion Event =="
curl --silent --show-error --fail \
-X POST \
-H "${CONTENT_HEADER}" \
-d "{
\"site_id\": \"${SITE_ID}\",
\"site_key\": \"${SITE_KEY}\",
\"experiment_id\": \"${EXPERIMENT_ID}\",
\"experiment_key\": \"${EXPERIMENT_KEY}\",
\"variant_id\": \"${VARIANT_ID}\",
\"variant_key\": \"${VARIANT_KEY}\",
\"visitor_id\": \"${VISITOR_ID}\",
\"event_name\": \"experiment_conversion\",
\"payload\": {
\"page\": \"${PAGE_URL}\"
}
}" \
"${API_BASE_URL}/api/runtime/events/conversion"
echo ""
echo ""
echo "Runtime smoke test completed."