Test-Daten generieren mit Mimesis

Im Artikel „Test-Daten generieren mit Faker wurde die Möglichkeit vorgestellt, wie man mit dem Modul Faker Testdaten generieren kann.

Eine Alternative ist die Bibliothek Mimesis. Dieses Modul ist in der Massendaten-Erstellung deutlich schneller als Faker, und je nach Localization (Locale) auch besser in der Datenqualität bezüglich der Eindeutigkeit. Außerdem bietet Mimesis mehr Kategorien (Provider) als Faker, einige sind von der Localization abhängig, einige sind unabhängige Bereiche.

Die ausführliche Beschreibung, welche Daten man erzeugen kann, und wie Mimesis im Einzelnen funktioniert, findet man in der offiziellen Anleitung.

Die Installation erfolgt standardmäßig über pip: pip3 install mimesis

Hier ein paar Beispiele für eine Basis-Verwendung:

vollständiger Name, abhängig vom Geschlecht

from mimesis import Person
from mimesis.locales import Locale
from mimesis.enums import Gender

person = Person(Locale.DE)

full_name = person.full_name()  # zufällig weibl. oder männl.
print(full_name)

female_name = person.full_name(gender=Gender.FEMALE)
print(female_name)

male_name = person.full_name(gender=Gender.MALE)
print(male_name)

Ausgabe:

Adolf Adam
Gundula Fenstermacher
Walter Jung

Adresse und Region (Staat, Bezirk)

Es gibt synonyme Methoden, die dieselbe Bedeutung haben: region, federal_subject, province, prefecture als alias von state
Damit kann der Code lesbarer gestaltet werden, wenn man für die jeweilige Locale die aussagekräftige Methode verwendet, z.B. für DE region und für FR province, oder für EN state.

from mimesis import Address
from mimesis.locales import Locale

de = Address(Locale.DE)
gb = Address(Locale.EN_GB)  # EN_GB steht für Britisch; EN ist US, und Standard
ru = Address(Locale.RU)

de_address = de.address()
print(de_address)
de_region = de.region()
print(de_region)
print()

gb_address = gb.address()
print(gb_address)
gb_state = gb.state()
print(gb_state)
print()

ru_address = ru.address()
print(ru_address)
ru_federal_subject = ru.federal_subject()
print(ru_federal_subject)
print()

Ausgabe:

Gebertstraße 1164
Hessen

1153 Ballysculty Creek
Staffordshire

Аллея Новая 1102
Астраханская область
Manchmal benötigt man nur einige Daten aus einem anderen Gebietsschema, dann kann man die Erstellung einer neuen Instanz vermeiden, in dem man das aktuelle Gebietsschema temporär mit dem Locale des anderen Provider überschreibt.

from mimesis import Person
from mimesis.locales import Locale

person = Person(locale=Locale.DE)

full_name = person.full_name()

with person.override_locale(Locale.FR):
    degree = person.academic_degree()

print(f'{degree} {full_name}')

Ausgabe:

Doctorat Senta Möller
Wenn man nur Daten für ein einziges Gebietsschema generieren muss, kann man den den Generic()-Provider verwenden, damit hat man Zugriff auf alle Mimesis-Provider.

from mimesis import Generic
from mimesis.locales import Locale

generic_provider = Generic(locale=Locale.ES)

month = generic_provider.datetime.month()
print(month)

company = generic_provider.finance.company()
print(company)

address = generic_provider.address.country()
print(address)

fruit = generic_provider.food.fruit()
print(fruit)

Ausgabe:

Diciembre
Vueling Airlines
España
Pera