fbpx

Testdaten generieren mit Python | Schritt für Schritt

Inhalt
    Add a header to begin generating the table of contents

    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.

    Picture of Ingo Janßen

    Ingo Janßen

    Lerne nicht einfach programmieren. Löse Probleme und automatisiere Aufgaben!

    Das könnte dich auch interessieren

    Nach oben scrollen
    Newsletter Popup Form

    Keine Inhalte mehr verpassen?

    Melde dich direkt für den "Code-Kompass" an und erhalte nützliche Tipps und Informationen direkt in deinen Posteingang.