47 lines
1.4 KiB
Bash
Executable File
47 lines
1.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
: "${OPENAPI_SCHEMA_URL:=https://cfw-auth.bowong.cc/api/auth/open-api/generate-schema}"
|
|
: "${OPENAPI_SCHEMA:=reports/openapi/cfw-auth-openapi.json}"
|
|
: "${API_BASE_URL:?Set API_BASE_URL, for example https://cfw-auth.bowong.cc/api/auth or http://localhost:8788/api/auth}"
|
|
: "${REPORT_DIR:=reports/schemathesis}"
|
|
: "${MAX_EXAMPLES:=25}"
|
|
: "${TEST_SEED:=12345}"
|
|
: "${REQUEST_TIMEOUT:=10}"
|
|
: "${SCHEMATHESIS_PHASES:=examples,coverage}"
|
|
: "${SCHEMATHESIS_CHECKS:=all}"
|
|
|
|
mkdir -p "$(dirname "$OPENAPI_SCHEMA")" "$REPORT_DIR"
|
|
|
|
curl -fsSL "$OPENAPI_SCHEMA_URL" -o "$OPENAPI_SCHEMA"
|
|
|
|
if command -v npx >/dev/null 2>&1; then
|
|
npx --yes @redocly/cli lint "$OPENAPI_SCHEMA"
|
|
fi
|
|
|
|
AUTH_ARGS=()
|
|
if [[ -n "${API_TOKEN:-}" ]]; then
|
|
AUTH_ARGS=(-H "Authorization: Bearer ${API_TOKEN}")
|
|
fi
|
|
|
|
SCHEMATHESIS_CMD=()
|
|
if command -v schemathesis >/dev/null 2>&1; then
|
|
SCHEMATHESIS_CMD=(schemathesis)
|
|
elif command -v uvx >/dev/null 2>&1; then
|
|
SCHEMATHESIS_CMD=(uvx schemathesis)
|
|
else
|
|
echo "Install schemathesis or uv first." >&2
|
|
exit 127
|
|
fi
|
|
|
|
"${SCHEMATHESIS_CMD[@]}" run "$OPENAPI_SCHEMA" \
|
|
--url "$API_BASE_URL" \
|
|
--checks "$SCHEMATHESIS_CHECKS" \
|
|
--phases "$SCHEMATHESIS_PHASES" \
|
|
--max-examples "$MAX_EXAMPLES" \
|
|
--seed "$TEST_SEED" \
|
|
--request-timeout "$REQUEST_TIMEOUT" \
|
|
--report junit,har,vcr \
|
|
--report-dir "$REPORT_DIR" \
|
|
"${AUTH_ARGS[@]}"
|