Tạo Dữ Liệu Mock

Tạo dữ liệu mock thực tế (user, email, địa chỉ, ngày) ở dạng JSON, CSV, SQL. 7 locale.

generators

Mock Data Generator

Runs entirely in your browser. Your input never leaves your device.

What next?

How it works

Tại sao mock data quan trọng

Dữ liệu test cứng như user1, [email protected], hay 123 Main St sẽ che giấu bugs chỉ xuất hiện với dữ liệu thực tế. Một field tên vừa với "Alice" sẽ bị tràn với "Nguyễn Thị Minh Châu". Field ngày tháng hoạt động ở US lại vỡ khi có format châu Âu. Mock data tốt giúp code của bạn gặp đủ loại dữ liệu đa dạng — độ dài string khác nhau, ký tự unicode, edge cases — trước khi người dùng thật làm điều đó trên production.

Tool này dùng faker.js, thư viện tạo fake data JavaScript phổ biến nhất, chạy hoàn toàn trong browser.

Các category dữ liệu

faker.js tổ chức fake data theo module. Những cái developer dùng nhiều nhất:

PersonfirstName, lastName, fullName, jobTitle, gender, bio. Có locale: locale Nhật Bản tạo tên Nhật plausible; locale Brazil tạo tên tiếng Bồ Đào Nha.

Internetemail, userName, url, ip, ipv6, mac, password, domainName. Hữu ích cho user accounts, API logs, network records.

LocationstreetAddress, city, state, country, zipCode, latitude, longitude. Kết hợp với person data để build user profile thực tế.

Financeamount, currencyCode, currencyName, accountNumber, creditCardNumber, transactionType. Tốt cho e-commerce và fintech fixtures. Lưu ý: số credit card pass Luhn validation nhưng không phải card thật.

Companyname, catchPhrase, buzzPhrase, industry. Hữu ích khi seed org hay account records.

Datepast, future, between, birthdate, recent. Trả về JavaScript Date objects; tool serialize thành ISO 8601 strings trong output.

Loremword, words, sentence, paragraph, paragraphs. Lorem ipsum cổ điển hoặc câu tiếng Anh ngẫu nhiên.

JSON vs CSV output

Chọn JSON khi:

  • Feed data vào REST API hoặc seed database qua migration script
  • Schema có nested objects (ví dụ user với embedded address)
  • Viết test fixtures cho Jest, Vitest, hay Playwright

Chọn CSV khi:

  • Import vào spreadsheet (Excel, Google Sheets)
  • Load vào database với COPY hay LOAD DATA
  • Gửi cho stakeholder cần review sample data

Nested JSON fields được tự động flatten cho CSV: { "address": { "city": "Hà Nội" } } thành column address.city.

Seed để có kết quả tái lặp

Mặc định faker.js dùng random seed mỗi lần chạy, nên mỗi lần generate ra dữ liệu khác nhau. Nếu cần output xác định — cùng fake records mỗi lần chạy test — hãy set một seed value. Số nguyên nào cũng được; tool truyền nó vào faker.seed(n).

// Tương đương với những gì tool làm bên dưới
import { faker } from '@faker-js/faker'
faker.seed(42)
const name = faker.person.fullName() // Luôn cùng một tên với seed 42

Dùng fixed seed cho CI fixtures được commit vào repo. Dùng random seed khi muốn khám phá UI trông như thế nào với dữ liệu đa dạng.

Tạo dữ liệu theo locale

faker.js có built-in locales cho 60+ vùng. Đổi locale ảnh hưởng đến tên, địa chỉ, số điện thoại và một số field khác. Locale en tạo dữ liệu tiếng Anh Mỹ mặc định. Các locale phổ biến khác:

  • vi — Tên và địa chỉ Việt Nam
  • ja — Tên Nhật (kanji + hiragana)
  • pt_BR — Tên tiếng Bồ Đào Nha Brazil và CPF-style IDs
  • de — Tên và địa chỉ Đức
  • zh_CN — Tiếng Trung giản thể

Đặc biệt hữu ích khi test xử lý internationalization — nếu app chỉ được test với tên ASCII, bạn sẽ không phát hiện encoding bugs cho đến khi ra mắt.

Tạo được bao nhiêu rows?

Browser xử lý thoải mái khoảng 10.000 rows mà không lag đáng kể. Trên mức đó, cả vòng lặp generation lẫn render kết quả trong UI bắt đầu tốn nhiều memory. Với dataset lớn (100k+ rows), generate theo batch nhỏ hơn hoặc dùng faker.js trong Node.js script:

import { faker } from '@faker-js/faker'
import { writeFileSync } from 'fs'

const rows = Array.from({ length: 100_000 }, () => ({
  id: faker.string.uuid(),
  name: faker.person.fullName(),
  email: faker.internet.email(),
}))

writeFileSync('fixtures.json', JSON.stringify(rows, null, 2))

Các use case thực tế

API integration tests — generate 50 user objects, feed vào POST endpoint trong vòng lặp, assert response shape. Phát hiện serialization bugs mà fixed objects bỏ sót.

Database seeding — generate records khớp với schema, rồi chạy qua ORM's bulk-insert. Test constraints, indexes, và triggers với realistic cardinality.

Demo environments — populate staging database để stakeholders thấy app trông thực tế, không phải bảng trống hay placeholder text.

Schema validation — pipe generated JSON qua JSON Schema hay Zod validator. Nếu validator reject, schema quá strict hay faker đang generate edge cases schema không ngờ đến — cả hai đều là phát hiện hữu ích.

Privacy

faker.js chạy hoàn toàn trong browser. Không có dữ liệu generate nào được gửi lên server. Tất cả giá trị được tạo bằng thuật toán — không phải tên hay email thật của người thật.

FAQ

Dữ liệu được generate có phải dữ liệu thật không? Có vô tình trùng với người thật không?

Không. faker.js xây dựng giá trị bằng thuật toán — chọn từ word lists, áp dụng format patterns, và kết hợp các thành phần. Xác suất vô tình generate ra tên + email + địa chỉ của một người thật là cực kỳ thấp. Tuy nhiên, không bao giờ dùng dữ liệu generate trong production context yêu cầu danh tính thật.

Set seed làm gì?

Seed khởi tạo random number generator của faker ở một trạng thái cố định, nên mọi lần chạy với cùng seed đều cho output giống hệt nhau. Điều này quan trọng cho reproducible test fixtures — nếu test của bạn assert các giá trị cụ thể, fixture phải ổn định qua các lần chạy. Dùng số nguyên nào cũng được. Đổi seed, bạn sẽ nhận dataset hoàn toàn khác (nhưng lại reproducible).

Có thể generate nested JSON objects không?

Tool hiện tại generate flat records theo schema. Với cấu trúc nested, dùng faker.js trong Node.js script cho phép bạn compose objects tự do:

const user = {
  id: faker.string.uuid(),
  profile: {
    name: faker.person.fullName(),
    avatar: faker.image.avatar(),
  },
  address: {
    city: faker.location.city(),
    country: faker.location.country(),
  },
}

Tại sao số rows của CSV và JSON đôi khi khác nhau?

Chúng không khác nhau — cả hai mode generate cùng số records. Điều có thể khác biệt là row count hiển thị nếu bạn mở CSV trong Excel và Excel tự convert values (ví dụ UUID trông như số bị truncate). File gốc đúng; hiển thị là do Excel interpret.

Tối đa nên generate bao nhiêu rows trong browser?

Khoảng 10.000 rows là thoải mái. Trên mức đó, vòng lặp generation và JSON serialization bắt đầu tiêu thụ memory đáng kể và UI có thể lag. Với 100k+ rows, cài @faker-js/faker qua npm và chạy Node.js script — có thể generate hàng triệu rows, giới hạn chỉ là dung lượng ổ đĩa.

Làm sao generate dữ liệu theo locale cụ thể như CPF của Brazil hay postal code Đức?

Set locale thành pt_BR hay de trong dropdown. Các locale module của faker.js bao gồm format đặc thù vùng cho số điện thoại, zip code, và ID. Không phải mọi locale đều implement mọi field — nếu locale-specific implementation thiếu, faker sẽ fallback về giá trị tiếng Anh mặc định.

Có thể dùng tool này cho load testing không?

Được, với một lưu ý. Tool này generate data trong browser cho fixture files và seeding scripts. Với load testing (gửi hàng nghìn requests mỗi giây), generate fixture files ở đây, rồi feed vào load testing tool của bạn (k6, Artillery, Locust). Không nên drive load testing trực tiếp từ browser.

Số credit card được generate ở đây có valid không?

Các số này pass Luhn algorithm (kiểm tra checksum) vì faker generate chúng trông thực tế. Chúng không phải số card thật và sẽ bị từ chối bởi mọi payment processor thật. Không bao giờ dùng chúng trong production payment flow.