Developer resources
Stable download URLs, a machine-readable manifest with checksums, and guides for the testing tools you already use.
Direct download URLs
Every file has a stable, direct URL with no redirects, tokens or interstitial pages. Sized files follow one pattern:
https://sampletestfiles.com/downloads/{format}/sample-{format}-{size}.{format}For example, the 1 MB PDF file:
curl -O 'https://sampletestfiles.com/downloads/pdf/sample-pdf-1mb.pdf'Sizes are written in lower case without a space: 1kb, 5kb, 10kb, 25kb, 50kb, 100kb, 500kb, 1mb, 5mb and 10mb. Not every format exists at every size; the format pages and the manifest list what is available.
These URLs are meant for people and for occasional scripted use. If a test suite or pipeline needs a file on every run, download it once and keep your own copy, so that your builds do not depend on this site being reachable.
File manifest
A JSON manifest of every sample file is published at /files.json. Each entry gives the file name, format, MIME type, exact size, SHA-256 checksum, download URL and page URL.
curl -s 'https://sampletestfiles.com/files.json' \
| jq '.files[] | select(.format == "pdf") | {name, bytes, sha256, url}'Use it to pin fixtures by checksum:
echo "5a9dc29742698650bf347aae734b6efd09f554ef70f4d6213e850359328505d4 sample-pdf-1mb.pdf" | sha256sum --checkTesting topics
File uploads
Accepted types, size limits, file names, interruptions and security checks for upload forms and endpoints.
File-size restrictions
Where limits live in a stack, the defaults of common servers and frameworks, and how to test a boundary to the byte.
MIME types and file validation
Extensions, Content-Type headers and signature bytes, and how to check that validation cannot be fooled by a renamed file.
REST APIs
Sending files as multipart form data, raw bodies and base64 JSON, and what to assert in the response.
Download speed and CDN delivery
Measuring throughput honestly, checking range requests and resume, and verifying that every edge returns identical bytes.
Playwright
setInputFiles, file choosers, in-memory files, download assertions and API uploads.
Selenium
send_keys uploads in Python and Java, remote grids, hidden inputs and download checks.
Cypress
selectFile for inputs and drop zones, intercepting upload requests and reading downloads.
CI/CD pipelines
Vendoring fixtures, verifying checksums in a job, and testing artifact and cache limits.
Parsers and importers
Clean inputs and deliberate edge cases for CSV, JSON, XML, email and more.
Storage systems
Exact-size files for quota checks, multipart thresholds and round-trip integrity.
Browser compatibility
Media, image and document samples for checking previews and players across browsers and devices.
What the server sends
Download responses are plain static files. When the site is deployed with the supplied host configuration they are served with:
- a
Content-Typematching the format's registered MIME type; Content-Length, so progress can be shown;Accept-Ranges: bytes, so downloads can be resumed and video can seek;X-Content-Type-Options: nosniff;Access-Control-Allow-Origin: *, so files can be fetched from scripts on other origins.
Text files may be compressed in transit by the host. To measure raw transfer speed, use a BIN sample, which cannot be compressed.