File size: 2,147 Bytes
aef804e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | #!/bin/bash
# Contract Test Runner Script
# Runs API contract tests using Schemathesis with endpoint filtering
# Change to backend directory
cd "$(dirname "$0")/../../../" || exit 1
# Default values
VERBOSE=false
ENDPOINT=""
TEST_PATH="tests/integration/contracts/"
# Parse command line arguments
while [[ $# -gt 0 ]]; do
case $1 in
--verbose)
VERBOSE=true
shift
;;
--endpoint=*)
ENDPOINT="${1#*=}"
shift
;;
--endpoint)
ENDPOINT="$2"
shift 2
;;
--help)
echo "Usage: $0 [OPTIONS]"
echo ""
echo "Options:"
echo " --verbose Verbose output (-vv)"
echo " --endpoint=NAME Run specific endpoint tests"
echo " --help Show this help message"
echo ""
echo "Examples:"
echo " $0 # Run all contract tests"
echo " $0 --endpoint=agent # Run agent endpoint tests"
exit 0
;;
*)
echo "Unknown option: $1"
echo "Use --help for usage information"
exit 1
;;
esac
done
# Build pytest command
PYTEST_CMD="pytest -m contract"
# Add verbose flag if requested
if [ "$VERBOSE" = true ]; then
PYTEST_CMD="$PYTEST_CMD -vv"
else
PYTEST_CMD="$PYTEST_CMD -v"
fi
# Add test path
PYTEST_CMD="$PYTEST_CMD $TEST_PATH"
# Add endpoint filter if specified
if [ -n "$ENDPOINT" ]; then
PYTEST_CMD="$PYTEST_CMD -k $ENDPOINT"
fi
# Add pytest options
PYTEST_CMD="$PYTEST_CMD --tb=short"
# Print command
echo "Running: $PYTEST_CMD"
echo ""
echo "Contract tests validate API schema compliance"
echo ""
# Run pytest and capture exit code
eval "$PYTEST_CMD"
EXIT_CODE=$?
# Print summary
echo ""
if [ $EXIT_CODE -eq 0 ]; then
echo "✓ Contract tests passed - API schemas validated"
else
echo "✗ Contract tests failed - Schema violations detected"
fi
exit $EXIT_CODE
|