Blog
QA testing insights, AI agent tips, and skill development guides
All Articles
Page 2 of 27
Add a PostgreSQL Service-Container Health Check in GitHub Actions
Add a PostgreSQL service-container health check in GitHub Actions so migrations and tests wait for readiness instead of racing database startup.
AI Testing Engineer Salary and Skills in 2026
Compare AI testing engineer salary benchmarks for 2026, identify high-value technical skills, and build evidence that supports a stronger compensation offer.
API Contract-Testing Interview Scenarios
Practice API contract-testing interview scenarios on consumer needs, provider verification, schema evolution, messaging, deployment gates, and failure triage.
Artillery Load Testing in Node.js: Complete 2026 Guide
A complete Artillery load testing guide for Node.js in 2026: install, write YAML scenarios, test HTTP and WebSocket, add JS processors, assert thresholds, and run in CI.
Assert a Specific Log Level with pytest caplog
Assert specific Python log levels with pytest caplog, isolate logger records, verify exception metadata, and avoid tests coupled to formatted output.
Assert That a Playwright List Has No Duplicate Items
Detect duplicate list items in Playwright with stable keys, normalized text, retrying assertions, and diagnostics that identify every repeated record.
Assert That a Table Column Is Sorted in Playwright
Assert sorted table columns in Playwright across numbers, dates, nulls, and locale-aware text with stable extraction and diagnostic failures.
Braintrust vs Langfuse: LLM Eval and Observability (2026)
Braintrust vs Langfuse compared for 2026: eval workflows, tracing, datasets, scoring, CI, self-hosting, pricing shape, and TS + Python SDK examples to pick the right platform.
Build a Rerun-Failed-Tests Workflow in CircleCI
Build a CircleCI rerun-failed-tests workflow that persists Playwright failure state, retries only failed tests in a follow-up job, and reports honestly.
Cache Cypress Sessions Across Spec Files
Cache Cypress sessions across spec files with cy.session, reliable validation, collision-safe IDs, and realistic behavior in parallel CI runs.
Cache Playwright Browser Binaries in CircleCI
Cache Playwright browser binaries in CircleCI with versioned keys, correct paths, safe fallbacks, and installation checks that prevent stale builds.
Cache Playwright Browsers in GitHub Actions
Cache Playwright browsers in GitHub Actions with version-safe keys, Linux dependency installation, cache validation, and evidence that caching pays off.
Cache the pnpm Store for Tests in GitLab CI
Cache the pnpm store in GitLab CI with lockfile-derived keys, project-local paths, trusted writers, and pull-only test jobs that stay reproducible.
Cancel Stale E2E Runs When a New Commit Arrives
Cancel stale E2E runs on new commits with branch-scoped GitHub Actions concurrency and GitLab interruptible jobs while protecting deploys and cleanup.
Canvas Pixel Assertion Testing in Playwright
Test canvas pixels in Playwright with deterministic rendering, getImageData sampling, PNG decoding, tolerances, and focused rendering diagnostics.
Change Browser Geolocation During a Playwright Test
Change browser geolocation during a Playwright test and verify live location updates, permission loss, accuracy handling, and location-aware network calls.
Clean Up Orphaned Test Data After CI Failures
Clean up orphaned test data after cancelled or crashed CI jobs using ownership markers, leases, idempotent sweepers, retention windows, and safety guards.
Clean Up Pact Provider-State Test Data
Clean up Pact provider-state test data with deterministic identities, setup and teardown handlers, transaction-aware isolation, and leak detection.
Comment a Test Summary on Pull Requests with GitHub Actions
Comment a clear test summary on every pull request with GitHub Actions, update one sticky comment, handle failures, and keep forked contributions safe.
Compare Nested Dictionary Floats with pytest.approx()
Compare nested dictionary floats with pytest.approx using recursive leaf checks, path-aware tolerances, exact structure validation, and readable failures.
Compare One Element with Masks in Playwright Visual Tests
Compare one Playwright element while masking dynamic subregions, stabilizing snapshots, controlling mask scope, and preserving meaningful visual coverage.
Compare Prompt Versions with a Promptfoo Variable Matrix
Compare prompt versions with a Promptfoo variable matrix that holds model settings constant, expands shared inputs, and exposes quality regressions.
Configure a Different Proxy per Playwright Project
Configure a different Playwright proxy per project for regional, tenant, and network-path coverage without leaking credentials or duplicating test suites.
Configure HTTP Basic Authentication in Playwright
Configure Playwright HTTP Basic Authentication per project, constrain credential origins, cover browser and API requests, and prevent secret exposure.
Configure Playwright baseURL for Multiple Environments
Configure Playwright baseURL for local, staging, and preview environments with validated targets, project overrides, and safe relative navigation.
Configure Playwright Traces Only on the First Retry
Configure Playwright trace on first retry to capture decisive CI evidence while controlling storage, runtime overhead, and noisy test artifacts.
Create a PostgreSQL Database per Test with Testcontainers
Create a PostgreSQL database per test with Testcontainers, safe parallel naming, real migrations, connection cleanup, and fast suite-level container reuse.
Cross-Domain Authentication with Cypress origin()
Automate cross-domain authentication with Cypress origin(), pass credentials safely, validate redirects, and keep identity-provider tests reliable.
Cypress “Element Is Detached from the DOM” Fix
Fix Cypress element detached from the DOM failures by re-querying after reactive renders, ending action chains, and synchronizing on observable application state.
Cypress “Timed Out Retrying After 4000ms” Fix
Fix Cypress timed out retrying after 4000ms errors by separating selector, request, rendering, actionability, and test-isolation causes with evidence.
Cypress “Uncaught Exception” Test Failure Fix
Fix Cypress uncaught exception failures with scoped, evidence-based handling that suppresses only known noise while preserving real application defects.
Cypress intercept() Streaming-Response Limitations
Understand Cypress intercept streaming-response limitations for SSE and chunked HTTP, then design reliable tests for partial data, reconnects, and completion.
Database Seeding per Test vs per Suite
Compare database seeding per test vs per suite, including transaction rollback, fixture ownership, parallel workers, and hybrid patterns for reliable fast suites.
DeepEval Tool Correctness Metric Example
Use DeepEval Tool Correctness Metric with real agent traces, expected calls, strict arguments, ordering, and regression cases that expose wrong tools.
Deterministic Faker Seeds in Parallel Tests
Design deterministic Faker seeds for parallel tests, reproduce failures by test identity, avoid worker collisions, and preserve realistic data variation.
Disable Animations and Carets in Playwright Screenshots
Disable animations and blinking carets in Playwright screenshots, stabilize visual baselines, and keep meaningful UI regressions visible in CI.
Ensure pytest Yield-Fixture Cleanup After Failure
Make pytest yield-fixture cleanup reliable when tests or setup fail, using safe fixture boundaries, finalizers, context managers, and verified teardown.
Exclude Browser and OS Combinations from a GitHub Actions Matrix
Exclude browser and OS combinations from a GitHub Actions matrix while preserving targeted Playwright coverage, readable jobs, and intentional failure policy.
Exclude Generated Files from Jest Coverage
Exclude generated files from Jest coverage without hiding authored code, using precise collection rules, Istanbul directives, and auditable thresholds.
Factory Boy post_generation for Many-to-Many Test Data
Use Factory Boy post_generation for Django many-to-many test data with explicit related objects, safe defaults, through models, batching, and isolated assertions.
Fail CI Only on New Coverage Regressions
Enforce changed-code coverage in CI while leaving legacy gaps visible, using diff-aware line checks, stable baselines, and actionable pull request failures.
Handle Missing Requests During Playwright HAR Replay
Configure Playwright HAR replay notFound fallback safely, diagnose unmatched requests, prevent accidental live traffic, and keep recordings maintainable.
How to Shard Playwright Tests by File Instead of Project
Shard Playwright tests by file with predictable CI distribution, avoid project duplication, inspect shard membership, and balance uneven spec runtimes.
How to Test a Debounced Search Input in Playwright
Learn deterministic Playwright debounce testing with the Clock API, request inspection, boundary checks, and no brittle fixed sleeps in your search tests.
How to Test WebSocket Messages in Cypress
Test WebSocket messages in Cypress by controlling server events, observing browser state, and asserting reconnection, ordering, and malformed-frame behavior reliably.
How to Test WebSocket Reconnection in Playwright
Test WebSocket reconnection in Playwright with deterministic server closes, real offline transitions, retry assertions, and duplicate-subscription checks.
How to Wait for a Dynamic URL Response in Playwright
Learn how to wait for a dynamic URL response in Playwright by matching paths, query parameters, methods, status codes, and concurrent requests safely.
HTML5 Drag and Drop with DataTransfer in Playwright
Implement HTML5 drag and drop with DataTransfer in Playwright, including custom MIME payloads, file drops, event diagnostics, and reliable outcome checks.
In-Source Testing with import.meta.vitest
Use import.meta.vitest for focused in-source testing with correct Vitest configuration, TypeScript typing, production dead-code removal, and maintainable boundaries.
Intercept GraphQL Requests by Operation Name in Cypress
Intercept GraphQL requests by operation name in Cypress to stub one query or mutation, preserve unrelated traffic, and make network assertions precise.