From qa-test-data
Authors Python test fixtures using mimesis - a fast, type-hinted, locale-aware test-data generator with 46 locales - covering Person / Address / Internet / Datetime providers and the Schema/Field pattern for typed-dict generation. Pairs with factory_boy when referential integrity is needed. Use when the project is Python and the team values speed, type hints, or strong locale coverage over Faker's larger ecosystem.
How this skill is triggered — by the user, by Claude, or both
Slash command
/qa-test-data:mimesis-dataThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Mimesis is a Python test-data generator that's "widely recognized as
Mimesis is a Python test-data generator that's "widely recognized as the fastest data generator among Python solutions" with full type hints for editor autocompletion (mimesis-readme).
The library supports 46 locales (mimesis-readme) and
exposes both per-provider methods (Person.full_name()) and a
schema-based generator for typed-dict shapes.
Schema / Field
pattern produces typed dicts directly.If the team is already standardized on Faker, switching is rarely
worth it - see faker-data. If the team
needs factory orchestration with referential integrity, pair mimesis
with factory_boy (or use factory-bot-data
in Ruby projects).
pip install mimesis
(Per mimesis-readme.)
from mimesis import Person, Address, Internet, Datetime
from mimesis.locales import Locale
person = Person(Locale.EN)
person.full_name() # 'Brande Sears'
person.email(domains=['example.com']) # '[email protected]'
person.gender()
person.title()
address = Address(Locale.EN)
address.full_address() # '123 Main St, Springfield, IL 62701'
address.city()
address.country()
internet = Internet()
internet.url()
internet.ip_v4()
internet.user_agent()
dt = Datetime()
dt.datetime()
dt.date()
dt.formatted_datetime()
(Adapted from mimesis-readme.)
from mimesis import Generic
from mimesis.locales import Locale
g = Generic(Locale.EN)
g.person.full_name()
g.address.city()
g.internet.email()
Generic aggregates every provider under one instance - preferred
when a fixture needs values from multiple providers; avoids
constructing one provider per type.
from mimesis import Field, Schema, Locale
field = Field(Locale.EN)
# Build one row's worth of data
def schema():
return {
"id": field("uuid"),
"name": field("person.full_name"),
"email": field("person.email"),
"created_at": field("datetime.datetime"),
"address": {
"city": field("address.city"),
"zip": field("address.postal_code"),
},
}
# Generate a list of rows
generator = Schema(schema=schema, iterations=1000)
data = generator.create() # → list of 1000 dicts
(Adapted from mimesis-readme schema documentation.)
The schema/field pattern is mimesis's distinguishing feature - it produces typed-dict shapes without per-field method calls, which makes it convenient for bulk fixture generation (e.g. seeding a test DB with 10k rows).
from mimesis import Person
from mimesis.locales import Locale
Person(Locale.EN).full_name() # 'Brande Sears'
Person(Locale.JA).full_name() # '広橋 美月'
Person(Locale.RU).full_name() # 'Анастасия Иванова'
Person(Locale.DE).full_name() # 'Klaus Müller'
Per mimesis-readme, 46 locales are supported. Full list at mimesis.name/latest/locales.html.
from mimesis import Generic
from mimesis.locales import Locale
g = Generic(Locale.EN, seed=12345)
g.person.full_name() # deterministic based on seed
Pass seed= at provider construction; subsequent calls are
deterministic. Same as faker-data, seed
in tests so failures reproduce locally.
Mimesis can be the value engine for factory_boy:
from factory import Factory, LazyFunction
from mimesis import Person, Locale
from myapp.models import User
person = Person(Locale.EN, seed=42)
class UserFactory(Factory):
class Meta:
model = User
name = LazyFunction(person.full_name)
email = LazyFunction(lambda: person.email())
LazyFunction ensures each factory instantiation re-calls the
mimesis method - getting a new value per fixture, not a single
shared one.
| Anti-pattern | Why it fails | Fix |
|---|---|---|
| Constructing one provider per attribute | Person() per field is N times the constructor cost; slows bulk generation. | Use Generic once; access providers as attributes. |
Hardcoding seed= literally to a value the test depends on | Brittle: a mimesis update changes the PRNG sequence; the test fails next upgrade. | Pin mimesis version; OR assert patterns (matches a regex), not literal values. |
| Using mimesis for security payloads | Mimesis generates realistic-looking data; SQL injection / XSS won't appear. | Use malicious-payload-bank. |
| Schema with 100k iterations in pytest | Memory-bound; slow. | Generate to disk (Schema.to_csv, Schema.to_json) and seed the DB outside the test. |
| Mixing mimesis + Faker in the same project | Two PRNGs to seed; two doc surfaces; two upgrade cadences. | Pick one; if migrating, do it in a single PR. |
faker-data - Python Faker alternative.synthetic-data-toolkit -
dispatcher selecting between mimesis / Faker / FactoryBot / Bogus.npx claudepluginhub testland/qa --plugin qa-test-dataProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Searches MemPalace before answering questions about past work, people, projects, or prior decisions. Returns verbatim stored content instead of guessing from model memory.