36 / 89 · 04 API & Contract Testing with AI · Fuzzing Implementation← prev⊞ allnext →☰ Read as one page
6.3Running Fuzzing in CI
# .github/workflows/api-fuzz.yml
name: API Fuzzing
on:
schedule:
- cron: '0 2 * * *' # Nightly at 2 AM
jobs:
fuzz:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Start staging environment
run: docker-compose up -d
- name: Wait for API readiness
run: |
for i in $(seq 1 30); do
curl -s http://localhost:8080/health && break
sleep 2
done
- name: Run fuzz campaign
run: |
python -m api_fuzzer \
--schema docs/openapi.yaml \
--base-url http://localhost:8080 \
--output fuzz-report.json \
--endpoints "/api/v2/products,/api/v2/orders"
- name: Check for critical findings
run: |
CRITICAL=$(jq '[.findings[] | select(.severity=="HIGH" or .severity=="CRITICAL")] | length' fuzz-report.json)
if [ "$CRITICAL" -gt 0 ]; then
echo "::error::Found $CRITICAL high/critical findings"
jq '.findings[] | select(.severity=="HIGH" or .severity=="CRITICAL")' fuzz-report.json
exit 1
fi
- name: Upload fuzz report
if: always()
uses: actions/upload-artifact@v4
with:
name: fuzz-report
path: fuzz-report.json