Testdaten zu generieren, ist immer viel Aufwand. In der Regel reicht es nicht, irgendwie zusammen gewürfelte Buchstaben und Zahlen zu haben.
Es müssen dann schon Name, Alter, Geschlecht oder gar ganze Adressen sein.
Oft werden solche Daten daher manuell generiert.
Schön altmodisch in Excel Tabellen, die von Hand befüllt werden. Und genau das wollen wir vermeiden.
Was sind Testdaten?
Häufig ist es nicht möglich, auf echte Daten zurückzugreifen. Dass kann Datenschutz Grüne haben, aber auch einfach die Menge oder Verfügbarkeit der Daten. Deswegen versuchen wir mit Testdaten die Realität so gut wie möglich nachzubilden. Je näher an der Realität, desto besser.
Welche Testdaten brauche ich?
Die Auswahl geeigneter Testdaten ist die schwierigste Aufgabe beim Testen. Man muss den Anwendungsfall genau analysieren. Dabei ist es wichtig, auch Cornercases zu berücksichtigen. Perfekte Testdaten gibt es allerdings nicht. Es ist immer ein abwägen zwischen Aufwand und Vollständigkeit.
Wie kann ich mit Python Testdaten generieren?
Mit Python lassen sich in wenigen Zeilen Code Daten in verschiedene Formate schreiben. Das allein macht Python zu einer guten Wahl. Allerdings gibt es auch noch Bibliotheken, die uns die Arbeit ENORM erleichtern. Eine davon ist Faker.
Was ist Faker?
Faker ist ganz einfach eine Python Bibliothek, die die hilft “Fake-Daten”, also Beispiel-Daten, zu erzeugen.
Faker is a Python package that generates fake data for you. Whether you need to bootstrap your database, create good-looking XML documents, fill-in your persistence to stress test it, or anonymize data taken from a production service, Faker is for you.
Faker Dokumentation
Übersetzt:
“Faker ist ein Python-Paket, das gefälschte Daten für Sie erzeugt. Egal, ob Sie Ihre Datenbank befüllen, gut aussehende XML-Dokumente erstellen, Ihre Persistenz ausfüllen, um sie zu testen, oder Daten aus einem Produktionsdienst anonymisieren müssen, Faker ist für Sie.“
Das klingt doch gut, oder?
Nehmen wir an, du möchtest deine Excel Arbeiten in der Firma automatisieren.
Für die Entwicklung brauchst du gut strukturierte Testdaten.
Zehn Datensätze lassen sich noch einfach per Hand schreiben.
Aber was ist mit Hundert, oder Tausend, oder Zehntausend?
Das ist abwegig?
Mittlere Unternehmen haben im Durchschnitt schon 249 Mitarbeiter.
Wenn du eine Auswertung über die Mitarbeiter erstellen sollst, vielleicht noch kombiniert mit anderen Daten aus anderen Abteilungen, kommen schnell größere Datensätze zusammen.
Und dein Programm soll ja nicht nur die Logik abdecken können.
Es muss die Verarbeitung ja auch in akzeptabler Zeit erledigen können. Andernfalls ist es nicht hilfreich.
Faker – Ein Überblick
Zuerst installieren wir Faker:
pip install Faker
Als Nächstes müssen wir eine Instanz von Faker erzeugen.
Mit der können wir dann alle weiteren Aufrufe durchführen und unsere Daten erzeugen.
Zum Beispiel möchten wir einfach einen Namen generiert bekommen:
from faker import Faker
fake = Faker()
print(fake.name())
John Richardson
Oder wie wäre es mit einer ganzen Adresse?
from faker import Faker
fake = Faker()
print(fake.name())
print(' --- ')
print(fake.address())
Mariah Cline --- 087 Kimberly Summit Suite 954 Sabrinaland, ND 28084
Hmm… Das sieht ja schon hervorragend aus.
Aber die Adresse ist offensichtlich nicht deutsch.
Angenommen du möchtest ein Dashboard erstellen und musst das für eine Präsentation mit Dummy Daten befüllen.
Dann wäre es doch klasse, die Daten auch in Deutsch anzeigen zu können, oder?
Kein Problem!
from faker import Faker
fake = Faker('de_DE')
print(fake.name())
print(' --- ')
print(fake.address())
Paula Steinberg --- Adlerallee 2/3 03038 Passau
Setze einfach den gewünschten Ländercode ein, wenn du die Instanz erzeugst.
Und schon generiert dir Faker die Daten in der von dir gewählten Lokalisierung.
Ist das super?
Aber das ist noch nicht alles!
Du brauchst Firmennamen?
print(fake.company())
Trapp Bolander GmbH
Auch ein ganzes Profil ist kein Problem:
print(fake.profile())
{'job': 'Bäcker', 'company': 'Schuster Barth GbR', 'ssn': '571-99-6844', 'residence': 'Langestraße 720\n69880 Zerbst', 'current_location': (Decimal('-19.5016355'), Decimal('123.217586')), 'blood_group': 'O+', 'website': ['https://mentzel.com/', 'https://www.fiebig.com/', 'https://www.weinhold.de/', 'https://www.boucsein.de/'], 'username': 'gerlachwaltraud', 'name': 'Karin Kobelt', 'sex': 'F', 'address': 'Klingelhöferstr. 0\n22632 Marienberg', 'mail': 'qauch-schlauchin@web.de', 'birthdate': datetime.date(2014, 8, 12)}
Das sind dir zu viele Daten und einzelne Teile davon wären besser? Kein Problem. Dann frag einfach genau das ab, was du brauchst:
print(fake.name())
print(fake.job())
print(fake.company())
print(fake.phone_number())
Tilmann Etzler Binnenschiffer Gumprich +49 (0) 7846 765572
Und zu guter Letzt wird natürlich auch immer wieder Dummy Text verwendet.
Natürlich kann Faker auch den liefern:
print(fake.text())
Fehlen Platz merken Flasche Spaß warum Apfel. Dazu Schiff Woche sechs verkaufen nächste Uhr. Vater Haare Fahrrad. Jeder werfen Garten schenken ganz Küche verkaufen lesen.
Natürlich kompletter Unfug. Aber es geht ja auch nur darum, Platz zu füllen.
Testdaten erstellen
Jetzt haben wir einen schönen Überblick, was man mit Faker alles tolles machen kann.
Testdaten haben wir allerdings immer noch keine. Dafür müssen wir die Daten zum Beispiel in eine Excel Datei bringen.
Auf geht’s!
Testdaten zusammen stellen
Zuerst müssen wir uns überlegen, welche Daten wir überhaupt wollen.
Je nach Anwendungsfall ist das natürlich unterschiedlich.
Mein Anwendungsfall sieht wie folgt aus:
Ich habe zwei Excel Listen mit Mitarbeiterdaten.
Und ich muss jetzt vergleichen, ob sich bei den Daten irgendwas verändert hat.
Hat ein Mitarbeiter seine Kontodaten geändert? Oder ist er vielleicht umgezogen?
Ich muss mir also eine Excel Datei erstellen, die die entsprechenden Daten beinhaltet.
Dafür möchte ich:
- Name
- Vorname
- Telefon
- Strasse
- Postleitzahl
- Stadt
- Bank
- Eintrittsdatum
Das sollte reichen.
Um Daten in Python zu gruppieren, sind Dictionaries perfekt.
Also sammel ich erstmal alle Teile in einem Dictionary zusammen. Als Nächstes suche ich in der Faker Dokumentation, welche Funktionen ich alle benötige.
Das Ergebnis sieht dann so aus:
data = {
'Name': fake.last_name(),
'Vorname': fake.first_name(),
'Telefon': fake.phone_number(),
'Strasse': fake.street_address(),
'Postleitzahl': fake.postcode(),
'Stadt': fake.building_number(),
'Bank': fake.iban(),
'Eintritt': fake.date_between().strftime('%d.%m.%Y')
}
Testdaten in Massen erzeugen
Mit dem oben dargestellten Code bekommen wir einen Datensatz.
Das ist ein Anfang, hilft uns aber wahrscheinlich nicht weiter.
Wir brauchen mehr.
Der einfachste Weg ist eine Schleife. Mit dem Keyword range() kann ich einfach angeben, wie lang die Schleife laufen soll.
Und somit festlegen, wie viele Datensätze ich erhalten möchte.
Die müssen dann nur noch in einer Liste gesammelt werden und schon habe ich meine Testdaten.
Wie viele sollen es denn sein?
Zweihundert sollten für den Anfang reichen, oder?
data_list = []
for num in range(200):
data_list.append({
'Name': fake.last_name(),
'Vorname': fake.first_name(),
'Telefon': fake.phone_number(),
'Strasse': fake.street_address(),
'Postleitzahl': fake.postcode(),
'Stadt': fake.building_number(),
'Bank': fake.iban(),
'Eintritt': fake.date_between().strftime('%d.%m.%Y')
})
Damit haben wir zweihundert Datensätze in unserer Liste.
Und wie bekommen wir die jetzt in eine Excel Datei?
Testdaten in eine Excel Datei schreiben
Dafür nehmen wir uns einfach Pandas zur Hilfe.
Eine Alternative dazu ist OpenPyxl.
Auch damit lässt sich leicht in Excel Dateien schreiben.
Zuerst muss Pandas natürlich installiert werden:
pip install pandas
Anschließend können wir unsere Liste mit Dictionaries direkt an das zu erzeugende Dataframe übergeben.
Das Tolle an Dictionaries ist, dass sie ja bereits über eine Schlüssel-Wert-Anordnung verfügen.
Pandas macht sich das zunutze und nimmt den Schlüssel auch direkt als Schlüssel, bzw. als Spaltenbezeichner.
df = pandas.DataFrame(data_list)
print(df.head())
Name Vorname Telefon Strasse \ 0 Meister Ellen 04430229920 Margitta-Tlustek-Ring 8/6 1 Kuhl Dorina +49(0)7129 316986 Nohlmansstr. 57 2 Briemer Maximilian (03535) 092864 Nohlmansgasse 9 3 Vollbrecht Nadine +49(0)3897 04586 Frieda-Wulf-Straße 620 4 Köhler Mustafa (09747) 978538 Wilmsstraße 5 Postleitzahl Stadt Bank Eintritt 0 28488 9 DE90949484125288038243 02.12.2003 1 50493 9 DE31108884855323267580 04.09.2013 2 77232 31 DE70429361781945975509 13.01.2015 3 58974 5/4 DE33218379974058686713 28.11.1992 4 06222 4/6 DE91937796144031922343 08.02.1998
Aufgrund der Breite wurde die Tabelle bei mir umgebrochen.
Sollten dir nicht alle Spalten angezeigt werden, dann setz einfach noch die Option, bevor du Pandas benutzt:
pandas.options.display.max_columns = None
Pandas schränkt bei der Ausgabe mit print automatisch ein, wie viel dargestellt wird.
Diese Option entfernt die Einschränkung und zeigt wieder alles an.
Als Letztes fehlt jetzt aber immer noch die Excel Datei.
Das geht in Pandas super einfach mit einem to_excel().
df.to_excel('testdata.xlsx')
Herzlichen Glückwunsch!
Schon hast du eine Excel Datei mit dem Namen testdata.xlsx erstellt, in der du deine Zweihundert (!) Testdaten vorfindest.
Dir reichen Zweihundert nicht?
Dann ändere einfach die Zahl in der range()-Funktion und schon bekommst du die gewünschte Menge!
Zusammenfassung
Mit Faker lassen sich super schnell und flexibel fast alle gewünschten Testdaten generieren.
Nach der Installation erzeugst du einfach eine Instanz mit dem gewünschten Ländercode und schon kann es losgehen.
Du brauchst einen Überblick, welche Funktionen dir alle zur Verfügung stehen?
Dann wähle in der Dokumentation einfach deinen gewünschten Ländercode aus.
Dir hat der Artikel gefallen? Dann lass es mich gerne wissen und hinterlasse mir einen Kommentar!
Du willst mehr lernen oder hast weitere Fragen?
Dann schau einfach im Discord vorbei! Hier findest du sicher die passenden Antworten!
Kurse
Code Challenges und YouTube Videos führen nicht immer zum gewünschten Erfolg.
Manchmal ist es besser, gezielt und strukturiert durch ein Thema zu arbeiten.
Schau dich einfach mal bei meinen Kursen um.
Ohne lästiges Blah Blah steigen wir direkt in das Thema ein und behandeln alles, was du brauchst.
Ingo Janssen ist ein Softwareentwickler mit über 10 Jahren Erfahrung in der Leitung seines eigenen Unternehmens.
Er studierte Wirtschaftsinformatik an der TH Deggendorf und hat Softwareentwicklung an der FOM Hochschule in München unterrichtet.
Ingo hat mit einer Vielzahl von Unternehmen zusammengearbeitet, von kleinen und mittelständischen Unternehmen bis hin zu MDAX- und DAX-gelisteten Unternehmen.
Ingo ist leidenschaftlich daran interessiert, sein Wissen und seine Expertise mit anderen zu teilen. Aus diesem Grund betreibt er einen YouTube-Kanal mit Programmier-Tutorials und eine Discord-Community, in der Entwickler miteinander in Kontakt treten und voneinander lernen können.
Sie können Ingo auch auf LinkedIn, Xing und Gulp finden, wo er Updates über seine Arbeit teilt und Einblicke in die Tech-Branche gibt.
YouTube | Discord | LinkedIn | Xing | Gulp Profile