Test cases for a video streaming player
Updated 2026-11-13 · 6 min read
These 30 cases use explicit test fixtures and checkable outcomes. Cover normal behavior, boundaries, recovery, security and usability, then adapt the requirements to your product.
How to answer in an interview
Ask whether the player is live or on-demand, which devices and formats it supports, and whether access requires a subscription. Start with playback state and recovery, then cover tracks, accessibility and entitlement. A visible Play icon does not prove that decoded video and audio have started.
Scope and test data
These 30 cases assume on-demand streaming of a synthetic 120-second clip with visible timestamps, spoken second markers, two available quality levels, captions and an alternate audio track. Prepare an authorised test asset and a protected asset for an unentitled account. Live-edge seeking, adverts, downloads and DRM certification are outside this fixture.
Record startup, rebuffering and audio/video synchronisation budgets before running tests. Browser autoplay can be denied; a denial should leave an honest paused state with a manual play action. Supported formats and fullscreen or picture-in-picture availability must come from the browser/device matrix, not assumptions about every browser.
These are proposed manual test cases, not an execution report. Run security and load checks only in an authorised isolated environment. Record agreed limits before execution; a case without its required limit is not ready to pass or fail.
Playback and seeking
| ID | Category | Test case | Expected result |
|---|---|---|---|
| V01 | Functional | Choose Play on the loaded test clip | Video frames advance and spoken markers begin; UI reports playing |
| V02 | Functional | Pause at the visible 20-second marker | Playback time stops advancing and audio stops |
| V03 | Functional | Resume from pause | Playback continues near the paused position without restarting at zero |
| V04 | Functional | Seek to 60 seconds | Frames and audio move to the requested position within the agreed seek tolerance |
| V05 | Boundary | Seek to the start | Playback begins at the first available frame; time does not become negative |
| V06 | Boundary | Seek to the end of the 120-second clip | Ended state appears without an endless loading spinner |
| V07 | Functional | Replay after reaching the end | Playback restarts from the beginning once |
| V08 | Functional | Mute then unmute | Audio is silent while muted and returns to the chosen volume |
| V09 | Boundary | Set volume to minimum and maximum | Output follows the endpoints; control does not exceed its bounds |
| V10 | Functional | Select a supported playback speed | Progress rate changes to the selected speed and the UI displays it |
Tracks, network and failures
| ID | Category | Test case | Expected result |
|---|---|---|---|
| V11 | Functional | Enable captions and inspect timed markers | Selected captions appear at their corresponding spoken markers |
| V12 | Functional | Switch alternate audio tracks | Chosen track plays; old track does not continue underneath it |
| V13 | Functional | Switch quality during playback | Playback continues near the current position with the selected representation |
| V14 | Negative | Throttle bandwidth below the selected stream's demand | Buffering is visible; recovery or automatic quality change follows the player contract |
| V15 | Negative | Disconnect during playback and reconnect | Buffered content may continue; after exhaustion a recoverable state appears and playback can resume |
| V16 | Negative | Fail the media request with a missing-asset response | Unavailable-content message replaces perpetual loading and offers the designed recovery action |
| V17 | Negative | Supply a deliberately unsupported media format | Readable playback error appears; UI does not claim the video is playing |
| V18 | Functional | Deny autoplay in the browser then open the clip | Player remains paused with an operable manual Play control |
| V19 | Functional | Seek repeatedly while earlier segment requests are delayed | Final requested position wins; old responses do not jump playback backwards |
| V20 | Functional | Leave and reopen with resume enabled | Last acknowledged resume position is restored within the documented tolerance |
Access, accessibility and performance
| ID | Category | Test case | Expected result |
|---|---|---|---|
| V21 | Security | Open the protected asset as an unentitled account | Media access is denied by the serving system, not only by hiding Play |
| V22 | Security | Expire the media access grant during a session | Renewal or access failure follows policy; UI avoids an unexplained permanent spinner |
| V23 | Security | Switch accounts and reopen protected playback history | New account cannot access the prior user's private history or grants |
| V24 | UI | Operate Play, Pause, volume and seek using keyboard | Controls are reachable, named and operable with visible focus |
| V25 | UI | Enable captions at a narrow viewport and enlarged text | Captions and essential controls remain readable without covering every frame |
| V26 | Compatibility | Run the clip on each supported browser/device/format combination | Audio, video and selected tracks play; unsupported features are explicitly unavailable |
| V27 | Compatibility | Enter and exit fullscreen where supported | Playback position and state remain consistent; exit returns usable controls |
| V28 | Compatibility | Background and foreground the player on supported mobile devices | Pause or continuation matches platform policy; foreground UI reflects actual playback |
| V29 | Performance | Measure click-to-first-frame on defined network profiles | Startup meets the profile's recorded budget; failures are reported separately |
| V30 | Performance | Play the full clip under the agreed workload | Rebuffer duration and audio/video drift remain within recorded budgets with no crash |
Build a playback oracle
Use the visible timestamp and spoken marker together to detect drift. Capture the device, browser, stream representation, network profile and entitlement state with a defect. “Video buffers” without those conditions is hard to reproduce.
An interviewer may ask whether a successful media download is enough. It is not: decoding, track selection, rendering and controls can still fail. Start with a short deterministic clip before testing a long stream or a live broadcast.
Downloads
Quick answers
Should autoplay always succeed?
No. Browser policy can block playback without user interaction. Test a usable manual-start path and truthful paused state.
Can this checklist certify DRM or every codec?
No. Add the actual protected-stream, licence and format matrix for the product; these are general on-demand player cases.
Sources
Want a project you can show in interviews?
The portfolio project kit walks you through testing a deliberately buggy app with Selenium or Playwright and API tests, then explaining it. The app itself is free.
