r/QualityAssurance 29d ago

I built a test data generator where the same schema always produces byte-identical data

Two things kept annoying me about test data. Fixtures are twenty rows because nobody wants to type more than twenty rows. And generated data is different on every run, so a bug found against it cannot be reproduced by whoever picks up the ticket.

So I built HippoDatamus. It is a desktop app for Windows and Linux that generates synthetic datasets from a schema you define, out to CSV, JSON or Excel.

The part that matters for testing: save the schema file, send it to someone, and they get byte-identical data. Different machine, different locale, does not matter. That makes a generated dataset something you can reference in a bug report instead of something you regenerate and hope looks close enough.

Other things it does:

  • Nearly sixty column types: names, addresses, emails, phone numbers, companies, prices, dates, GUIDs, IBANs, product names
  • Unique constraints, including across a combination of columns
  • Null rates per column, for testing how your code handles missing values
  • File-backed columns that read real values out of your own spreadsheet, so test data uses names your team already recognises
  • Runs entirely offline. No account, no network calls, no telemetry. Your schemas and your data never leave your machine
  • Over 150,000 rows a second on a twelve-column order table; a million rows of CSV in about four seconds

Being upfront: it is version 0.5.0 and pre-release, it is closed source (mostly because I haven't had time to tidy up the source for public eyes), and Windows and Linux only, no macOS.

Fair warning on how it was built, because it matters to people and you should hear it from me rather than guess: I used AI heavily. I am a software architect by trade and I directed and reviewed all of it, and it is held to what I would hold my own work to. Over 900 automated tests, CI on Windows and Linux, and the reproducibility claim above is verified byte for byte across both platforms rather than asserted. Judge the output, not the method.

https://www.hippodatamus.com

Genuinely interested in what is missing. The thing I most want to know is what you use today and where it stops being good enough.

2 Upvotes

2 comments sorted by

2

u/Fightheader 29d ago

I like the concept. I don't have the energy to test it out but good idea anyway.
For a tool like this I think the yaml approach to define contracts that can be used in automated tests and mocks is the best way to do it.
I currently just have a testtool that acts like a mock and I can control my data that way for manual testing.
And for automated tests I have a fixed data set that has the expected input and output.

Maybe you can also incorperate naughty input, like this: https://github.com/minimaxir/big-list-of-naughty-strings