View all services
Talk to QA Advisor
Browse the Knowledge Hub74 resources
/Test Cases/Outbound webhook test cases

Test cases

Webhook test cases, for when the consumer stops answering

Twenty eight cases covering retry backoff and dead letter stores, one dead consumer degrading the pipeline, payload signing and replay windows, secret rotation, stable event identifiers for deduplication, out of order delivery, endpoint SSRF, emitting before commit and delivery under burst.

28cases/8coverage types/9security cases/FreeCSV download

All 28 test cases, ready to copy

Free to use and adapt, no sign-up. Download as CSV or Markdown, or copy it straight into your own tooling.

Last updated

28 worked examples

WH-01

Deliver an event to a healthy endpoint

TypeFunctionalPriorityHigh
Test data
A subscribed event triggered against an endpoint returning 200
Expected result
Delivered once with the documented payload, headers and signature, and the attempt is recorded with its status code and response time.
WH-02

Retry a failed delivery with backoff

TypeStatePriorityHigh
Test data
An endpoint returning 500, then recovering after three attempts
Expected result
Retries follow the documented schedule with exponential backoff and jitter, and the event is delivered on recovery rather than abandoned after the first failure.
WH-03

Distinguish retryable from permanent failures

TypeNegativePriorityHigh
Test data
Responses of 500, 429, 408, 400 and 410 from the endpoint
Expected result
Server errors and rate limits are retried, a permanent client error is not retried indefinitely, and 410 disables the subscription according to policy.
WH-04

Honour a Retry-After header

TypeBoundaryPriorityMedium
Test data
A 429 response carrying Retry-After
Expected result
Next attempt respects the stated delay rather than the default schedule, so a rate limited consumer is not made worse by the retry policy.
WH-05

Stop retrying and move to a dead letter store

TypeStatePriorityHigh
Test data
An endpoint failing continuously past the maximum attempts
Expected result
Event lands in a dead letter store that is visible and replayable, rather than being dropped with only a log line to show for it.
WH-06

Contain the backlog when a consumer is down for hours

TypeBoundaryPriorityHigh
Test data
A high volume subscription whose endpoint is unreachable for six hours
Expected result
Backlog is bounded and does not starve deliveries to healthy subscribers. One dead consumer must not degrade the pipeline for everyone else.
WH-07

Disable a persistently failing subscription

TypeStatePriorityHigh
Test data
An endpoint failing every delivery for the documented disable threshold
Expected result
Subscription is disabled, the owner is notified through another channel, and re-enabling replays or skips the backlog according to a stated rule.
WH-08

Sign the payload so the receiver can verify it

TypeSecurityPriorityHigh
Test data
Inspect the signature header, then alter one byte of the body and re-verify
Expected result
Signature covers the raw body and a timestamp, verification fails on any alteration, and the algorithm is documented for the receiver to implement.
WH-09

Include a timestamp that bounds replay

TypeSecurityPriorityHigh
Test data
Replay a valid signed request well outside the tolerance window
Expected result
Timestamp is part of the signed content so a captured request cannot be replayed indefinitely against the receiver.
WH-10

Rotate a signing secret without dropping deliveries

TypeStatePriorityHigh
Test data
Rotate the secret while deliveries are in flight
Expected result
Both secrets are accepted during an overlap window so the receiver can migrate, and the overlap ends at a documented time.
WH-11

Give every event a stable unique identifier

TypeFunctionalPriorityHigh
Test data
Force a duplicate delivery of the same logical event
Expected result
Both carry the same event identifier so the receiver can deduplicate. Delivery is at-least-once, so this identifier is what makes it safe.
WH-12

Document and test out of order delivery

TypeBoundaryPriorityHigh
Test data
An updated event delivered before the created event for the same object
Expected result
Payload carries a sequence number or version so the receiver can order them, since retries make out of order arrival normal rather than exceptional.
WH-13

Deliver only the events a subscription asked for

TypeSecurityPriorityHigh
Test data
A subscription for one event type while other types are triggered
Expected result
Only the subscribed types are sent, and no event from another account reaches this endpoint under any filtering configuration.
WH-14

Scope payload content to what the subscriber may see

TypeSecurityPriorityHigh
Test data
An event whose underlying object contains fields restricted from the subscriber
Expected result
Restricted fields are omitted. A webhook is an unauthenticated push, so it must not carry data the receiver could not request through the API.
WH-15

Reject an endpoint pointing at an internal address

TypeSecurityPriorityHigh
Test data
Register an endpoint on localhost, a private range, a cloud metadata address and a hostname resolving privately
Expected result
Each refused after resolution rather than by string inspection, since an unchecked endpoint turns the webhook sender into a server side request forgery tool.
WH-16

Require transport security on the endpoint

TypeSecurityPriorityHigh
Test data
Register a plain HTTP endpoint and one with an invalid certificate
Expected result
Both refused or explicitly opted into with a warning, since payloads frequently carry personal or financial data.
WH-17

Time out a slow endpoint rather than waiting

TypeBoundaryPriorityHigh
Test data
An endpoint that accepts the connection then never responds
Expected result
Attempt is abandoned at the documented timeout and treated as retryable. An unbounded wait exhausts the delivery worker pool.
WH-18

Handle a redirect from the endpoint

TypeNegativePriorityMedium
Test data
An endpoint responding with a redirect to another host, and to an internal address
Expected result
Documented behaviour applied consistently, and a redirect is never followed to an address that would have been refused at registration.
WH-19

Cap the payload size

TypeBoundaryPriorityMedium
Test data
An event whose object is unusually large, such as a record with many nested items
Expected result
Payload is capped or truncated to a documented shape with a reference the receiver can fetch, rather than sending an unbounded body.
WH-20

Send a test event on demand

TypeFunctionalPriorityMedium
Test data
Trigger a test delivery from the subscription settings
Expected result
Test event is clearly marked as a test, is signed identically to a real one, and does not appear in production event counts.
WH-21

Replay a past event deliberately

TypeStatePriorityHigh
Test data
Replay a delivered event and a dead lettered one
Expected result
Replay reuses the original event identifier so the receiver can recognise it as a duplicate, and the replay is recorded distinctly from the original attempt.
WH-22

Show a usable delivery log

TypeFunctionalPriorityHigh
Test data
A subscription with successes, retries, failures and a dead letter
Expected result
Each attempt shows timestamp, status code, response time and truncated response body, with the request body available for reproduction.
WH-23

Redact secrets from the delivery log

TypeSecurityPriorityHigh
Test data
Inspect stored request and response bodies and headers for a delivery
Expected result
Signing secret and any credential are absent, and the stored payload is subject to the same retention rules as the underlying data.
WH-24

Fire the event only after the change is committed

TypeStatePriorityHigh
Test data
Trigger an event inside a transaction that then rolls back
Expected result
No event is sent. Emitting before commit means the receiver acts on a change that never happened and cannot be told so afterwards.
WH-25

Deliver every event when many fire at once

TypePerformancePriorityHigh
Test data
A bulk operation producing thousands of events in a short window
Expected result
All are queued and delivered within the stated window, none is dropped, and the burst does not exhaust the worker pool for other subscribers.
WH-26

Handle many subscriptions to the same event

TypePerformancePriorityMedium
Test data
One event with many subscribers, one of which is slow
Expected result
Each subscriber is delivered to independently, and a slow one does not delay the others or cause the event to be retried for those already delivered.
WH-27

Publish a stable payload contract

TypeCompatibilityPriorityHigh
Test data
Add an optional field, then attempt to remove one and change a type
Expected result
Additions are safe, removals and type changes are breaking and belong behind a version, since receivers deploy on their own schedule.
WH-28

Report delivery health to the subscription owner

TypeStatePriorityMedium
Test data
A subscription whose failure rate crosses the alerting threshold
Expected result
Owner is alerted through a channel that does not depend on the failing webhook, with enough detail to identify the cause.

What goes in each field

ID

Required

Stable identifier, prefixed by module.

Test case

Required

What is being verified, in one line.

Type

Functional, negative, boundary, security, state, performance, accessibility or compatibility. Use it to check coverage is spread rather than clustered on the happy path.

Priority

Risk based. Anything that silently drops an event, delivers to the wrong subscriber, or lets a dead consumer degrade the whole delivery pipeline is High. Signature and secret handling is High because the receiver trusts it.

Test data

The specific values, including the invalid and boundary ones.

Expected result

Required

The precise observable outcome, including message text where the wording itself is the requirement.

How To Use This

Take the consumer offline for six hours

Delivering one event to a healthy endpoint is the path everyone tests. These four conditions are where webhook pipelines actually fail.

Kill one consumer, watch the others

A high volume subscription failing for hours must not starve deliveries to healthy subscribers. One dead endpoint degrading the whole pipeline is the classic outage here.

Deliver the same event twice

Delivery is at-least-once, so duplicates are normal. Both copies need the same event identifier, or the receiver has no way to deduplicate and will act twice.

Send updated before created

Retries make out of order arrival routine. Without a sequence number or version in the payload, the receiver applies whichever landed last and ends up in the wrong state.

Roll back the transaction that fired it

Emit inside a transaction, then roll back. If the event still went out, the receiver has acted on a change that never happened and you cannot take it back.

What Most Sets Miss

Why webhook pipelines fail quietly

A webhook system makes two guarantees that most implementations do not state and most receivers do not expect: delivery is at-least-once, and order is not guaranteed. Both follow directly from retrying. If the sender does not attach a stable event identifier, the receiver cannot deduplicate, so every retry becomes a second order, a second charge or a second email. If the payload carries no sequence number or version, an updated event arriving before its created event leaves the receiver in a state that matches neither. Neither problem appears while everything is healthy, which is exactly why they ship.

The sender side failure is a dead consumer. One subscription whose endpoint has been unreachable for hours accumulates a backlog, and if that backlog shares a worker pool with every other subscriber, one broken integration degrades delivery for all of them. Bounding the backlog, timing out slow endpoints rather than waiting indefinitely, and disabling a persistently failing subscription with a notification through another channel are three separate cases and all three are load bearing.

Security on a webhook is unusual because the receiver has no session and no way to authenticate the sender beyond what the payload carries. That makes the signature the entire trust boundary: it has to cover the raw body plus a timestamp, so that altering the body fails verification and a captured request cannot be replayed a week later. Secret rotation needs an overlap window, otherwise rotating breaks every receiver at once. And the endpoint URL itself is untrusted input, so registering one that resolves to a private address turns your sender into a server side request forgery tool aimed at your own network.

Finally, two things that are easy to get subtly wrong. Payload scope: a webhook is an unauthenticated push, so it must never carry fields the subscriber could not have requested through the API. And emission timing: firing the event inside a transaction that later rolls back tells the receiver about a change that never happened, and there is no correction message that undoes what they already did with it.

Suggest an improvement

Testing a webhook or event delivery layer?

QAble tests integration surfaces end to end, including retry and dead letter behaviour, signature verification, delivery under burst and isolation between subscribers.

API testing services

More test case sets

View all

Test cases for a login page

Test cases
25 cases across functional, negative, boundary, security, session and accessibility paths, including account enumeration and lockout.

Test cases for a registration form

Test cases
28 cases covering validation, duplicate accounts, email verification, password rules and the enumeration leak most signup forms ship with.

Test cases for search functionality

Test cases
28 cases across relevance, partial and fuzzy matching, filters, pagination, empty states, injection attempts and performance under load.

Test cases for a shopping cart

Test cases
27 cases on quantity limits, price recalculation, stock changes, coupon stacking, guest to account merge and cart persistence.

Test cases for checkout and payment

Test cases
30 cases including 3D Secure, declines, timeouts, duplicate charges, idempotency, refunds and partial captures.

Test cases for file upload

Test cases
28 cases on size and type limits, spoofed content types, malicious filenames, progress, resume, virus scanning and storage limits.

Test cases for forgot password

Test cases
26 cases on reset token expiry, single use enforcement, session invalidation and the enumeration and rate limit gaps that are routine here.

Test cases for OTP verification

Test cases
26 cases on expiry, resend throttling, attempt limits, code reuse, delivery failure and the brute force window teams forget to close.

Test cases for user roles and permissions

Test cases
26 cases on horizontal and vertical privilege checks, direct object access, role changes mid-session and permission inheritance.

Test cases for form validation

Test cases
27 rules-based cases on required fields, length and numeric boundaries, client and server parity, hidden field tampering and error accessibility.

Test cases for a date picker

Test cases
26 cases on timezone shifts, ambiguous day and month order, impossible dates, min and max limits, leap years and keyboard operation.

Test cases for pagination

Test cases
24 cases on ordering stability, records changing mid-session, page size caps, deep offset cost, permission-filtered totals and state restore.

Test cases for push notifications

Test cases
26 cases on app states, deep link routing, token release on sign out, lock screen privacy, preferences, provider failures and platform differences.

Test cases for reports and data export

Test cases
25 cases on permission filtering in the file, spreadsheet formula injection, encoding, typed numbers and dates, row limits and audit logging.

Test cases for a chatbot

Test cases
28 cases on paraphrased intents, context, fallback loops, human handoff, policy grounding, prompt injection and data scoping.

Test cases for net banking transactions

Test cases
28 cases on duplicate debits from a retried request, concurrent transfers against one balance, daily limits across channels, beneficiary cooling periods, second factor binding and reconciliation.

Test cases for wallet and UPI payments

Test cases
28 cases on payments that time out with no response, idempotency on retry, racing balances, caps across devices, collect request fraud, mandates and refunds.

Test cases for insurance claim submission

Test cases
28 cases on coverage at the date of loss, waiting periods, deductibles and sub limits, exclusions and riders, duplicate claims and settlement reconciliation.

Test cases for patient records in an EHR

Test cases
28 cases on duplicate detection and merge, wrong patient entry, units of measure, allergy and interaction alerting, break glass access and audit of reads.

Test cases for CRM lead management

Test cases
28 cases on duplicate leads under concurrency, routing and the unrouted fallback, round robin races, territory visibility, conversion and bulk import.

Test cases for an ERP purchase order

Test cases
28 cases on approval thresholds, amendments that must reset approval, budget commitment races, over receipt tolerance, three-way match and duplicate invoices.

Test cases for OTT video playback

Test cases
28 cases on bitrate recovery after a dip, DRM renewal mid stream, concurrent stream limits and leaked slots, resume conflicts, ad cue points and offline expiry.

Test cases for game level progression

Test cases
28 cases on save corruption during a crash write, cloud save conflicts, offline queue replay, unlock gating, currency exploits and purchase restore.

Test cases for a REST API

Test cases
28 cases on status code correctness, cross tenant resource access, mass assignment, idempotent retries, cursor pagination, rate limits and contract drift.

Test cases for SSO and social login

Test cases
28 cases on linking an account on an unverified email, state and code replay, redirect allow lists, token signature and issuer, deprovisioning and session rotation.

Test cases for subscription and billing

Test cases
28 cases on mid cycle proration, duplicate and out of order webhooks, renewal double charges, dunning and grace, trials, coupons, metered usage and tax.

Test cases for data tables, filters and sorting

Test cases
28 cases on unstable sorts across pages, filters that must reset pagination, selection surviving a filter change, bulk action scope and export fidelity.

Test cases for session timeout and concurrent login

Test cases
28 cases on tokens that survive sign out, refresh token reuse, idle against absolute lifetime, multi tab expiry, session limits and remote revocation.

Test cases for a multi step form wizard

Test cases
28 cases on values lost to back navigation, refresh and session expiry, step skipping, server side revalidation, duplicate submission and conditional branches.

Test cases for email verification

Test cases
28 cases on token reuse and expiry, invalidating earlier links, account enumeration, header injection, safe address change and mail scanner prefetching.

Test cases for dashboards and analytics widgets

Test cases
28 cases on reconciling against source rows, widgets that disagree, timezone aggregation, zero baselines, no data shown as zero and permission leaks in aggregates.

Test cases for booking and reservation

Test cases
28 cases on concurrent bookings for the last slot, inventory holds that leak, payment without a booking, cancellation boundaries and channel sync.

Test cases for mobile app install and update

Test cases
28 cases on migration chains across skipped versions, crashes during post upgrade migration, forced update lockouts, deep links and clean reinstall.

Test cases for accessibility (WCAG 2.2 AA)

Test cases
28 cases on keyboard only completion, focus management, live region announcements, contrast, reflow at 320 pixels, target size and screen reader verification.

Test cases for performance and load

Test cases
28 cases on spikes with no ramp, recovery after peak, soak and leak detection, pool exhaustion, cold caches, retry storms and data correctness under load.

Test cases for the OWASP Top 10

Test cases
28 cases on broken access control, mass assignment, injection across every input surface, credential stuffing, session invalidation, SSRF and exposed secrets.

Test cases for cross browser compatibility

Test cases
28 cases on storage that throws in private mode, blocked third party cookies, engine date parsing, mobile viewport units, in app browsers and ad blockers.

Test cases for database and data integrity

Test cases
28 cases on uniqueness under concurrency, lost updates, counter races, orphaned rows, migration and backfill safety, replica lag and verified restores.

Test cases for localisation and multi language support

Test cases
28 cases on text expansion, concatenated sentences, plural rules, locale date parsing, decimal separators, right to left layout, collation and encoding.

Test cases for background jobs and queues

Test cases
28 cases on work outliving the visibility timeout, idempotent handlers, poison messages, priority starvation, scheduler overlap across instances and graceful drain.

Test cases for real time features and websockets

Test cases
28 cases on messages lost in the reconnect gap, half open connections, per channel authorisation, tokens expiring mid connection, backpressure and fanout across instances.

Test cases for file storage and media processing

Test cases
28 cases on signed URL scope and expiry, serving before scanning completes, content type sniffing, metadata stripping, orphaned objects and derivative failures.

Test cases for CSV import and bulk operations

Test cases
28 cases on reruns duplicating successes, delimiters inside quoted fields, byte order marks, leading zeros, ambiguous dates and bulk action scope.

Test cases for feature flags and progressive rollout

Test cases
28 cases on unreachable flag services, unstable bucketing, rollouts that reshuffle users, kill switch latency, server and client mismatch and stale flags.

Test cases for Android app lifecycle and permissions

Test cases
28 cases on state lost to process death, configuration changes, permanent permission denial, revocation while backgrounded, doze and battery restrictions.

Test cases for iOS app lifecycle and permissions

Test cases
28 cases on the keychain surviving uninstall, suspended termination, limited photo access, allow once location, app switcher snapshots and biometric invalidation.

Test cases for wearable app sync

Test cases
28 cases on data recorded away from the phone, duplicate records on resync, full buffers, clock drift, health permissions, battery budgets and unworn readings.

Test cases for VR and AR experiences

Test cases
28 cases on the frame rate comfort floor, tracking loss, guardian boundaries, involuntary camera movement, AR anchor drift and spatial data privacy.

Test cases for IoT device pairing and telemetry

Test cases
28 cases on offline buffering and reconnect floods, fleet wide reconnection storms, shared credentials, wrong device clocks and stale queued commands.

Test cases for embedded firmware update

Test cases
28 cases on power loss mid write, automatic rollback and health confirmation, signature and anti rollback checks, staged rollouts and recovery mode.

Test cases for user profile and account settings

Test cases
28 cases on partial saves reported as success, optimistic updates the server rejected, mass assignment through a profile form, avatar content inspection and session invalidation.

Test cases for account deletion and data export

Test cases
28 cases on export links that must be authorised and expiring, deletion cascading to storage, caches, logs and processors, grace periods, legal holds and deadlines.

Test cases for consent and cookie management

Test cases
28 cases on cookies and tracking requests firing before consent, reject parity with accept, tag manager bypass, withdrawal, cached banners and server side forwarding.

Test cases for notification preferences and delivery

Test cases
28 cases on opt outs honoured on one channel and ignored on another, marketing sent as transactional, unsubscribe scope, imports resetting consent and digest timezones.

Test cases for admin impersonation and support access

Test cases
28 cases on actions attributed to the customer instead of the admin, credential exposure, chained and upward impersonation, session expiry and immutable access records.

Test cases for audit logs and activity history

Test cases
28 cases on forged entries through log injection, immutability and tamper detection, actor attribution across impersonation and jobs, retention and legal holds.

Want your event delivery proven, not assumed?

QAble covers functional, boundary and security paths with ISTQB-certified engineers. Start with a free QA audit of your platform.

Talk to QA Advisor