DTTooleras

Fake Data for Testing: How to Generate Realistic Test Data

Learn why test data matters, how to generate realistic fake data for forms, databases, and APIs, and the best tools and libraries for every language.

DevToolsHub Team18 min read634 words

Why Test Data Matters

Testing with real user data is a privacy violation and a security risk. Testing with obviously fake data ("test123", "asdf@asdf.com") misses edge cases. You need realistic fake data — data that looks and behaves like real data but doesn't belong to anyone.

Good test data helps you:

  • Find bugs that only appear with realistic inputs (long names, special characters, international addresses)
  • Test performance with realistic data volumes
  • Demo your product without exposing real user information
  • Comply with GDPR/CCPA by never using real personal data in development

What Makes Good Test Data?

Realistic Format

Bad:  test@test.com
Good: sarah.johnson42@gmail.com

Bad:  123 Street
Good: 4521 Oak Avenue, Apt 3B

Bad:  1234567890
Good: (555) 847-2931

Edge Cases

Your test data should include:

  • Very long names (Wolfeschlegelsteinhausenbergerdorff)
  • Names with special characters (O'Brien, García, Müller)
  • International phone formats (+44 20 7946 0958)
  • Addresses with apartment numbers, PO boxes
  • Email addresses with dots, plus signs, hyphens
  • Empty/null values for optional fields

Consistent Relationships

If you generate a user in "New York", their zip code should start with 1, their area code should be 212/718/917, and their state should be "NY".

Generating Fake Data

Browser-Based (No Installation)

Use our Fake Data Generator to instantly generate:

  • Names (first, last, full)
  • Email addresses
  • Phone numbers
  • Street addresses
  • Cities, states, zip codes
  • Company names and job titles
  • Dates of birth
  • Usernames and websites
  • IP addresses and UUIDs

Export as JSON, CSV, or copy from the table view. All generation happens in your browser — no data is sent anywhere.

JavaScript / Node.js

// Using @faker-js/faker
import { faker } from "@faker-js/faker";

const user = {
  id: faker.string.uuid(),
  name: faker.person.fullName(),
  email: faker.internet.email(),
  phone: faker.phone.number(),
  address: faker.location.streetAddress(),
  city: faker.location.city(),
  company: faker.company.name(),
  avatar: faker.image.avatar(),
  createdAt: faker.date.past(),
};

// Generate 100 users
const users = Array.from({ length: 100 }, () => ({
  name: faker.person.fullName(),
  email: faker.internet.email(),
}));

Python

from faker import Faker

fake = Faker()

user = {
    "name": fake.name(),
    "email": fake.email(),
    "phone": fake.phone_number(),
    "address": fake.address(),
    "company": fake.company(),
    "job": fake.job(),
    "dob": fake.date_of_birth().isoformat(),
}

# Generate localized data
fake_de = Faker("de_DE")
print(fake_de.name())     # German names
print(fake_de.address())  # German addresses

SQL Seeding

-- Generate test data directly in PostgreSQL
INSERT INTO users (name, email, created_at)
SELECT
  'User ' || generate_series AS name,
  'user' || generate_series || '@example.com' AS email,
  NOW() - (random() * interval '365 days') AS created_at
FROM generate_series(1, 1000);

For more complex SQL data, generate it with our Fake Data Generator, export as JSON, then convert to SQL INSERT statements with our JSON to SQL converter.

Test Data for Specific Use Cases

Form Testing

Generate data that tests form validation:

  • Names with apostrophes: O'Brien, D'Angelo
  • Emails with plus signs: user+tag@gmail.com
  • Phone numbers with extensions: (555) 123-4567 x890
  • Addresses with special characters: 123 Main St, Apt #4B

Database Seeding

Generate large volumes for performance testing:

API Testing

Generate JSON payloads:

Related Tools

fake datatest datamock datafakertest data generatorfake data generatordatabase seeding

Related articles

All articles

Practice with free tools

200+ free developer tools that run in your browser.

Browse all tools →