
GITNUXSOFTWARE ADVICE
Data Science AnalyticsTop 10 Best Database Testing Software of 2026
Ranking of Database Testing Software tools for SQL and APIs. Side-by-side k6, Postman, and Cypress features with tradeoffs for teams.
How we ranked these tools
Core product claims cross-referenced against official documentation, changelogs, and independent technical reviews.
Analyzed video reviews and hundreds of written evaluations to capture real-world user experiences with each tool.
AI persona simulations modeled how different user types would experience each tool across common use cases and workflows.
Final rankings reviewed and approved by our editorial team with authority to override AI-generated scores based on domain expertise.
Score: Features 40% · Ease 30% · Value 30%
Gitnux may earn a commission through links on this page — this does not influence rankings. Editorial policy
Editor’s top 3 picks
Three quick recommendations before you dive into the full comparison below — each one leads on a different dimension.
k6
Thresholds that fail tests based on latency percentiles and error rates
Built for teams testing database-backed APIs and query performance under load.
Postman
Editor pickCollections with test scripts, assertions, and environment variables for repeatable API-driven validation
Built for teams validating database-backed APIs with automated regression checks.
Cypress
Editor pickTime travel debugging with automatic screenshots and network request inspection
Built for teams validating database-backed user workflows through APIs and UI.
Related reading
Comparison Table
The table compares Database Testing Software by integration depth, data model and schema support, automation and API surface, and admin and governance controls like RBAC and audit log trails. Readers can map how tools such as k6, Postman, and Cypress handle provisioning, extensibility, and configuration patterns to different throughput targets. The comparison highlights concrete tradeoffs in sandboxing, test data handling, and how each tool fits into API and database workflows.
k6
performance testingk6 runs load and performance tests with scripted scenarios and built-in integrations suitable for validating database-dependent query paths at scale.
Thresholds that fail tests based on latency percentiles and error rates
k6 stands out for treating database testing as a load and performance exercise using code-driven scenarios. It provides realistic traffic generation with built-in support for metrics, thresholds, and distributed execution across multiple workers.
Database validation can be implemented by combining k6 HTTP calls with direct SQL checks through custom code or by orchestrating database queries via middleware. The result is repeatable regression testing for query endpoints, database-backed APIs, and end-to-end workflows that stress data paths.
- +Code-first load testing with JavaScript scenarios and reusable test modules
- +Built-in metrics with thresholds for validating latency and error-rate limits
- +Supports distributed execution to stress database paths from multiple generators
- +Easy correlation of slow queries via timing metrics on database-backed endpoints
- –k6 does not natively execute SQL against databases as a primary testing interface
- –Deep query-plan assertions require custom scripting or external tooling
- –Database-specific diagnostics like lock contention and deadlock classification need integration
Backend performance engineers
Stress database-backed API endpoints under load
Lower p95 latency regressions
QA automation leads
Automate regression tests for query workflows
Catch query correctness regressions
Show 2 more scenarios
Platform reliability engineers
Compare database performance across releases
Prevent release database slowdowns
Execute distributed load tests and collect metrics to spot throughput drops and saturation patterns.
SRE incident response teams
Reproduce production data path bottlenecks
Confirm root cause faster
Model realistic request sequences and measure limits tied to database access paths.
Best for: Teams testing database-backed APIs and query performance under load
More related reading
Postman
API-driven testingPostman automates API test suites that exercise database-backed endpoints and supports database-adjacent checks through collection runs and assertions.
Collections with test scripts, assertions, and environment variables for repeatable API-driven validation
Postman stands out for API-first testing workflows that double as practical database-testing support when systems expose SQL operations through REST endpoints. Collections, environments, and automated runs make it easy to validate request and response contracts tied to database behavior.
Built-in assertions, scripting, and extensive test runners support repeatable regression checks across environments. Authorization helpers and response diffing tools help verify outcomes that reflect underlying database state changes.
- +Collections and environments organize database-backed API regression suites
- +Scripting and assertions enable deep validation of database-driven responses
- +Visual request builder and variables speed up creating reusable test cases
- +Runs can execute collections consistently across multiple environments
- +Collaboration features support shared testing artifacts across teams
- –Native SQL query execution and schema testing are not core capabilities
- –Database-specific assertions like transaction state require API-layer workarounds
- –Test reliability depends on API observability of underlying database behavior
- –Large datasets and complex setup often need external orchestration
Backend QA engineers
Test REST endpoints that run SQL queries
Fewer regressions in database-backed APIs
API developers
Verify CRUD flows update database state
Reliable API-to-database contract checks
Show 2 more scenarios
Platform teams
Run environment tests across dev and staging
Same tests for multiple environments
Environments standardize credentials and variables so automated collections run consistently against each database instance exposed by REST.
Data access security reviewers
Check authorization effects on SQL-backed endpoints
Reduced risk of data exposure
Authorization helpers and negative tests confirm access controls deny records tied to database queries.
Best for: Teams validating database-backed APIs with automated regression checks
Cypress
end-to-end testingCypress validates application behavior through end-to-end tests that trigger database queries through the UI and network layers.
Time travel debugging with automatic screenshots and network request inspection
Cypress stands out for executing browser-based end to end tests with instant, interactive feedback and time travel debugging. Its core capabilities include network stubbing, DOM assertions, and deterministic test retries, which support verification of database driven UI flows.
Cypress is not a database testing tool in isolation, so database validation typically happens indirectly through API calls and UI results. Database test coverage improves when Cypress is paired with backend tests that seed data or expose stable endpoints for assertions.
- +Time travel debugging pinpoints failing steps and state changes quickly
- +Network stubbing enables reliable assertions around database-backed API responses
- +Readable JavaScript tests make workflow automation practical for teams
- –No native database seeding, migrations, or direct DB assertions
- –Database correctness still depends on backend testing and observability
- –UI-centric tests can become brittle when UI structure changes often
QA engineers validating CRUD workflows
Test database-backed UI after create and update
Confirms CRUD behavior end to end
Frontend teams testing data integrity
Assert DOM state after seeded API responses
Reduces UI regressions tied to data
Show 2 more scenarios
Platform teams testing API-contract UI
Validate UI error handling for API failures
Catches broken data flows early
Cypress stubs network responses to simulate database errors and checks resulting UI messaging and fallbacks.
Release managers verifying migrations impact
Confirm critical screens after schema changes
Detects migration-related breakages before release
Cypress executes end to end smoke tests that reveal UI failures caused by migration-driven data changes.
Best for: Teams validating database-backed user workflows through APIs and UI
Playwright
browser automationPlaywright runs cross-browser automated tests that can validate database-backed workflows through UI-driven interactions and network assertions.
Test Runner trace viewer with DOM snapshots and network timelines per test
Playwright is distinct for running browser automation as deterministic, programmable end-to-end tests that can validate database-backed UI flows. It supports multiple browser engines, cross-browser assertions, and network interception, which makes it useful for verifying results that depend on database state.
For database testing specifically, it integrates well with test runners and backend calls so tests can seed data, execute queries indirectly, and confirm UI outcomes. Strong observability comes from built-in trace recording and screenshot or video artifacts that pinpoint failures.
- +Cross-browser UI tests validate database effects through real user flows
- +Network interception enables assertions on API responses tied to data changes
- +Trace viewer shows steps, DOM snapshots, and network details for failures
- –No native database querying or migrations workflow for direct DB testing
- –Database setup relies on external scripts and orchestration tooling
- –Debugging flaky tests can require careful waits and deterministic data control
Best for: Teams validating database-driven UI workflows with traceable automation
SoapUI
API functional testingSmartBear SoapUI Pro executes API functional tests that validate responses from services backed by databases.
SoapUI Test Assertions and DataSources for repeatable validations across parameterized requests
SoapUI stands out for its visual, script-free API testing approach that still supports deep request assertions and reusable components. For database testing workflows, it can validate API endpoints that query databases and it can run database-influenced scenarios with deterministic checks. Its strength is orchestration across HTTP and data flows, while native database query authoring and schema-aware database testing are limited.
- +Visual test cases with assertions for API-driven database validations
- +Reusable test fragments and parameterization for environment-specific runs
- +Powerful scripting hooks for custom checks and data-driven flows
- +Rich reporting and logs for debugging failed test steps
- –Not a dedicated database query testing tool for schema or SQL assertions
- –Database-specific fixtures and migrations are not first-class capabilities
- –End-to-end accuracy depends on API layer stability and test design
- –Scenarios with heavy database setup can become complex
Best for: API QA teams needing database-backed end-to-end validation without building SQL tools
JUnit
unit test frameworkJUnit provides the test runner and assertions used to implement repeatable database integration tests in Java applications.
Annotation-driven test lifecycle via @BeforeEach and @AfterEach
JUnit stands out as a unit testing framework with strong ecosystem support, making database-focused tests easier to integrate into existing Java build pipelines. It provides repeatable test structure via annotations, assertions, and test lifecycle hooks that work well for testing database access layers.
Database testing is achieved by combining JUnit with direct JDBC calls or SQL-execution helpers, since JUnit itself does not include database engines or SQL simulation. The result is reliable verification of repository and DAO behavior when paired with containerized databases or test doubles.
- +Rich annotation model for organizing database tests with predictable setup and teardown
- +Strong assertion library for precise checks on query results and exceptions
- +Integrates directly with Maven and Gradle test execution for repeatable runs
- +Extensive community extensions for database integration patterns
- –Requires external libraries or tooling for database provisioning and isolation
- –No built-in SQL mocking, schema management, or data seeding utilities
- –Writing and maintaining JDBC-based fixtures can add boilerplate
Best for: Java teams validating DAO and repository behavior with controlled test data
dbunit
database testing librarydbUnit supports automated database testing by setting up known database states and verifying expected table contents.
Dataset-based assertions that compare expected tables to actual query results
dbUnit focuses on automated database testing by comparing expected datasets against actual database state. It provides fixture-style dataset loading and assertions to verify inserts, updates, and deletes without writing custom data comparison logic.
Core workflow supports XML, CSV, and database-to-dataset extraction so tests can be driven from repeatable data snapshots. It integrates best with Java test frameworks through JUnit-style usage patterns and JDBC connections for direct database access.
- +Strong dataset comparison and assertion utilities for repeatable database checks
- +Supports multiple dataset formats including XML and CSV for test fixtures
- +Can export database state into datasets for baseline creation workflows
- +Works directly on JDBC connections with minimal abstraction layers
- –Primarily centered on Java tooling and JDBC, limiting broader language adoption
- –Schema evolution requires careful dataset maintenance to keep tests stable
- –Debugging mismatches can be verbose because diffs are dataset-level
- –Complex relationship handling often needs extra configuration and rules
Best for: Java teams writing automated database regression tests with fixture datasets
Testcontainers
containerized test dataTestcontainers provisions ephemeral database containers so test suites can run against consistent, disposable database instances.
Database-specific container modules with automatic connection info injection
Testcontainers runs real database engines in ephemeral Docker containers, which makes integration testing distinct from mocking. It provides language libraries to programmatically start containers for databases like PostgreSQL, MySQL, and Redis, with automatic port mapping and lifecycle management.
Database tests can target the same networking setup developers use, reducing environment drift across local runs and CI jobs. The core workflow centers on spinning up containers per test or test suite and wiring connection details directly into application code.
- +Starts real database containers for integration tests instead of mocks
- +Automatic container lifecycle management reduces cleanup work
- +Programmatic container provisioning supports dynamic test data sources
- +Consistent Docker networking simplifies CI parity with local runs
- +Works across common databases with standardized APIs
- –Requires reliable Docker setup in every test environment
- –Tests can slow down when containers start per suite or per test
- –Debugging failures can be harder due to transient container state
Best for: Teams running real-database integration tests in Docker-based CI pipelines
Flyway
schema migration testingFlyway manages schema migrations and enables repeatable database setup steps for integration tests.
Migration validation using checksums to detect modified applied scripts
Flyway focuses on database change verification through versioned migration scripts that can be validated and checked against the current schema state. It supports automated schema evolution with transaction-aware migrations, repeatable migrations, and metadata tracking of applied versions.
Strong integration patterns exist for CI pipelines so migrations can be tested during builds. Coverage is primarily centered on migration correctness rather than test frameworks for query behavior or data-level assertions.
- +Versioned migrations with automatic history tracking for reliable schema changes
- +Repeatable migrations support refreshable database objects like views
- +Validation detects checksum drift between expected and applied migration scripts
- +Clear failure modes and stop-on-error behavior during migration execution
- +Works well in CI for schema readiness gates during deployments
- +Supports callbacks for pre and post migration automation hooks
- –Primarily migration validation, not full database query behavior testing
- –Complex branching and environment drift require careful migration practices
- –Data correctness checks need external tooling beyond Flyway itself
- –Large schema refactors can increase migration management overhead
Best for: Teams needing migration-driven schema validation in CI without query-level test harnesses
Liquibase
schema migration testingLiquibase executes versioned database change sets so test environments can be created deterministically before assertions.
Liquibase diff and generateChangelog workflows for state comparison and migration verification
Liquibase stands out for treating database changes as versioned artifacts using declarative changelogs that can be applied consistently across environments. It supports automated schema updates with rollback logic, change tracking through a database changelog table, and execution plan options that help validate what will change. For database testing workflows, it enables repeatable migrations that reduce drift and supports generating and comparing database states for verification before releases.
- +Changelog-driven migrations keep schema changes versioned and auditable
- +Rollback support enables safer release processes and faster incident recovery
- +Offline update testing can be done by generating SQL and diffs
- +Supports many database engines and manages schema evolution consistently
- –Database diff and validation accuracy depends heavily on correct baseline modeling
- –Complex changelogs require careful ordering and change dependency management
- –Testing outcomes still rely on external test suites beyond migration verification
Best for: Teams needing repeatable schema change testing across multiple database engines
Conclusion
After evaluating 10 data science analytics, k6 stands out as our overall top pick — it scored highest across our combined criteria of features, ease of use, and value, which is why it sits at #1 in the rankings above.
Use the comparison table and detailed reviews above to validate the fit against your own requirements before committing to a tool.
How to Choose the Right Database Testing Software
This buyer’s guide helps select database testing software by comparing concrete automation and integration paths across k6, Postman, Cypress, Playwright, SoapUI, JUnit, dbUnit, Testcontainers, Flyway, and Liquibase.
Coverage spans load and performance validation with k6, API-driven database behavior checks with Postman and SoapUI, UI-driven workflow validation with Cypress and Playwright, and schema and state management with JUnit, dbUnit, Testcontainers, Flyway, and Liquibase.
Database testing automation for validating data paths, schemas, and database state changes
Database testing software verifies behavior that depends on database state, including query outputs, transaction outcomes, and schema evolution workflows tied to migrations and changelogs. Teams use these tools to prevent regressions in API responses and UI outcomes, and to catch migration drift before deployments.
Tools like k6 validate database-backed endpoints under load through scripted scenarios and threshold-based pass or fail rules, while Testcontainers provisions disposable real database engines in Docker so integration tests run against consistent containerized state.
Evaluation criteria for database testing integration depth and control depth
Database testing tools vary sharply in where validation happens, such as direct SQL assertions, API-layer assertions, dataset comparisons, or UI-observed outcomes. Integration depth also differs, especially when a tool needs to seed state, orchestrate provisioning, and attach assertions to specific schema versions.
Control depth matters for governance. Focus on RBAC and auditability for test artifacts where available, and ensure the tool supports configuration that can lock behavior across environments.
Automation and API surface tied to database-dependent workflows
k6 uses JavaScript scenarios and built-in metrics with thresholds for latency percentiles and error rates, which makes pass or fail tied to database-backed request paths. Postman and SoapUI use test scripts and assertions inside collection runs with environment variables, which connects API calls to database-influenced responses.
Data model and assertion mechanism for real database state
dbUnit compares expected tables to actual database query results using dataset-based assertions, which directly targets data correctness. Tools like Flyway and Liquibase target schema state through migration metadata, checksums, and changelog tracking rather than direct row-level comparisons.
Provisioning and sandboxing for repeatable database state
Testcontainers starts real database engines in ephemeral Docker containers and injects connection info into tests, which supports disposable sandbox environments. JUnit enables database integration tests by combining its test lifecycle hooks like @BeforeEach and @AfterEach with JDBC-based fixtures and containerized test databases.
Integration depth with UI and network layers for database effects
Cypress and Playwright validate database effects indirectly by running end-to-end flows and inspecting network requests tied to API calls. Cypress provides time travel debugging with screenshots and network inspection, and Playwright provides trace viewer artifacts with DOM snapshots and network timelines.
Governance-grade visibility into schema change and execution history
Flyway tracks applied migration versions and detects checksum drift when scripts change after they were applied. Liquibase maintains a database changelog table for change tracking and provides rollback support, which helps governance teams audit schema evolution.
Extensibility for database-specific diagnostics and custom validation
k6 does not natively execute SQL, so teams extend validation by combining HTTP calls with direct SQL checks through custom code or middleware orchestration. Postman and SoapUI can extend validation logic with scripting hooks, but database-specific transaction state assertions still require API-layer workarounds.
Decision framework for selecting the right database testing toolchain
Start by choosing the validation boundary: load generation, API contract checks, UI workflow outcomes, or direct schema and dataset state assertions. Each boundary maps to specific tools like k6 for load and latency thresholds, Postman or SoapUI for API regression assertions, and dbUnit for dataset-level correctness.
Next decide who owns database state control and how the tool handles provisioning. Testcontainers and migration tools like Flyway and Liquibase cover different parts of the state lifecycle, so the tool selection should match the release process.
Pick the validation layer that matches the failure mode
Select k6 when the goal is validating database-backed query paths under load with latency percentile thresholds and error-rate gates. Select Postman or SoapUI when failures show up as incorrect API responses caused by database changes. Select Cypress or Playwright when regressions appear in UI workflows where database effects surface through network requests.
Require direct database assertions or accept indirect validation
Choose dbUnit when row-level correctness must be verified by comparing expected datasets against actual table contents over JDBC. Choose Cypress or Playwright when database correctness is inferred from UI-visible outcomes and observed network responses. Choose Flyway or Liquibase when the primary correctness risk is schema drift and migration execution history rather than query result differences.
Plan database provisioning and sandboxing for deterministic runs
Choose Testcontainers when integration tests must run against real PostgreSQL, MySQL, or Redis engines in ephemeral Docker containers with automatic port mapping and lifecycle management. Choose JUnit when the environment is already Java-centric and database fixtures can be implemented using JDBC with repeatable setup and teardown via @BeforeEach and @AfterEach.
Map schema management needs to migration tooling
Choose Flyway when migration correctness is validated via versioned migration history and checksum drift detection for modified applied scripts. Choose Liquibase when versioned changelogs, rollback logic, and cross-engine support are required, with changelog tracking in a database changelog table.
Design automation using each tool’s configuration and execution primitives
Use k6 thresholds and distributed execution settings to create consistent performance regression gates for database-backed endpoints. Use Postman collections with test scripts, assertions, and environment variables for repeatable API regression runs. Use Cypress time travel debugging or Playwright trace viewer artifacts when test failures must be diagnosed with screenshots, network timelines, and DOM snapshots.
Confirm integration depth for database-specific diagnostics and governance
If deadlock or lock contention classification is required, plan for k6 custom scripting or middleware integration because k6 needs external integration for those diagnostics. If governance requires auditable schema change history, rely on Flyway applied migration tracking and checksum validation or Liquibase changelog tables and rollback support.
Who should use database testing software for their data-risk profile
Database testing software fits teams that need repeatable verification across changing data, schema, and execution paths. The most effective tool depends on whether risk is query performance, API response correctness, UI workflow behavior, or schema state drift.
Many teams combine layers, but the selection should still start with a primary validation boundary.
Teams testing database-backed APIs with performance risk
k6 fits teams that need scripted traffic generation and pass or fail based on latency percentiles and error rates tied to database-backed endpoints. k6 also supports distributed execution so slow database paths can be stressed by multiple generators.
Teams validating API correctness against database-driven responses
Postman fits teams that organize database-adjacent checks into collections with test scripts, assertions, and environment variables for repeatable regression. SoapUI fits API QA teams that prefer visual test cases while still using Test Assertions and DataSources for parameterized runs.
Teams needing deterministic database state in Docker-based CI
Testcontainers fits teams that want real PostgreSQL, MySQL, or Redis engines provisioned as ephemeral containers with automatic connection info injection. JUnit fits Java organizations that already rely on build tooling like Maven or Gradle and can implement JDBC fixtures with predictable lifecycle hooks.
Teams preventing schema drift during releases
Flyway fits teams that need versioned migration history with automatic checksum drift detection for modified applied scripts. Liquibase fits teams that need declarative changelogs with rollback support and diff workflows that produce state comparison outputs.
Java teams writing fixture-driven database regression tests
dbUnit fits teams that can represent expected database state as datasets and compare expected tables to actual results through dataset-based assertions. This approach is strongest when schema changes are manageable and fixture datasets can be maintained.
Common implementation pitfalls across database testing toolchains
Database testing fails when the validation boundary is mismatched to the tool, or when database state control is handled outside the test automation path. The result is brittle tests and incorrect confidence in schema or data correctness.
These mistakes show up repeatedly across tools such as k6, Postman, Cypress, dbUnit, and migration utilities.
Treating an API test runner as a substitute for direct SQL correctness checks
Postman and SoapUI can assert request and response contracts but they cannot natively execute SQL query assertions or schema testing, so row-level correctness still needs dataset or direct DB checks. Use dbUnit for expected table comparisons when database state correctness is the real requirement.
Running UI tests without deterministic data control
Cypress and Playwright validate database effects indirectly through UI and network layers, so failures can become noisy when database seeding is not deterministic. Pair Cypress time travel debugging with stable API endpoints and seeded state, or use Testcontainers to provision disposable databases before UI flows run.
Ignoring database state provisioning and migration history gating
Flyway and Liquibase validate migration correctness via metadata tracking, but query behavior tests can still run against wrong data if state provisioning is missing. Use Flyway checksum drift detection and Liquibase changelog tracking, and connect that to test setup that seeds or provisions the database environment.
Assuming k6 can validate database internals without integration
k6 does not natively execute SQL as a primary testing interface, and lock contention or deadlock classification needs integration. Add custom SQL checks through code or middleware orchestration when database diagnostics beyond API latency and errors are required.
Overcomplicating dataset fixtures so schema evolution breaks tests
dbUnit dataset comparisons depend on maintaining stable expected dataset fixtures, and schema evolution requires careful updates. When schema churn is high, use Flyway or Liquibase to control schema changes and regenerate dataset baselines intentionally rather than letting dataset diffs drift unnoticed.
How We Selected and Ranked These Tools
We evaluated k6, Postman, Cypress, Playwright, SoapUI, JUnit, dbunit, Testcontainers, Flyway, and Liquibase using an editorial scoring model that weights features most heavily, then balances ease of use and value. The overall rating is calculated as a weighted average in which features carries the most weight at 40 percent, while ease of use and value each account for 30 percent. Each tool was scored on concrete capabilities described in its feature set, including execution model, assertion mechanics, and integration paths for provisioning and automation.
k6 separated from lower-ranked options because it provides threshold-based pass or fail rules driven by latency percentiles and error rates and supports distributed execution that stresses database-backed endpoints from multiple generators, which strongly improves control over throughput and regression gates.
Frequently Asked Questions About Database Testing Software
How do k6, Postman, and Cypress differ when validating database-backed APIs?
Which tool fits schema validation for migrations in CI: Flyway or Liquibase?
What integration and API patterns work best for wiring database tests into CI?
How does an SSO and RBAC model typically get enforced across these testing workflows?
What are common data migration or environment drift problems, and which tools mitigate them?
Which tool is best for dataset-level assertions like verifying expected rows after an update?
How do teams seed data and keep tests deterministic for database-backed UI flows?
When does Cypress or Playwright become the wrong layer for database testing?
How can tests be extended beyond built-in features for deeper database validation?
Tools reviewed
Primary sources checked during evaluation.
Referenced in the comparison table and product reviews above.
Keep exploring
Comparing two specific tools?
Software Alternatives
See head-to-head software comparisons with feature breakdowns, pricing, and our recommendation for each use case.
Explore software alternatives→In this category
Data Science Analytics alternatives
See side-by-side comparisons of data science analytics tools and pick the right one for your stack.
Compare data science analytics tools→FOR SOFTWARE VENDORS
Not on this list? Let’s fix that.
Our best-of pages are how many teams discover and compare tools in this space. If you think your product belongs in this lineup, we’d like to hear from you—we’ll walk you through fit and what an editorial entry looks like.
Apply for a ListingWHAT THIS INCLUDES
Where buyers compare
Readers come to these pages to shortlist software—your product shows up in that moment, not in a random sidebar.
Editorial write-up
We describe your product in our own words and check the facts before anything goes live.
On-page brand presence
You appear in the roundup the same way as other tools we cover: name, positioning, and a clear next step for readers who want to learn more.
Kept up to date
We refresh lists on a regular rhythm so the category page stays useful as products and pricing change.
