惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

PCI Perspectives
PCI Perspectives
Microsoft Security Blog
Microsoft Security Blog
MongoDB | Blog
MongoDB | Blog
T
The Blog of Author Tim Ferriss
罗磊的独立博客
人人都是产品经理
人人都是产品经理
The Cloudflare Blog
Engineering at Meta
Engineering at Meta
Y
Y Combinator Blog
宝玉的分享
宝玉的分享
Recorded Future
Recorded Future
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
月光博客
月光博客
Recent Announcements
Recent Announcements
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Apple Machine Learning Research
Apple Machine Learning Research
T
Threatpost
The GitHub Blog
The GitHub Blog
M
MIT News - Artificial intelligence
Scott Helme
Scott Helme
P
Palo Alto Networks Blog
T
Tenable Blog
P
Privacy International News Feed
V
Visual Studio Blog
F
Fortinet All Blogs
酷 壳 – CoolShell
酷 壳 – CoolShell
I
Intezer
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
AI
AI
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
S
Security Affairs
S
SegmentFault 最新的问题
C
Cisco Blogs
博客园 - 聂微东
MyScale Blog
MyScale Blog
V
Vulnerabilities – Threatpost
量子位
T
The Exploit Database - CXSecurity.com
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Security Latest
Security Latest
P
Proofpoint News Feed
阮一峰的网络日志
阮一峰的网络日志
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
T
Troy Hunt's Blog
T
Tailwind CSS Blog
Stack Overflow Blog
Stack Overflow Blog
云风的 BLOG
云风的 BLOG
A
About on SuperTechFans
The Last Watchdog
The Last Watchdog

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python) The Hidden Cost of AI Systems Nobody Talks About. undefined vs undeclared, and how typeof behaves Switching from file-based jobs to NATS/Kafka in Rust without changing code io_uring Adventures: Rust Servers That Love Syscalls Why Agentic AI is Killing the Traditional Database The POUR principles of web accessibility for developers and designers Quantum Neural Network 3D — A Deep Dive into Interactive WebGL Visualization How To Install Caveman In Codex On macOS And Windows Automation Pipeline Reliability: Why Your Workflow Breaks When Nobody Is Watching I Built an 'Open World' AI Coding Agent — It Works From ANY Folder From Freelancing to Product: A Tech Service Company's SaaS Transformation China's AI Giants: Adding Tencent Hunyuan & ByteDance Doubao to AI University (74 Providers) On the Vibe Coders and Their Lies clerk: Auto-Summarize Your Claude Code Sessions AI Weekly — 2026/04/10–04/17 | The Model Lockdown Is Here, but the Toolchain Is the Real Battleground AI 週報 — 2026/04/10–2026/04/17 模型封鎖潮來了,但工具鏈才是真戰場 Maybe this is how Open-Source apps are born... 🚀 Fine-Tune LLMs with LoRA and QLoRA: 2026 Guide tRPC v11 + Next.js App Router: End-to-End Type Safety Without the Boilerplate ShadCN UI in 2026: Why I Stopped Installing Component Libraries and Started Owning My Components SaaS Billing in React Server Components: Stripe + Supabase Without a Single `useEffect` Join our DEV Weekend Challenge — $1,000 in Prizes Across TEN winners! Submissions Due April 20 at 6:59 AM UTC. Implementing FSRS Spaced Repetition in Flutter + Supabase — Adding Memory Science to an AI Learning App "I Texted My Localhost From the Train — Claude Code Fixed the Bug Before I Got Home" I Built a Sales Prep AI and It Went Deeper Than Expected Design to Code #2: One JSON, Eleven Outputs Solving the 100M-Row Problem: A Summary Table Pattern for High-Volume Push Notification Logs Flutter Web With Wasm: What Actually Changes For Developers I Built 50 Royalty-Free Soundtracks for My Side Project in a Weekend Using AI Music Generation The Vibe Coding Security Checklist: 7 Things to Check Before You Ship Stop Letting Googlebot Guess Fix Your React App's SEO Right Desconstruindo o Streaming do LinkedIn: Como Criar um Engine de Extração de Vídeo de Alta Performance com HLS e FFmpeg (EDA Part-1) EDA (Exploratory Data Analysis) Explained With Real Life — Why Looking at Your Data Is the Most Important Step in Machine Learning Brand Relationship Management at Scale: Our 4-Touch Outreach System for 200+ Brands Why String.fromEnvironment() Might Return an Empty String in Dart JGuardrails 1.0.0 — Hardening Java LLM Apps Against Jailbreaks, Toxicity, and Prompt Injection Plan and Schedule a Full Week of Threads Content From One Claude Conversation Coding Cat Oran Ep3, Five Tables Changed Everything Updated: BFF Pattern I'm done watching freelancers get buried by 200 proposals. So I'm building the alternative. This is my first post BFS Algorithm in Java Step by Step Tutorial with Examples Tracking LLM Pricing Monthly: An Open Dataset for 22 AI Models How We Measure Content ROI on a Comparison Site: Revenue Attribution Without Perfect Data Introducing Nova AI Ops: The AI-Native Operating System for SRE Teams I built a free desktop video downloader for Windows — Grabbit How Talkie OCR Helps Vision-Impaired & Dyslexic Users Read the World Around Them VRCFaceTracking安装和iPhone面捕配置教程,有bug Even CrowdStrike Can't See Your Agents The Automation Gold Rush: What n8n Workflows and Claude Are Opening Up for Developers Right Now
I Stopped Writing Database Fixtures by Hand. Here's What I Do Instead.
Jitendra Dev · 2026-04-30 · via DEV Community

I'll be honest with you. For the longest time, writing database fixtures was just something I accepted as part of the job. You build a feature, you write the tests, you write the fake data the tests run against. Nobody loves doing it. Nobody complains loudly enough to change it. It just becomes part of the rhythm.

Then I inherited a codebase where the fixtures hadn't been touched in two years.

The schema had changed eleven times. Half the foreign keys in the fixture files pointed to IDs that no longer existed. Date fields were hardcoded to 2022, which meant every piece of logic tied to account age or subscription tenure was silently returning wrong results. The tests were green. The data was completely detached from anything resembling reality.
That was the moment I decided to actually fix this instead of patch it again.

The Problem With Handwritten Fixtures Nobody Talks About

The obvious problem is that fixtures go stale. You update a table, add a column, rename a field — and suddenly a fixture file three directories away is broken in a way that takes 45 minutes to track down.
But the deeper problem is that handwritten fixtures are optimistic by nature. When you write fake data by hand, you naturally write the clean, happy-path version. Realistic names, round numbers, sensible dates. You don't write the edge cases because you're not thinking about edge cases when you're setting up the test environment. You're thinking about the feature.

So your local database looks nothing like production. Production has users who signed up in 2017 with half-filled profiles. It has orders with NULL shipping addresses from a bug that lived for three weeks in 2023. It has customers whose subscription tier doesn't match their billing cycle because of a migration that ran slightly wrong. Your fixtures have none of that. And so your tests are validating behavior against a version of your product that doesn't actually exist.That gap is where bugs live. The ones that only show up in production.

Why Copying Production Doesn't Solve It?

The obvious workaround is to grab a production snapshot. Real data, real distributions, real edge cases.

I've done this. Most developers have. And the problem isn't just the compliance angle — though that's real and worth taking seriously if your product touches anything regulated. The practical developer problem is that production data is unpredictable in ways that break local environments constantly.

You restore a prod snapshot locally and suddenly a background job triggers on stale records and hammers an external API. Or your seed script runs and conflicts with hardcoded IDs in your test suite. Or you realize you've just put 200,000 rows in a local Postgres instance and your laptop fan sounds like a helicopter.

And then there's the reset problem. Production data doesn't reset cleanly. You can't just wipe it and regenerate a fresh consistent state in 30 seconds when something goes wrong in a test run. Fixtures, for all their problems, at least give you that.

What I actually needed was data that behaved like production — same distributions, same edge cases, same relational complexity — but that was generated fresh on demand and had no connection to real customer records.

What I Use Now?

I started using SyntheholDB a few months ago and it changed how I think about test data entirely.

The workflow is simpler than I expected. You describe your schema in plain English — not in a config file, not in YAML, just in a sentence or two the way you'd explain your data model to a new engineer on the team. Something like: "I need a Users table, an Orders table, and a Products table. Each order should link to a user by user ID. Order value should scale loosely with how long the user has been a customer. Include some users with no orders."

That's the input. What comes back is a fully generated dataset with foreign keys that actually resolve, value distributions that reflect the logic you described, date ranges that make sense, and edge cases baked in — including the users with no orders you mentioned. The relational integrity holds across every linked table.

Before the export, a PII scan runs automatically. If any generated value accidentally matches a pattern that resembles a real identifier — an email format that collides with an actual domain, a number sequence that looks like an SSN — it gets flagged before the file leaves the tool. Nothing slips into your environment that shouldn't be there.
The whole thing from blank screen to a CSV ready to seed my local database takes under five minutes. You can try it free at db.synthehol.ai — no credit card, no setup call.

How It Fits Into a Real Workflow?

For local development I just run the generation once, commit the output CSV as my seed file, and the team uses it. When the schema changes, I regenerate. Takes two minutes. No more hunting down which fixture file is now broken.

For CI I wired SyntheholDB into the pipeline seed step directly. Every test run starts from a freshly generated dataset that's consistent, realistic, and relational. Test isolation improved significantly because we're no longer sharing stale state between runs.

For demos it's been genuinely useful in a way I didn't anticipate. Spinning up a demo environment with realistic-looking data used to require either using sanitized production exports — which always felt slightly risky — or building a custom seed script that took days to get right.

Now I describe what the demo data should look like and have a seeded environment in under five minutes. The data looks real enough to be convincing without any actual customer records involved.

What Actually Changed?

The thing I noticed most wasn't the time saved, though that's real. It was that I stopped dreading schema changes.

When your test data is generated rather than handwritten, a schema change just means regenerating. You're not hunting through fixture files. You're not updating foreign key references by hand. You describe what you need, you get it back, you move on.

The edge cases improved too. Because I can describe the distribution I want — "include about 15% of users with incomplete profiles, and 5% with orders in a failed payment state" — the test suite now covers behavior that the old handwritten fixtures never got close to. We caught two bugs in the first month that would have lived until production under the old approach.

I'm not going back to writing fixtures by hand. The 20 minutes I spent figuring out SyntheholDB bought back hours every sprint and gave me test data that actually reflects how a real product behaves.

If you're still maintaining fixture files that are six months out of sync with your schema, that time is worth spending.