Transcript: PyTest

· Back to episode

Full episode transcript. Timestamps refer to the audio playback.

Dominik

Ja, hallo liebe Hörerinnen und Hörer, willkommen beim Python-Podcast, Episode 53 mit PyTest.

Dominik

Hi Jochen.

Jochen

Ja, hallo Dominik, willkommen.

Jochen

Ja, mein Gast dabei, und zwar den Florian. Hey Florian.

Jochen

Hallo.

Jochen

Ja, hallo zusammen.

Dominik

Ja, wir haben gehört, du machst ja öfter mal was mit PyTest und dann haben wir gedacht,

Dominik

dann fragen wir dich doch einfach mal, ob du mich was darüber erzählen magst.

Jochen

Genau. Ich weiß nicht, vielleicht magst du ja einfach mal so ein bisschen erzählen,

Jochen

was du so tust oder irgendwie, warum PyTest da ein ganz gutes Thema wäre.

Florian

Was ich so tue, ist schon eine Frage, da kann ich wahrscheinlich fünf Minuten dazu reden.

Florian

Geh los.

Florian

Ich mache tatsächlich so fast Vollzeit-Open-Source, und zwar kam das nicht von PyTest ursprünglich,

Florian

sondern von einem anderen Projekt von mir, von Qt-Browser, da kann ich vielleicht später noch mal mehr dazu sagen.

Florian

Über das Projekt bin ich dann auch zu PyTest gekommen, und was ich jetzt eigentlich mache,

Florian

ist zum einen...

Florian

Ich arbeite an Qt-Browser und PyTest, durch Spenden finanziert,

Florian

und zum anderen gebe ich im Herbst jeweils hier an der Fachhochschule Python-Unterricht für Erstsemester-Studierende,

Florian

also Bachelor-Informatik-Studierende.

Florian

Also ja, ganz viel Open-Source, ganz viel auch Freiheit, sage ich mal, wann ich was mache,

Florian

und eben auch viel PyTest.

Jochen

Ja, genau. Du bist einer der PyTest-Maintainer auch, ne?

Florian

Genau. Das hat auch ganz lustig schon angefangen.

Florian

Ich habe da halt eben durch Qt-Browser, durch dieses Projekt reingekommen,

Florian

weil ich da Tests geschrieben hatte dafür, damals noch mit Unitest-Framework von Python,

Florian

was mit Python mitkommt, und da gab es dann so ein Adopt-Pytest-Month, April 15, glaube ich, sowas.

Florian

Also doch schon eine Weile her, ja.

Florian

Also ein bisschen, ja.

Florian

Wo dann Leute hinter PyTest, anderen Open-Source-Maintainern,

Florian

anderen Projekten...

Florian

anderen Projekten geholfen haben, auf PyTest umzusteigen.

Florian

Da habe ich eben mitgemacht mit Qt-Browser und bin dann ziemlich schnell zu PyTest gekommen

Florian

und habe angefangen, da Dinge zu verbessern, an Plugins Dinge zu implementieren,

Florian

die ich halt haben wollte oder die mir aufgefallen sind.

Florian

Und dann hieß es irgendwann, ja, willst du nicht das nächste Release machen?

Florian

Und ich fand halt, ja, Moment mal, ich habe ja noch nicht mal irgendwie Commit-Rechte.

Florian

Und wie es halt so läuft bei Open-Source, da habe ich sie eben.

Florian

Ja, cool.

Florian

Ja, das klingt gut.

Dominik

Über die ganzen Sachen müssen wir gleich nochmal besonders reden, auch über die Plugins und so, das klingt spannend.

Dominik

Ich würde aber sagen, Jochen, wir fangen wie immer einmal mit den News an.

Dominik

News, okay, alles klar.

Jochen

Ja, ist auch ein bisschen was wieder zusammengekommen, weil jetzt die letzte Episode auch schon wieder ein bisschen was her ist.

Jochen

Und genau, ja, was haben wir denn so?

Jochen

Django 5.

Jochen

Django 5 ist jetzt gerade letzte Woche rausgekommen.

Jochen

Genau, das ist ja immer so, das kriege ich halt immer mit, weil ich muss dann immer alles umstellen.

Jochen

Ja, Django im Einsatz und ja, war aber diesmal sehr entspanntes Update, hat alles gut funktioniert.

Jochen

Ging gut, nicht wie Deprecated.

Jochen

Nee, also was die Verbesserung angeht, es ist auch, also es gibt ein tolles neues Ding, was halt irgendwie,

Jochen

ein Bug, der seit 18 Jahren offen war, ein Issue, der seit 18 Jahren offen war, der jetzt geschlossen wurde.

Jochen

Nämlich, da ging es darum, dass er eigentlich blöd ist, wenn man bei einem Model-Field irgendwie Default angibt,

Jochen

dass das halt nur dann ausgefüllt wird, wenn man irgendwie eine Zeile über, also das Modell tatsächlich über Django,

Jochen

baut und auch da ist es halt nicht immer so klar, dass das wirklich dann passiert,

Jochen

weil es gibt ja auch noch Bulk Create und man kann halt auf verschlungenen Wegen irgendwie Dinge erzeugen in der Datenbank.

Dominik

Bulk Create macht Defaults nicht rein?

Jochen

Nicht unbedingt, also es kann sein, dass wenn du das jetzt einfach so verwendest, dass es dann klappt.

Jochen

Das war mir tatsächlich neu.

Jochen

Aber wenn du das halt irgendwie so ein bisschen avancierter verwendest und wirklich schnell sein willst,

Jochen

dann kann es gut sein, dass das nicht passiert, weil ja, und das ist natürlich doof.

Dominik

Das hat wahrscheinlich auch mit der Funktionalität zu tun, dass man jetzt,

Dominik

dass man jetzt so Felder haben kann, die von anderen Feldern abhängig sind und zwar direkt im Feld

Dominik

und ohne das halt über die Save-Methode zu machen.

Jochen

Ja, nee, das weiß ich gar nicht, ob die direkt zusammenhängen, das geht jetzt auch, genau.

Dominik

Die Sarah hat einen tollen Blog-Antrag zugeschrieben, vielleicht kennst du den auch.

Jochen

Ja, gibt's auch ein Video, hat sie dazu gemacht.

Jochen

Genau, die macht ja hier auch die PyCologne-Meetup-Gruppe, organisiert sie mit.

Jochen

Ja, genau, also was jetzt geht, ist halt, dass man nicht sagt Default in einem Model-Field,

Jochen

sondern DB, Underscore.

Jochen

Ja, genau, also was jetzt geht, ist halt, dass man nicht sagt Default in einem Model-Field, sondern DB, Underscore.

Jochen

Default, und dann wird das halt nicht nur gesetzt, wenn man halt irgendwie über Django das Ding baut,

Jochen

sondern halt in die Datenbank mit reingeschrieben, dass das so ist.

Jochen

Und ja, das ist ja schon mal ziemlich großartig.

Jochen

Man kann es halt auch jetzt sehen, welche Defaults es gibt, wenn man einfach nur sich das Schema anguckt

Jochen

und nicht irgendwie den Applikationscode dazu hat, was ja auch so ein Ding ist,

Jochen

dass es halt blöd ist, wenn man ein Datenbankschema hat,

Jochen

dass man nur verstehen kann, wenn man einen Applikationscode auch dazu legt,

Jochen

weil Applikationscode halt deutlich volatiler ist oft als Datenbankschema.

Jochen

Ja, aber also das ist jetzt ziemlich cool.

Jochen

Und genau, so viele haben, also ich habe immer verwendet sowas wie Timestamp-Model

Jochen

aus den Django-Extensions oder halt aus Django-Model-Utils,

Jochen

um zum Beispiel sowas wie Created-Zeitstempel oder Modified-Updated dran zu bauen.

Jochen

Das kann man ja jetzt halt auf eine deutlich elegantere Art machen.

Jochen

Ja, dann genau diese...

Dominik

Generated-Field heißt das, glaube ich, ne? Einfach Models, Generated-Field und dann...

Jochen

Generated-Field ist jetzt diese andere Geschichte, genau.

Jochen

Genau, da kann man dann halt auch so Dinge, manchmal möchte man ja auch irgendwas indizieren,

Jochen

was halt irgendwie...

Jochen

Ein Suchindex.

Jochen

Ja, was halt auf irgendwas basiert, was halt berechnet wird aus unterschiedlichen Spalten,

Jochen

die man halt in der Datenbank hat und nicht direkt irgendwie eine Spalte selber ist.

Jochen

Und das geht jetzt halt auch relativ einfach.

Jochen

Ja, dann gab es noch, ich habe jetzt aber ganz ehrlich gesagt vergessen, was es genau war.

Jochen

Es gab einige Verbesserungen an den Formularen.

Jochen

Also man kann jetzt irgendwie Help-Text und Label und Dinge irgendwie einfacher benutzen,

Jochen

dass einzelne Felder als Field-Set einfach verwendet.

Jochen

Dann sind die automatisch, glaube ich, mit dabei.

Dominik

Genau, das muss man vorher mal ganz umständlich auseinanderproben.

Jochen

Ja, und ja, ehrlich gesagt, mehr kann ich mich nicht erinnern.

Jochen

Aber ja, es ist auf jeden Fall eine coole neue Release.

Jochen

Ja...

Dominik

Du wolltest, wenn ich das richtig sehe, über diesen OpenAI...

Jochen

Ich weiß nicht genau, ob euch das irgendwie tangiert oder ob ihr das davon mitbekommen habt,

Jochen

ob ich das nur mitbekommen habe, weil ich das halt zufällig irgendwie alle immer verfolge, aber...

Dominik

Ja, erzähl doch erstmal, von was du da genau erzählst.

Dominik

Ja, ja, ja.

Dominik

Was du da sagen möchtest.

Jochen

Naja, es gab ja so leichte irgendwie Schwankungen im OpenAI-Management.

Jochen

Im Management, ja.

Dominik

Ich bin hier, ich bin doch nicht hier, ich bin wieder da, hurra.

Jochen

Genau, und ja.

Jochen

Was da so der Hintergrund ist, ich weiß es nicht.

Jochen

Vielleicht ist es auch etwas, wo man eigentlich gar nichts zu sagen sollte,

Jochen

weil es ist halt halt einen bestimmten Unterhaltungswert und das kann man...

Dominik

Ja, dann lass uns doch ein bisschen leichte Unterhaltung vorweg dort machen,

Dominik

weil man hört ja so ein paar Gerüchte.

Dominik

Ja, was hast du denn gehört?

Dominik

Ja, ich erzähl mal, ich bin erstmal gespannt.

Dominik

Also man hört ja immer...

Dominik

Ich...

Jochen

Ich hab ganz viel gehört, ich weiß es aber nicht.

Jochen

Also ich würde denken, dass die...

Jochen

Ja, dass der Hauptgrund halt irgendwie daran besteht,

Jochen

dass es halt diese komische Konstruktion gibt,

Jochen

dass OpenAI ja eigentlich eine Non-Profit-Organisation ist

Jochen

und die kontrolliert halt die kommerzielle Entität,

Jochen

die halt nur deswegen gegründet worden ist,

Jochen

weil man halt diese JetGPT-Geschichte auch als Produkt irgendwie rausbringen wollte

Jochen

und dann gesagt hat, okay, das können wir nicht im Rahmen von diesem Non-Profit machen,

Jochen

weil das wird einfach zu teuer und wir müssen da...

Jochen

irgendwie auch Fremdkapital haben,

Jochen

um das halt irgendwie alles brechen zu können und so.

Jochen

Und ja, im Vorfeld davon ist jetzt...

Jochen

Ja, der Name fällt mir nicht mehr ein.

Jochen

Der Gründer von Anthropic,

Jochen

also der Firma, die jetzt auch Claude irgendwie gebaut hat,

Jochen

ist also quasi ein ähnliches Ding wie JetGPT,

Jochen

bloß halt sozusagen von einer anderen Firma.

Jochen

Der war vorher bei OpenAI

Jochen

und der hat auch schon mal versucht,

Jochen

Sam Oldman vom Board feuern zu lassen.

Jochen

Also der hat zuerst gesagt so,

Jochen

hey, das ist...

Jochen

Das ist nicht okay, so geht das nicht.

Jochen

Und wenn...

Jochen

Das könnt ihr ja so nicht machen.

Jochen

Und dann hieß es so, ach doch, geht doch.

Jochen

Und dann hat er sich ans Board gewendet und gesagt,

Jochen

feuert den CEO mal,

Jochen

das ist irgendwie nicht okay.

Jochen

Und dann hat das Board drüber nachgedacht

Jochen

und dann haben sie gesagt, nee.

Jochen

Und dann hat er gesagt, gut, dann gehe ich jetzt halt.

Jochen

Und hat ein paar Leute mitgenommen

Jochen

und dann halt eine neue Firma aufgemacht.

Jochen

Und ja, aber das ist jetzt noch gar nicht so lange her.

Jochen

Ich meine, da überschlagen sich natürlich so ein bisschen die Ereignisse irgendwie.

Jochen

Aber das ist jetzt auch erst knapp über ein Jahr her.

Jochen

Und ja, offenbar...

Dominik

Der Rest, die neuen Sachen sind alle ziemlich closed,

Dominik

wenn man so ein bisschen genauer hinguckt.

Jochen

Ja, das ist natürlich immer so ein bisschen...

Jochen

Also Open AI, ich meine, der Name ist so ein bisschen...

Jochen

Ja.

Dominik

Die Proprietäre, das ist die Proprietäre und so, genau.

Jochen

Ja, und natürlich ist halt auch die Frage...

Dominik

Die Papers sind geschlossen, da sind nur noch Zusammenfassungen drin

Dominik

und keine richtig guten Erkenntnisse mehr und so.

Jochen

Ja, ja, das sind nur noch so Technical Reports.

Jochen

Und natürlich, also Open AI macht keine Open-Source-Modelle oder sowas.

Jochen

Die haben überhaupt nie irgendwas released.

Jochen

Und eigentlich ist ja die Mission von...

Jochen

dem Non-Profit sozusagen der Allgemeinheit irgendwie zu nutzen.

Dominik

Ja, wäre mal schön.

Jochen

Und dann ist halt die Frage, wie lässt sich das vereinbaren?

Jochen

Wenn man auf der einen Seite halt irgendwie jede Menge Risikokapital nimmt

Jochen

und irgendwie dann Produkte baut und dann Geld dafür einnimmt

Jochen

und sich im Grunde in Konkurrenz sieht mit den großen Tech-Giganten

Jochen

und halt auch ja von einem von denen halt ja massiv finanziert wird.

Jochen

Irgendwie, ich weiß nicht, Microsoft hat da irgendwie eine Milliarde reingesteckt oder so.

Jochen

Und halt auch eine Bewertung hat inzwischen von...

Jochen

weiß ich nicht, 80 Milliarden oder irgendwie ganz unglaubliche Beträge.

Jochen

Und ja, und dann halt auch nichts mehr in der Richtung tut,

Jochen

was halt die Mission eigentlich vorgibt,

Jochen

dann kann ich mir schon vorstellen, dass das Spannung macht

Jochen

und dass die Leute dann halt auch irgendwann sagen,

Jochen

so jetzt reicht's aber und...

Dominik

Also das, was ich so unter der Hand höre, ist natürlich Bullshit, wissen wir alle.

Dominik

Aber Q-Star haben sie gefragt und hat gesagt,

Dominik

vorher, ihn schmeißen raus.

Dominik

Bitte?

Dominik

Sie haben Q-Star gefragt und Q-Star hat gesagt,

Dominik

schmeißen raus.

Dominik

Das ist die nächste...

Dominik

Ach so.

Dominik

Ja, das kann man natürlich, ja.

Dominik

Ja, ich weiß auch nicht.

Dominik

Also, ja.

Jochen

Ja, dann gab's ja auch diese ganzen komischen Lobby-Aktivitäten,

Jochen

irgendwie jetzt auch was AI-Act, was sich nicht in Europa angeht und so,

Jochen

wo man ja auch sagen muss,

Dominik

Wir sind für eine AI-Regulierung, sagte der Minister.

Jochen

Nein, nein, ich meine, Regulierung ist ja vielleicht gar nicht so schlecht,

Jochen

aber sozusagen die Konkurrenz von Open AI zu regulieren,

Jochen

sodass man da die Regulierung um Erlaubnis fragen muss,

Jochen

bevor man da irgendwas machen darf, ist vielleicht...

Jochen

Also, ich bin...

Jochen

Also, Uwe...

Jochen

Das ist ja schon wieder ein ganz neues Fass.

Jochen

Das Fass will man vielleicht nicht aufmachen,

Jochen

aber dass man das regulieren will,

Jochen

dass Leute da nicht zu Schaden kommen,

Jochen

das kann ich durchaus nachvollziehen.

Jochen

Ja, und nein.

Jochen

Ja, also, ich finde, das ist...

Jochen

Aber das ist ja...

Jochen

Da kann man wenig gegen sagen.

Jochen

Also, man sagt...

Jochen

Nein, nein, der Wunsch ist richtig, würde ich sagen.

Jochen

Ja.

Jochen

Also, aber dass man jetzt die Technik selber reguliert,

Jochen

das finde ich halt komisch.

Jochen

Ja, genau.

Jochen

Weil das ist halt irgendwie...

Jochen

Und, ja, da gab's halt diverse Lobby-Beschreibungen.

Dominik

Ja, die Frage ist halt, wie das halt überhaupt geht,

Dominik

ohne dass man jetzt den Stecker zieht oder so.

Dominik

Ja.

Dominik

Naja.

Jochen

Ja, jedenfalls ist es ja jetzt auch nicht so gekommen.

Jochen

Es ist jetzt die Richtlinie...

Jochen

Das ist ja noch nicht unter Dach und Fach.

Jochen

Es ist ja bloß irgendwie sozusagen...

Jochen

Es gibt ein Verhaltensergebnis,

Jochen

auch irgendwie seit letzter Woche oder so was.

Jochen

Das sagt ja auch im Grunde, ja, im Wesentlichen,

Jochen

wir regulieren halt die Anwendung,

Jochen

aber nicht die Technik selber.

Dominik

Ja, Transparenz regeln wir halt ganz gut, ne?

Dominik

Nach dem Motto, du musst das Modell halt irgendwie...

Jochen

Ja, Open Source ist halt explizit ausgenommen.

Jochen

Das ist halt schon mal großartig.

Jochen

Was halt bedeutet, okay, wenn ich jetzt hingehen will

Jochen

und sage, okay, ich mache hier meine eigene Suchmaschine

Jochen

oder so auf internen Dokumenten,

Jochen

die halt irgendwie besser funktionieren soll,

Jochen

dann muss ich nicht OpenAI fragen,

Jochen

sondern dann kann ich das halt irgendwie selber machen.

Jochen

Kann ich mir in Lama feintunen oder was auch immer,

Jochen

Mistral oder was auch immer

Jochen

und kann das halt einfach machen

Jochen

und es ist nicht verboten, einfach so.

Jochen

Ja, also genau.

Jochen

Also schon mal...

Jochen

Also im Grunde ist eigentlich alles halbwegs okay.

Jochen

Und Sam Altman ist ja auch wieder zurück zu OpenAI,

Jochen

heißt ja auch wieder alles okay.

Jochen

Und ich glaube, das mit dem...

Jochen

mit der...

Jochen

mit dem Nutzen für die Gesellschaft

Jochen

das kriegen sie bestimmt auch noch hin.

Jochen

Ich glaube nicht, dass ihnen da das Geld zu Kopf steigt

Jochen

oder da irgendwie das irgendwas dran machen kann,

Jochen

wenn da jemand eine Milliarde investiert.

Jochen

Nein, nein, das ist überhaupt gar keine Gefahr.

Jochen

Das ist, glaube ich, kein Problem für die.

Jochen

Nein, niemals.

Dominik

Warum sollte denn niemals irgendwie sich jemand korrumpieren lassen?

Jochen

Ja, also, nee, nee.

Jochen

Ja.

Jochen

Ja.

Jochen

Und ich meine, das Board hat ja schon gezeigt,

Jochen

dass sie da irgendwie absolut in der Lage sind,

Jochen

auch das zu kontrollieren und durchzusetzen,

Jochen

wenn sie finden, dass das nicht okay ist.

Jochen

Daher, ich habe da überhaupt gar keine Bedingungen.

Jochen

Ja, okay.

Jochen

Also, das war sozusagen die leichte Unterhaltung zum Thema.

Jochen

Ja, das war die leichte Unterhaltung zum Thema.

Dominik

Kurz vor Weihnachten noch mal ein bisschen Advent.

Dominik

Ja.

Dominik

Advent of God und was kann man auch wieder spielen?

Dominik

Ja, genau.

Dominik

Was hatten wir noch so?

Dominik

News.

Dominik

Du hast noch eine wichtige News.

Dominik

Naja, wichtig.

Dominik

Für Python.

Dominik

Ja.

Dominik

Ja.

Dominik

Gill Removal.

Jochen

Genau, Gill Removal ist beschlossene Sache.

Jochen

Wer sich dafür interessiert,

Jochen

es gibt da einen schönen...

Jochen

Es gibt einen neuen Podcast.

Jochen

Ich weiß auch nicht, ob wir den schon erwähnt hatten.

Jochen

Core-PY heißt der.

Jochen

Ist irgendwie von Lukas Langer und Pablo Galindo Salgado.

Jochen

Irgendwie den Release-Managern für die letzten beiden Versionen.

Jochen

Die machen den und reden halt über so CPython-interne Geschichten.

Jochen

Zum Beispiel war das die erste Episode,

Jochen

war über den CPython-Core-Dev-Sprint oder halt andere Themen,

Jochen

wie zum Beispiel jetzt, dass es dann...

Jochen

Ja.

Jochen

Just-in-Time-Compiler irgendwie für 3.13 wohl geben soll

Jochen

und solche Dinge.

Jochen

Und da gab es jetzt auch eine Episode über das Entfernen von Gill,

Jochen

was halt eine komplizierte Geschichte ist und viel Arbeit wird.

Jochen

Aber ja, jetzt wird das Ganze wohl angegangen

Jochen

und bin gespannt.

Florian

Ich fand halt die Tagline ganz lustig vom Podcast.

Florian

One talks like a Mexican, the other like a Russian.

Florian

Both hate the comparison.

Florian

Das ist mir gar nicht aufgefallen.

Florian

Aber ja, stimmt, das ist gut.

Florian

Ja.

Florian

Ja.

Dominik

War das CinderX, das ist die letzte Folge?

Jochen

Die letzte habe ich, glaube ich, noch nicht gehört, ja.

Jochen

Da haben sie, ah, da haben sie mit,

Jochen

haben sie da nicht mit Karl Mayer geredet?

Jochen

Jep.

Jochen

Karl Mayer, ganz interessanter Typ.

Jochen

Von Meta.

Jochen

Ja, genau.

Jochen

Der hat, ja, Meta, aber der ist einer der Hauptentwickler

Jochen

hinter dem Django-Python-Kern von Instagram.

Jochen

Mhm, klar.

Jochen

Und er hat, da gab es mal eine sehr interessante Episode,

Jochen

ich habe jetzt wieder vergessen, wo und wann,

Jochen

aber...

Jochen

wo er darüber geredet hat,

Jochen

das, was man so vor Probleme kriegt,

Jochen

wenn man halt irgendwie mehr als,

Jochen

deutlich mehr als eine Million Zeilen Python irgendwie hat,

Jochen

die, und dann eine Anwendung, die darauf basiert,

Jochen

dass man halt so...

Dominik

Ich glaube, den Artikel hatten wir auch schon das eine oder andere Mal

Dominik

irgendwo in den Shownotes gelinkt, wenn ich mich recht erinnere.

Dominik

Kann sein, ja.

Jochen

Also, genau, das kann man, also, ja, ich habe es noch nicht gehört.

Jochen

Ja, Kopf EYF, das war ein guter Podcast.

Jochen

Ja, genau.

Jochen

Und dann erinnere ich mich noch,

Jochen

letztes Jahr hatten wir darüber geredet,

Jochen

dass es da so gewisse Sicherheitsstrategien gibt,

Jochen

dass es da so gewisse Sicherheitsstrategien gibt,

Jochen

dass es da so gewisse Sicherheitsstrategien bei LastPass gab.

Jochen

Ja.

Jochen

Und da dachte ich, okay, muss ich diesmal auch...

Jochen

Ich kann mich an den Januar und den Februar erinnern,

Jochen

wo ich 1.000 Passwörter umstellen musste.

Jochen

War super.

Jochen

Wo ich dann gesagt habe, ja, okay, so prinzipiell ist OnePassword

Jochen

jetzt auch nicht so viel besser zum Beispiel.

Jochen

Aber zum Glück sind sie noch nicht irgendwie hopsgenommen worden.

Jochen

Ja, das hat sich jetzt geändert.

Jochen

Jetzt ist auch OnePassword hopsgenommen worden.

Jochen

Und zwar über Okta.

Jochen

Also, ich manchmal denke so, okay, Okta ist auch so ein...

Jochen

Also, ich verstehe nicht genau, warum Unternehmen sowas verwenden,

Jochen

aber okay.

Dominik

Ja, ist ja total super, SSO und so.

Dominik

Muss man alles über so einen Anbieter machen.

Dominik

Ist Okta nicht auch in Zero aus?

Dominik

Ja, aus Zero, ja.

Dominik

Ja, der Dömm.

Jochen

Ja, also, ich glaube, es war nicht so ganz super schlimm,

Jochen

aber dazu gab es auch ein Postmortem, was wir veröffentlicht haben.

Jochen

Und das war einfach nur, wenn man sich das anguckt,

Jochen

das war einfach nur total schrecklich.

Jochen

Wie der Markt klingt peinlich.

Dominik

Oh ja, wir versprechen euch, es ist gar nichts geleakt worden

Dominik

und es ist auch nichts kaputt gegangen.

Dominik

Es sind jetzt so ein paar Dokumente verloren gegangen.

Dominik

Ja, aber, ja.

Dominik

Also, Zugriff auf die Datenbank oder so.

Jochen

Ja, ich habe auch keine gute Lösung dafür.

Jochen

Ich weiß nicht, wenn es das...

Dominik

Ich finde es schwierig, tatsächlich.

Dominik

Wir hatten ja letztes Jahr schon mal das Thema.

Dominik

Ja, das Thema hatten wir schon mal.

Dominik

Es kommt irgendwie immer wieder.

Dominik

Verrätst du, wie du das machst, Florian?

Dominik

Passwörter?

Florian

Ja, tatsächlich ganz langweilig lokal bisher.

Florian

Mit KeyPassXC ist es, glaube ich, inzwischen.

Florian

Ich bin da mal irgendwie gewechselt von einem Volk zum anderen.

Florian

Das und dann so ein minimales Frontend darüber,

Florian

namens KeepMenu, was dann auf Rofi aufsetzt.

Florian

Also so ein Keyboard-Menü.

Florian

Und dann, ja, wenn ich mal irgendwie was brauche,

Florian

was editieren muss oder so, mache ich halt dieses KeyPassXC auf

Florian

und sonst einfach alles mit Tastaturkürzel und Autotype.

Dominik

Aber du kommst halt auch von dem Rechner nicht runter, ne?

Dominik

Und wenn der Rechner irgendwie dein Backup-Problem hat,

Dominik

dann ist es blöd.

Dominik

Das ist so, ja.

Florian

Ich habe tatsächlich dann teilweise das Problem,

Florian

dass ich halt irgendwo am Handy mal...

Florian

Irgendwo ein Passwort brauche oder so.

Florian

Ja.

Florian

Aber ich bin eh so der Mensch, der fast immer sein Laptop dabei hat.

Florian

Zum einen, und was Backups angeht,

Florian

habe ich das tatsächlich dann alles mal ausgedrückt

Florian

und in ein Bankschließfach gelegt.

Florian

Ja, das glaube ich auch.

Jochen

Das ist keine so schlechte Idee, ja.

Florian

Weil ich halt doch fand, ja, wenn das weg ist,

Florian

habe ich echt ein gröberes Problem.

Florian

Ja, ja.

Jochen

Ja, also ich finde auch für mich alleine oder so,

Jochen

da bin ich auch KeyPassXC oder so.

Jochen

Das war, das klingt, sah schon gut aus,

Jochen

aber das Problem für mich ist halt,

Jochen

auch der Support von irgendwie so

Jochen

Familie und Verwandten.

Jochen

Ja, und Sharing.

Jochen

Das und Sharing und mal irgendwie für jemanden was freischalten und so.

Jochen

Und das, da habe ich bisher noch keine gute Geschichte gefunden.

Dominik

Ja, also ich finde 2FA tatsächlich gar nicht so schlecht.

Dominik

Dann, und dann halt immer irgendwie so ein Key mitnehmen,

Dominik

wo ich halt auch, dann geht es halt nur zweimal oder sowas.

Dominik

Einer ist dann halt im Bankschließfach

Dominik

und den brauchst du halt dann und so.

Dominik

Das ist auch keine schlechte Idee, finde ich.

Jochen

Ja, also...

Florian

Was ich mir wahrscheinlich anschauen würde,

Florian

wenn ich jetzt was wähle, was ein bisschen mehr,

Florian

was ein bisschen mehr Cloud dran hat, sage ich mal.

Florian

Spitwarden.

Dominik

Habe ich wieder.

Florian

Weil das ist, glaube ich, größtenteils Open Source.

Florian

Und es gibt, glaube ich, auch eine alternative Server-Implementation,

Florian

die man dann irgendwie selber hosten kann.

Dominik

Ja, also ich habe es mir angeguckt.

Dominik

Ich wollte auch erst als Umstände.

Dominik

Ich habe damit angefangen und ich weiß nicht.

Dominik

Also ich bin so ein Usability.

Dominik

Ich möchte das immer einfach und schnell und so haben.

Dominik

Und irgendwie nervt es mich.

Dominik

Kann sein, dass das technisch die sauberste Lösung ist.

Dominik

Aber ich fand es irgendwie total anstrengend.

Dominik

Ja.

Dominik

Naja.

Dominik

Ja, okay.

Jochen

Also vielleicht müssen wir einfach nächstes Jahr nochmal drüber reden.

Jochen

Ja, vielleicht ist da irgendwas.

Jochen

Also mir fällt aber auch nichts ein,

Jochen

was man irgendwie so architektonisch hat.

Jochen

Man muss, irgendeinen Tod muss man immer sterben.

Dominik

Also zum Beispiel, wie teile ich auch,

Dominik

jetzt hatten wir auch letztes Mal, glaube ich,

Dominik

irgendwie Geheimnisse durch Entwicklungsteams irgendwie.

Dominik

Auch nicht so einfach.

Dominik

Ja.

Dominik

Ja.

Dominik

Also ich benutze jetzt tatsächlich so einen Service,

Dominik

wo halt die Entwickler gar nicht mehr die Geheimnisse kennen müssen,

Dominik

die halt autogeneriert werden.

Dominik

Das heißt, ich kenne die selber nicht.

Dominik

Aber man muss sich halt mit der API dahin verbinden.

Dominik

Dieser Service kennt die halt alle.

Dominik

Also, ne?

Dominik

Ja.

Dominik

Ist halt auch dann wieder irgendeine Party,

Dominik

die dann halt Zugriff darauf hat.

Dominik

Aber gut, dass da jetzt nichts kritisch ist und so.

Dominik

Und ja, gut.

Dominik

Aber immerhin läuft der Rest dann so.

Dominik

Naja.

Dominik

Ja, das ist schwierig.

Dominik

Okay, ja.

Dominik

Ich weiß nicht.

Jochen

Ansonsten habe ich jetzt keine News mehr, glaube ich.

Jochen

Vielleicht bräuchte man einfach ordentliche Tests

Jochen

für diese wundervollen Passwort-Manager.

Jochen

Tja.

Jochen

Ja, also die Überleitung war jetzt ein bisschen hakelig.

Dominik

Vielleicht reden wir ja über das Thema.

Dominik

Dann haben wir heute noch News.

Dominik

Fertig?

Dominik

Ja, genau.

Jochen

Und dann können wir eigentlich mal hier mit PyTest starten.

Dominik

Ja, ich glaube, die meisten Menschen wissen, was PyTest ist.

Dominik

Also das Test-Framework, was man oft benutzt,

Dominik

wenn man Tests in Python schreiben möchte.

Dominik

Würde ich auch empfehlen, ehrlicherweise.

Dominik

Ihr wahrscheinlich auch.

Dominik

Ich auch.

Dominik

Alleinig.

Dominik

Ja.

Dominik

Keine Überraschung soweit.

Dominik

Aber dann überlasse ich einfach mal dem Florian vielleicht das Wort

Dominik

und den Einstieg in das Thema vielleicht auch.

Dominik

Das erzählst du ja vielleicht auch öfter.

Dominik

Also ich fand auf jeden Fall den Vortrag,

Dominik

den auf der letzten EuroPython darüber gehalten,

Dominik

das war schon ziemlich gut.

Dominik

Der war spannend.

Florian

Ja, erzähl ich tatsächlich öfter,

Florian

weil ich ja auch Firmenkurse mache zu PyTest.

Florian

Das wären so die Einzelfirma-Schiene,

Florian

die ich eben neben den Open-Source-Dingen noch fahre.

Florian

Und da mache ich halt auch erstmal ein bisschen Werbung für PyTest.

Florian

Gerade früher war das vielleicht noch ein bisschen wichtiger,

Florian

weil da gab es oft echt noch Firmen,

Florian

die umgestiegen sind von Unitest oder von Nose.

Florian

Nose-Test-Framework.

Florian

Inzwischen muss man sagen,

Florian

dass wirklich so das Default eigentlich PyTest ist.

Dominik

Also Nose-Test ist sogar deprecated, oder?

Jochen

Nose, ja, ja.

Jochen

Ne, ne.

Jochen

Nose-Test gibt es auch noch.

Jochen

Ah, Nose-Test.

Jochen

Ja, Nose-Test.

Jochen

Jetzt habe ich es falsch verstanden.

Florian

Da stand schon seit Jahren, steht in der Dokumentation,

Florian

man soll bitte kein Nose verwenden.

Florian

Es gibt irgendwie ein Nose 2,

Florian

aber ich habe noch kein Projekt gefunden,

Florian

was das nutzt so effektiv.

Florian

Und wenn man sich halt dann so anschaut,

Florian

wie die User zahlen,

Florian

es gibt jeweils jährlich so eine Umfrage,

Florian

die Python Developer Survey

Florian

von der Python Software Foundation und JetBrains.

Florian

Und da hat PyTest, ich glaube,

Florian

vorletztes Jahr oder so die 50%-Marke geknackt.

Florian

Okay.

Florian

Ich hätte sogar mehr geschätzt, ehrlicherweise.

Florian

Ja, wobei irgendwie 30% halt sagen,

Florian

sie nutzen gar kein Test-Framework.

Florian

Okay.

Florian

Ja.

Florian

Ja.

Florian

Also würdet ihr denn Tests benutzen

Florian

oder wann würdet ihr denn Tests benutzen?

Florian

Das ist vielleicht auch eine spannende Frage.

Florian

Oder wofür?

Dominik

Alles 100% Covered.

Dominik

Jeder Commit, der die Coverage reduziert,

Dominik

wird automatisch nicht durch die Committung durchgelassen?

Dominik

Oder gibt es da unterschiedliche Ansichten?

Florian

Ich habe tatsächlich ein Projekt jetzt,

Florian

wo ich das versuche,

Florian

für das Modul,

Florian

was ich eben an der Fachhochschule unterrichte.

Florian

Da habe ich pro Jahr irgendwo 100 Studierende

Florian

und das Modul heißt Automatisierung mit Python.

Florian

Und ich habe dann eben halt auch meine Arbeit hinter dem Modul

Florian

so ein bisschen automatisiert.

Florian

Zumindest so der langweilige Teil.

Florian

Also irgendwie Noten dann ausrechnen und E-Mails verschicken

Florian

mit der Noten-Aufschlüsselung und so was.

Florian

Und da bin ich jetzt dran, das alles ein bisschen zu refacturen

Florian

und für den neuen Teil quasi, was refactured ist,

Florian

auch wirklich 100% Test-Coverage zu haben.

Florian

Weil ich halt finde, ja, ich berechne da irgendwie Zeugnisnoten

Florian

und so, das muss halt schon irgendwie

Florian

keine Box haben, in irgendeiner Weise.

Dominik

Also ich finde auch, also so kritische Teile der Infrastruktur

Dominik

sind ganz gut, wenn man die testet.

Dominik

Also sowas wie Authentifizierung, Autorisierung oder sowas,

Dominik

sollte man schon irgendwo mal gucken, dass das stimmt.

Dominik

So die kritische Business-Logik.

Dominik

Weiß nicht, also jede Einzeiler-Funktion weiß ich jetzt nicht.

Jochen

Ja, es gibt ja Leute, die diesen Standpunkt vertreten und sagen:

Jochen

"Na ja, gut, wenn man anfängt, über solche Zahlen zu diskutieren,

Jochen

dann macht das eigentlich nur 100% Sinn."

Jochen

Aber ich weiß auch nicht, ob das jetzt optimal ist für alle,

Jochen

also ich hab's für ein Projekt, hab ich das auch gemacht,

Jochen

weil einfach ich das mal machen wollte.

Jochen

Ob das jetzt nötig wäre, weiß ich nicht.

Florian

Ja, und es wird schon anstrengend,

Florian

also gerade, wenn man dann externe Komponenten drin hat.

Florian

Ja, ja.

Florian

Irgendwie eine GUI-Applikation schreibt oder so,

Florian

dann wird's schon schwierig irgendwann.

Dominik

Ja, genau, also welche Enden muss man danach testen, ne?

Dominik

Also ich finde ja da tatsächlich auch vielleicht jetzt direkt

Dominik

an dem Zeitpunkt TDD ganz interessant,

Dominik

also dass man mit den Tests anfängt, die zu schreiben.

Dominik

Das ist ja auch immer ganz einfach,

Dominik

weil man muss dann schon relativ genau wissen, was man machen will.

Dominik

Und wenn man das nicht weiß, dann baut man halt Tests,

Dominik

die man hinterher wieder wegschmeißen kann,

Dominik

was dann die doppelt- und dreifache Arbeit macht.

Dominik

Aber wenn man halt irgendwie schon ein gutes Konzept hat,

Dominik

dann erst Tests dafür zu schreiben, wie das aussehen sollte,

Dominik

und dann die Implementierung.

Dominik

Das führt halt dazu, dass die dann auch tatsächlich funktioniert, ja?

Dominik

Wenn man sich so Gedanken dazu gemacht hat,

Dominik

wo so die Haken und Stellen sind, die ineinandergreifen sollen.

Dominik

Ja.

Dominik

Macht ihr das auch mal manchmal?

Florian

Ich mache das gerne bei Bugs, wenn ich halt irgendeinen Bug-Report kriege,

Florian

dass ich erst mal einen Test dafür schreibe.

Florian

Zumindest so ab dem Punkt, wo ich das einmal manuell reproduziert habe.

Florian

Weil wenn ich den Bug fixe, werde ich das eh schon ein paar Mal reproduzieren müssen.

Florian

Und dann mache ich mir halt effektiv das Leben leichter.

Dominik

Ja, genau. Also ich würde auch sagen, fix ist immer Test, ja.

Florian

Genau. So bei einer Library kann ich es mir auch noch vorstellen.

Florian

Und wenn es dann eher Richtung Applikation geht,

Florian

finde ich, wird es schon schwieriger.

Florian

Aber jetzt wieder bei einer GUI-Applikation,

Florian

da muss ich das Feature irgendwie erst mal implementieren

Florian

und erst mal sehen, wie das aussieht aus User-Sicht, aus Code-Sicht auch,

Florian

ja irgendwie sinnvoll Tests dafür schreiben kann,

Florian

finde ich.

Jochen

Klingt sehr vernünftig, würde ich

Jochen

ganz genau so sehen. Also ich mache auch

Jochen

TDD manchmal, aber

Jochen

gerade eben auch so bei Web-Applikationen

Jochen

entwickle ich

Jochen

oft, also oft ist es ja so, man fängt mit irgendwas

Jochen

an oder mir geht das halt so und dann

Jochen

denkt man sich irgendwann, ah nee, das ist einfach keine gute Idee

Jochen

und ich mache das auch oft

Jochen

in Notebooks am Anfang.

Jochen

Einfach nur, um zu sehen, ob irgendwas geht

Jochen

oder elegant geht und wenn es dann nicht geht, dann sage ich so

Jochen

okay, pff, ne, dann mache ich doch

Jochen

lieber was anderes und

Jochen

wenn man da zuerst die Tests schreibt,

Jochen

dann schmeißt man die Tests ja mit weg.

Jochen

Ich habe dann mal, es gab

Jochen

auf Twitter irgendwie einen Thread, wo dann

Jochen

weiß ich nicht, Harry Percival,

Jochen

der auch dieses

Jochen

Obey the Testing Go, der

Jochen

ein Testbuch geschrieben hat für Python,

Jochen

meinte, dass Leute doch bitte mal

Jochen

TDD verwenden sollen und sich mal ein Brief reißen

Jochen

wollen, dann werde ich so, ich mache das mal so.

Jochen

Ich weiß nicht, ich habe so das Gefühl, wenn ich

Jochen

zuerst Tests schreibe, dann ist das eine totale Verschwendung, weil

Jochen

wenn ich schmeiße, dann oft Sachen wieder weg

Jochen

und warum sollte ich da Tests für Sachen schreiben,

Jochen

nicht wieder? Nee, nee, das ist ein Spike, das ist auch

Jochen

TDD, das ist schon okay.

Jochen

Na gut, ja, aber

Jochen

oft muss man erstmal sehen, ob irgendwas so

Jochen

funktioniert, wie man denkt und dann...

Dominik

Wenn man zum Beispiel die Modelle jetzt noch nicht hat von so einem Problem

Dominik

oder die einfach definieren muss, also manchmal muss man ja

Dominik

irgendwie Fixes schreiben dann erstmal, um zu gucken,

Dominik

was denn überhaupt an Datenmodellen, wie die

Dominik

aussehen sollen und so. Oft lasse ich die Modelle weg

Jochen

und schreibe gar keine Modelle, sondern

Jochen

ich schreibe erstmal so, um

Jochen

zu sehen, ob das in der UI funktioniert.

Dominik

Das wäre dann Integration Test?

Jochen

Nee, ich schreibe da gar keine...

Jochen

Wie gesagt, an der Stelle kann man noch nicht so gut Text schreiben.

Jochen

Also wenn ich mit Tests anfangen würde, würde ich ja

Jochen

mit den Tests vielleicht für das Modell anfangen oder so,

Jochen

aber wenn ich kein Modell habe, ist es halt ein bisschen...

Jochen

Ja, okay.

Florian

Ich will noch kurz nochmal beim Testing Goat

Florian

anknüpfen. Da hat

Florian

jemand letztens ganz einen lustigen Thread

Florian

aufgemacht, wo er fand, ja, er hat mal

Florian

ChatGPT gefragt, wo das PyTest-Logo

Florian

herkommt

Florian

und ChatGPT meinte dann, ja, ich hätte

Florian

das designt.

Florian

Ist Quatsch.

Florian

Ist völliger.

Florian

Ist Quatsch. Das Logo

Florian

gibt es nämlich schon irgendwie seit 2014

Florian

und ich bin ja erst ein Jahr später zu PyTest

Florian

dazugekommen.

Dominik

Also, ja, GPT lügt bei Python

Dominik

regelmäßig. Ich denke zum Beispiel auch, dass irgendwelche

Dominik

anderen Menschen den Python-Podcast machen würden, die ich noch nicht

Dominik

gehört habe. Aber hey.

Florian

Ja, ich habe da tatsächlich

Florian

mal rumgegraben in den Mailing-List-

Florian

Archiven und rausgefunden,

Florian

warum das so eine Pornflöte ist.

Florian

Ach, okay. Das ist was.

Florian

Ich soll nämlich tatsächlich an diesem Testing Goat

Florian

als Maskottchen auf diesem Buch

Florian

anknüpfen, weil

Florian

Pornflöten eben genutzt wurden

Florian

wohl, um

Florian

Ziegen zu herden.

Florian

Wie sagt man denn noch in Deutsch?

Florian

Zu hüten.

Florian

Zu hüten, ja, ja.

Florian

Hm. Ja.

Florian

Ja, ich fand das mit dem ChatGPT

Florian

dann ganz witzig. Ich habe danach noch mal so ein bisschen

Florian

nachgehakt und finde so, nö, das war nicht ich.

Florian

Und dann meint es, ja, nee,

Florian

es tut mir leid, es war Armin Ronacher.

Florian

Ach so.

Florian

Und da fand ich,

Florian

da fand ich halt auch, äh, nö.

Florian

Und da meinte er irgendwas von einem Daniel

Florian

Urstöger, auch bekannt als

Florian

Blue-Logo, habe ich gesucht, nichts gefunden

Florian

zu der Person und fand immer noch,

Florian

nee, kann nicht sein. Und dann fand

Florian

er immer noch, ja, tut mir wirklich leid und so.

Florian

Es war von Daniel Haller

Florian

gemacht, was halt auch nicht stimmt.

Dominik

Mir, ich habe

Dominik

gerade auch noch mal gefragt, und mir sagt

Dominik

es, dass es nicht genau weiß, weil es von einem

Dominik

Community-Wettbewerb stammen würde.

Dominik

Ja,

Florian

dann hast du wahrscheinlich dieses GPT-4-Modell,

Florian

ein nächstes Mal mit dem GPT

Florian

das 3.5, okay, interessant.

Dominik

Ja, also, ja, das ist halt, weil

Dominik

er sich irgendwie manchmal aus der Fantasie teilt.

Dominik

Ja, gut.

Dominik

Sicheres Auftreten bei vollkommener

Dominik

Ahnungstätigkeit, Jochen. Was fällt dir

Dominik

dazu ein?

Jochen

Dass mir auf jeden Fall die Panfurte besser gefällt,

Jochen

als ein Schäferhund als Logo für Pytas.

Dominik

Ja, die Panfurte ist super.

Dominik

Ja, was

Dominik

haben wir denn, was haben wir denn so an Dingen,

Jochen

die man da, über die man mal, ja, das wird

Jochen

mich auch mal interessieren, genau, du machst viele

Jochen

Pytas-Schulungen, geht das

Jochen

überhaupt, also ich habe irgendwie so ein bisschen, ich mache

Jochen

auch manchmal Schulungen, auch so Python-Einführungen,

Jochen

oder halt auch mal zu speziellen Themen,

Jochen

und ich habe immer so das Gefühl,

Jochen

ich weiß nicht so genau, ob ich, ob das,

Jochen

wie ich da, wie man da am besten

Jochen

Wert

Jochen

irgendwie schafft für die Leute, die darin teilnehmen,

Jochen

weil ich habe manchmal so das Gefühl, die sind

Jochen

dann halt dann zwei Tage oder drei Tage da,

Jochen

und dann

Jochen

machen sie das dann aber doch wieder so, wie sie das kennen,

Jochen

irgendwie, wenn sie wieder da weg sind, und

Jochen

gerade bei so Test-Driven Development

Jochen

ist es halt, habe ich das Gefühl,

Jochen

oder überhaupt beim Testen, so ein Ding,

Jochen

wo sich das erst so über die Zeit

Jochen

irgendwie einstellt,

Jochen

wo man das schlecht irgendwie so einmal

Jochen

in, so musst du das halt machen,

Jochen

und dann, sondern es ist mehr so ein Ding, so ein, so ein,

Dominik

wegschmeißen, nochmal machen, wegschmeißen, nochmal machen,

Jochen

wegschmeißen, nochmal machen, ja, oder man muss sich halt da so ein bisschen dran gewöhnen,

Jochen

und das muss halt über eine längere Zeit irgendwie

Jochen

passieren, und ich habe da noch nicht so einen Dreh gefunden,

Jochen

wie man das am besten vermitteln kann.

Jochen

Ja, ich sage,

Florian

ich sage das den Leuten schon auch so,

Florian

es ist auch irgendwie viel Erfahrung

Florian

dahinter, die kann ich euch nicht abnehmen,

Florian

aber ich kann euch halt erstmal die Werkzeuge

Florian

in die Hand geben, und euch

Florian

einfach mal zeigen, was kann man an sich

Florian

vielleicht eher ein bisschen abstrakter mit

Florian

PyTest überhaupt machen, was sind so die Möglichkeiten,

Florian

wie man die dann

Florian

anwendet auf die konkrete Fälle,

Florian

die die Leute da haben, steht dann teilweise schon

Florian

nochmal ein bisschen auf einem anderen Blatt,

Florian

aber ich finde es schon ganz nützlich,

Florian

dass die Leute halt sehen, was gibt es denn überhaupt.

Florian

Ja.

Florian

Da habe ich vielleicht noch eine kurze

Florian

Geschichte auch, wie das mit

Florian

diesen Trainings angefangen hat.

Florian

Das war nämlich auch ganz

Florian

witzig, das war, als ich PyTest

Florian

erst ein paar Monate gebraucht habe, auch noch

Florian

irgendwie im 2015,

Florian

und zwar zu Europython

Florian

da in Bilbao,

Florian

also Spanien,

Florian

da wurde ich von Holger

Florian

Krekel, also nicht ich, aber Holger

Florian

Krekel, also so der Vater

Florian

von PyTest, der hat

Florian

halt auf der Mailingliste gefragt, ob

Florian

jemand dieses Training übernehmen kann an der

Florian

Europython, weil er war irgendwie

Florian

verhindert kurzfristig

Florian

und es hat sich dann niemand gemeldet und ich fand

Florian

halt so, ja, hm, das ist

Florian

irgendwie Material da, Spanien klingt

Florian

auch irgendwie toll, ich war noch nie auf

Florian

irgendwie einer Python-Konferenz.

Florian

Ja, machen wir.

Florian

Dann im gleichen Jahr noch auch

Florian

das erste Firmentraining dann von ihm

Florian

übernommen, weil er eh langsam aufgehört hat

Florian

mit PyTest und zu anderen Projekten

Florian

übergegangen ist

Florian

und seit da dann basierend auf

Florian

seinen Materialien das halt immer weiterentwickelt,

Florian

das klingt aber gut.

Florian

Das klingt gut. Ja, also da sind auch

Dominik

viele interessante Sachen und ich würde auch die

Dominik

einzelnen auch nochmal vielleicht kurz anschneiden, dass man

Dominik

so ein bisschen drüber erklärt, für die Menschen, die

Dominik

das noch nicht so kennen.

Dominik

Wollen wir uns dann eine Struktur geben, wie wir

Dominik

anfangen, weil sie nochmal reden, wie man vielleicht

Dominik

Pictures am besten macht oder was das überhaupt ist

Dominik

oder ob man die braucht oder wie

Dominik

man die baut oder

Dominik

und dann irgendwann vielleicht über diese

Dominik

ganzen Plugins oder so

Dominik

ein paar

Dominik

extra Sachen geht. Es gibt ja wunderschöne Sachen,

Dominik

die ich auch am Anfang nicht kannte.

Dominik

Das letzte, wo ich erst mich

Dominik

so ein bisschen gesträubt hatte, war irgendwie Hypothesis.

Dominik

Das habe ich dann durch deine Veranstaltung

Dominik

lieber Florian nochmal dann

Dominik

eingebaut und war überrascht, dass ich, also was

Dominik

heißt überrascht, aber ich habe noch so ein paar

Dominik

Bugs angefressen und so, oh,

Dominik

die habe ich jetzt noch nicht gesehen und ja,

Dominik

da kommt man so ein bisschen

Dominik

auch an die Grenzen dessen, was

Dominik

Python so kann und

Dominik

ja, ich weiß nicht, wo würdest du denn anfangen

Dominik

bei PyTest?

Florian

Ich würde glaube ich jetzt tatsächlich

Florian

nicht generell

Florian

bei PyTest, aber ich würde nochmal kurz gerne bei

Florian

Coverage einhaken, weil

Florian

das Thema schon gehabt haben und

Florian

vielleicht nicht alle wissen, was das eigentlich ist.

Florian

Da freue ich mich jeweils

Florian

auch so rum bei den Firmenkursen und

Florian

oft so viele Leute

Florian

fanden, ja, nee, das machen sie eigentlich nicht,

Florian

dass sie irgendwie Coverage messen.

Florian

Da geht's

Florian

darum, dass man sich

Florian

ganz einfach anschaut, welche

Florian

Zeilen von meinem Code wurden von

Florian

meinen Tests ausgeführt.

Florian

Was einem dann einen Eindruck zumindest

Florian

geben kann, was ist getestet

Florian

oder was wird zumindest ausgeführt

Florian

von den Tests, muss nicht zwingend

Florian

dann heißen, dass die Tests auch gut sind oder

Florian

wirklich was testen, aber es wird zumindest mal

Dominik

ausgeführt. Ja, das Blöde ist halt dann,

Dominik

wenn wir 100% Coverage, also der ganze

Dominik

Code ist durchgelaufen, aber ist trotzdem irgendwas kaputt.

Dominik

Genau. Kann einem halt

Dominik

auch passieren, ja.

Florian

Auch schwierig, da Prozent

Florian

Coverage gerade in einem Team sich

Florian

irgendwie als Ziel zu setzen, weil dann

Florian

wird es bestimmt Leute geben, die dann einfach

Florian

diese Zahl hochtreiben, ohne wirklich noch

Florian

gute Tests zu schreiben. Ja, ja, genau, weil

Dominik

ja, das würde ich auch sagen, wenn man es halt nur macht, um irgendwie

Dominik

irgendeinen Ast nochmal zu

Dominik

durchzuwandern, ohne

Dominik

dass es halt irgendwas bringt, ist halt blöd.

Dominik

Aber gibt es da sowas, wo ihr sagen würdet,

Dominik

so aus euren Eigenprojekten, so Pi mal

Dominik

Daumen, so eine Coverage ist okay?

Dominik

Hm, nee, ich würde,

Jochen

also ich weiß nicht, also meistens, wenn ich nicht

Jochen

drauf achte, lande ich irgendwo so bei

Jochen

irgendwie ein bisschen über 80% oder sowas.

Jochen

Ja. Aber...

Florian

70 war jetzt auch so meine erste Reaktion

Dominik

gewesen. Also ich würde sagen, wenn man schon

Dominik

zwei Tests schreibt oder so, die so ein bisschen das machen, was man

Dominik

testen, was man macht, dann sind die ja schon mal über 60,

Dominik

70 meistens drüber.

Jochen

Das weiß ich nicht, aber... Ja, je nachdem, wie groß das

Jochen

Projekt ist natürlich. Ja, ja.

Jochen

Also klar, am Anfang hast du einfach viel mehr

Jochen

Gewinn, also so ein paar Tests, die

Jochen

halt bei der Web-Applikation jetzt die Views

Jochen

einfach nur durchgehen und gucken, ob ein Okay zurückkommt,

Jochen

irgendwie in den Standardfällen, da hast du halt

Jochen

sehr wenig Tests geschrieben und viel Gewinn,

Jochen

quasi, weil wenn das kaputt geht...

Jochen

Und das wird dann halt immer weniger irgendwann

Jochen

und irgendwann ist man natürlich am Punkt erreicht, wo es halt

Jochen

eigentlich keinen Sinn mehr macht und man aufhören kann,

Jochen

aber wann der erreicht ist,

Jochen

keine Ahnung, schwer zu sagen.

Jochen

Also, ja.

Jochen

Ja. Ja, am Schluss muss

Jochen

man sich danach einfach mal so

Florian

die Daten dahinter anschauen und

Florian

mal schauen, was habe ich denn noch nicht getestet?

Florian

Ja, da... Da kann's

Florian

eben sein, es wurde einfach vergessen, das ist

Florian

irgendwie eine Fehler-Condition, die

Florian

vielleicht ganz gut ist, die zu testen.

Florian

Oder es kann halt sein, es ist eben

Florian

ein Code, der nicht einfach testbar ist und da

Florian

muss man sich überlegen, ist es davon wert?

Dominik

Es gibt halt so zwei, ich würde sagen,

Dominik

Dinge, die es ein bisschen schwierig machen. Und zwar, klar,

Dominik

also, man kann jetzt natürlich sehr viel einfacher

Dominik

Tests schreiben, wenn man ganz klar weiß,

Dominik

wie jetzt von einer kleinen Funktion, von irgendeiner

Dominik

Code irgendwie der Contract ist halt. Ja, also,

Dominik

wenn man weiß, was reingehen, was rausgehen muss,

Dominik

was halt auch bedeutet, dass man dazu

Dominik

tendiert, die relativ statisch zum Beispiel zu

Dominik

typisieren oder zumindest die Type-Annotations dann

Dominik

nochmal abzufangen oder irgendwie sowas.

Jochen

Naja, gut, das macht ja jetzt wenig Sinn, würde ich sagen, wenn du die

Jochen

Type-Annotations dann nochmal testest, das ist irgendwie...

Dominik

Ja, nein, aber du brauchst halt, dass das, was rein...

Dominik

reinkommt, dann auch dem entspricht vielleicht, ne?

Dominik

Oder dass man halt das eng zogert.

Dominik

Das bedeutet aber halt, dass man auch die Dynamik verliert

Dominik

oder die Flexibilität. Auch jetzt

Dominik

irgendwie, wenn man jetzt API schreibt und dann irgendwie

Dominik

die Daten validieren möchte, klar, kann man jetzt ganz

Dominik

streng sein und jedes Mal dann, wenn es nicht passt,

Dominik

einfach zurückgeben, okay, danke,

Dominik

du darfst nicht oder so.

Jochen

Ich glaube, ich glaube, ich glaube, das läuft jetzt

Jochen

quasi darauf hinaus, wie sollte so eine Test...

Jochen

Es gibt ja diese

Jochen

Testpyramide, wie sollte die aussehen?

Jochen

Quasi, ja.

Jochen

Weil sozusagen, also,

Jochen

ja, dass man halt viele

Jochen

Unit-Tests hat, irgendwie dann

Jochen

weniger irgendwie Tests, die

Jochen

halt irgendwie größere Sachen testen und dann halt

Jochen

nur ganz wenige irgendwie

Jochen

so End-to-End-Tests oder so.

Dominik

Man kann natürlich jetzt sicher auch mit sowas wie

Dominik

Playwright oder sowas eine komplette Frontend-

Dominik

Integrationsstrecke bauen, die jedes Mal dann testet,

Dominik

ob die Farbe bei dem Button sich geändert

Dominik

hat und ob weiße Zentimeter links oder

Dominik

rechts sind, aber wenn halt irgendeine Änderung von irgendeinem

Dominik

Designer kommt, dann dann die ganze Pipeline sieht jetzt mal auseinanderfliegen,

Dominik

ist wahrscheinlich eher zu viel.

Dominik

Genau. So, aber

Dominik

also ich glaube, man muss

Dominik

halt irgendwie so sich überlegen, was der Anwendungsfall,

Dominik

ob der sinnvoll ist halt auch, ne? Also ob es halt

Dominik

einen Sinn hat, dass man

Dominik

eine breite Anwendungsfall hat oder ob man das so enger

Dominik

scopen möchte. Und

Dominik

das würdet ihr wahrscheinlich am besten wissen, wenn

Dominik

ihr Anwendungen baut, an welchen Stellen die nicht

Dominik

auseinanderfliegen sollte. Also wenn ihr irgendwas macht, was

Dominik

wichtig ist, irgendwie wo Leben dran

Dominik

hängt oder was teuer ist oder sowas, dann sollte man da

Dominik

vielleicht ein bisschen mehr Hirnschmalz reinstecken,

Dominik

das so ein bisschen sauberer

Dominik

zu programmieren. Und

Dominik

ich habe immer das Gefühl, also Tests haben mir auch

Dominik

sehr geholfen, so die Architektur, mit der ich irgendwie

Dominik

überhaupt Programme schreibe, so ein bisschen zu überdenken,

Dominik

weil man halt merkt, dass man halt

Dominik

so große Module oder sowas oder Dinge,

Dominik

die viel machen, dass die schwierig

Dominik

halt werden. Also A, zu testen, aber was vielleicht auch

Dominik

eine doofe Idee ist, wenn in einer Methode

Dominik

oder in einer Funktion nur super viele Sachen

Dominik

gleichzeitig passieren und solche Dinge.

Dominik

Und ja,

Dominik

und da kommen wir halt auch wieder

Dominik

zu Coverage, ne? Wenn man halt so viel Zeugs hat,

Dominik

was passiert, auf einmal passiert,

Dominik

so ein bisschen sich so von diesem ein Ding für

Dominik

eine Sache Prinzip verabschiedet,

Dominik

dann wird das halt auch relativ schwierig

Dominik

zu testen dann, ja? Oder

Dominik

überhaupt dann so hinzukommen, dass die Sachen so passieren

Dominik

oder dass man die Bugs dann findet oder

Dominik

Ja, aber

Dominik

ich fürchte, man kann nicht einfach

Jochen

sagen, man muss das jetzt so machen und dann

Jochen

ist es halt, weil das sind so widerstreitende

Jochen

Dinge und so Trade-offs.

Jochen

Also ich würde ja auch

Jochen

genau, das ist halt, also das ist auch etwas, was

Jochen

beim Testen, was ich gut finde,

Jochen

dass man halt irgendwie so ein bisschen in die Richtung

Jochen

gedrängt wird, sich darüber Gedanken zu machen, wie man

Jochen

Sachen halt so hinschreibt, dass man sie

Jochen

gut testen kann und irgendwann hat man das dann

Jochen

halt auch so ein bisschen verinnerlicht, dass man, weiß man schon,

Jochen

wie man am besten Dinge so hinschreibt,

Jochen

dass hinterher die Tests sehr, sehr, sehr

Jochen

einfach hinzuschreiben sind und wenn das nicht

Jochen

geht, dann ist das halt auch einfach nichts, was man

Jochen

halt so schreiben sollte wahrscheinlich.

Jochen

Auf der anderen Seite, also

Jochen

ist es halt auch so, ist es halt,

Jochen

wäre es halt schön oder elegant

Jochen

von der Architektur her, wenn man

Jochen

jetzt halt eher

Jochen

schmale und tiefe Funktionen hat.

Jochen

Ja, also

Jochen

sozusagen, aber die sind halt

Jochen

schwer zu testen, auch unter Umständen, also

Jochen

es ist nicht unbedingt, also du kannst natürlich auch

Jochen

viele Funktionen,

Jochen

also,

Jochen

dass es etwas super zu testen ist, muss jetzt nicht unbedingt

Jochen

bedeuten, dass es halt auch total

Jochen

elegant ist, zum Beispiel

Jochen

zu verwenden. Also

Jochen

es kann sein, dass zum Beispiel, nehmen wir mal ein Beispiel

Jochen

für eine sehr schlechte API,

Jochen

die ganze Java-File

Jochen

irgendwie buffert, reader, irgendwas

Jochen

sonst was, API, also ich könnte mir

Jochen

vorstellen, dass es relativ einfach zu testen ist,

Jochen

aber es ist halt ein Albtraum, das zu benutzen.

Jochen

Und die, nehmen wir an,

Jochen

ja, Unix-File-API oder halt auch irgendwie,

Jochen

keine Ahnung, Requests-API in Python,

Jochen

die ist halt schön, weil die ist

Jochen

halt schmal und tief, aber

Jochen

ich könnte mir vorstellen, dass Request zu testen eventuell

Jochen

ziemlicher Schmerz ist.

Jochen

Es hängt halt davon

Jochen

ab, was sein

Jochen

Anwendungsfall ist, ob das jetzt, also

Jochen

wenn du sagst jetzt irgendwie, das ist eine interne Funktion

Jochen

und da ist es schön,

Jochen

wenn man die einfach testen kann, dann

Jochen

macht es halt Sinn, das vielleicht so zu machen, aber wenn

Jochen

das jetzt was ist, was nach außen geht,

Jochen

wo User dann halt den Schmerz

Jochen

haben, dass du es einfach zu testen hast,

Jochen

dann muss man sagen, naja, nee,

Jochen

dann muss es halt für User einfach zu verwenden sein und wenn das

Jochen

halt bedeutet, dass es schmerzhaft ist, das zu

Jochen

testen, dann ist das halt so, weil

Jochen

wichtiger ist an der Stelle die User-Experience.

Jochen

Also es kommt halt drauf an, denke ich.

Florian

Ja, um auch vielleicht

Florian

nochmal bei dieser Testing-Pyramid einzuhängen,

Florian

ich finde da

Florian

immer so, ich finde das

Florian

ein bisschen zu kurz gedacht. Es kommt halt immer

Florian

sehr darauf an, was man testet

Florian

und man soll sich halt zu den

Florian

Vor- und Nachteilen von diesen

Florian

Größen, sage ich mal, von Tests

Florian

bewusst sein, aber ich finde zunächst,

Florian

man kann immer sagen,

Florian

dass die eine Art ist besser wie die andere Art.

Florian

Ja.

Florian

Wenn ich jetzt ein Command-Line-Tool teste,

Florian

bietet es sich vielleicht

Florian

an, da eher End-to-End-Tests zu schreiben,

Florian

weil ich dann wirklich auch den Output und so

Florian

testen kann

Florian

und eher sparsam,

Florian

so wie für einzelne Funktionen,

Florian

die Tests zu schreiben.

Florian

Oder auch, ich

Florian

bin viel auch jetzt bei Firmen

Florian

für die Kurse, die eigentlich gar

Florian

keinen Python-Code mit PyTest testen.

Florian

Das fand ich auch ganz spannend.

Jochen

Ja, das ist auch total interessant.

Florian

Sondern die beispielsweise Waschmaschinen

Florian

mit PyTest testen.

Florian

Also da halt eine Waschmaschine

Florian

haben, wo dann ein Firmware drauf läuft

Florian

und

Florian

die wollen sie halt testen.

Florian

Und wollen halt dazu

Florian

PyTest nutzen, weil es eben

Florian

zusammen mit Python ein relativ einfaches

Florian

und flexibles Werkzeug darstellt.

Dominik

Gucken, ob noch alles geht.

Dominik

Wenn man die richtigen

Dominik

Knöpfe drückt und das richtige Programm läuft.

Jochen

Ja, und die Tests sind halt einfach zu schreiben.

Jochen

Ja, das ist eine gute Idee.

Florian

Oder bei einem Kunden von mir,

Florian

um vielleicht

Florian

dann gleich die Überleitung zu den Fixtures zu machen

Florian

an der Stelle, die nutzen

Florian

eine PyTest-Fixture, um

Florian

eine Klimakammer anzusteuern.

Florian

Wir haben so eine Klimakammer

Florian

mit Elektronik drin

Florian

und sagen dann halt über eine

Florian

PyTest-Fixture, heiz mir das

Florian

jetzt auf auf 30 Grad und dann

Florian

lasse ich da meine System-Tests

Florian

für dieses Gerät laufen.

Florian

Wo auch wieder halt

Florian

alles andere als Python-Code getestet wird.

Florian

Ja, spannend, ne?

Dominik

Wenn man halt wirklich das mit in die Realität überträgt

Dominik

und quasi auch seine Hardware damit

Dominik

steuert, um die Testumgebung

Dominik

außerhalb des Rechners

Dominik

aufzubauen oder halt aufzuheizen.

Dominik

Bestimmen die Parameter, machen die das,

Dominik

was sie sollen.

Dominik

Das ist, ja.

Florian

Und jetzt habe ich das vergessen, was ich eigentlich sagen wollte.

Jochen

Ja, Fixtures, Überleitung zu Fixtures.

Florian

Das auch, aber vorher noch.

Florian

Was eigentlich mein Punkt war,

Florian

da hat man ja dann gar keine

Florian

Wahl, welche Größen von Tests

Florian

man schreiben will. Also da schreibt man fast

Florian

gezwungenermaßen dann eben System-Tests

Florian

oder so End-to-End-Tests

Florian

und kann ja nicht mehr wirklich

Florian

einzelne Funktionen dieses Geräts

Florian

also jetzt im Sinne eines Unitests

Florian

testen.

Jochen

Mhm. Ja, im Grunde ist das ja

Jochen

auch schon so, wenn man Pi-Tests

Jochen

zum Schreiben von End-to-End-Tests, was man ja auch machen kann,

Jochen

verwendet, wie zum Beispiel mit

Jochen

Pi-Test Playwright oder so, dann da ist ja

Jochen

auch eigentlich jeder Test im Grunde

Jochen

weniger. Man muss halt den Browser aufmachen

Jochen

und dann da überhin und dann...

Jochen

Ja.

Jochen

Ja.

Florian

Ja, von da finde ich so dieses Testing-Pyramid,

Florian

ich meine, die Idee ist ja auch steinalt,

Florian

muss man dazu sagen.

Florian

Bin ich mit Vorsicht zu genießen.

Florian

Dann aber,

Dominik

vielleicht tatsächlich dazu, zu Figures

Dominik

und was Figures sind und wie man die baut oder

Dominik

macht ihr das mit Factories

Dominik

oder macht ihr das ohne Factories

Dominik

oder sind Factories doof oder

Dominik

gibt es da so verschiedene Sachen und

Dominik

was sind überhaupt Figures und

Dominik

ja, also vielleicht so fertige

Dominik

Dinge, die

Dominik

so tun, als wären sie etwas, was das

Dominik

Programm normalerweise kann. Das war jetzt ein bisschen

Dominik

abstrakt. Ich weiß nicht, gibt es da ein einfaches Beispiel?

Dominik

Also wenn

Dominik

wir mit einem normalen Web-Client zum Beispiel

Dominik

arbeiten würden, dann würde halt eine Figur werden, der User und

Dominik

einen Client und dann guckt man, wie das

Dominik

interagiert oder

Dominik

wie baut man das?

Dominik

Ja, am Schluss ist eine Fixture

Florian

im Prinzip einfach eine Funktion, die

Florian

als PyTest-Fixture

Florian

markiert ist oder

Florian

dekoriert ist

Florian

und diese Fixture kann

Florian

entweder irgendwelche Setup-

Florian

Schritte vornehmen für einen Test

Florian

und oder

Florian

irgendwelche Objekte für den Test bereitstellen.

Florian

Das heißt,

Florian

das kann jetzt sein, wenn ich

Florian

irgendwo eine Config-Klasse habe,

Florian

vielleicht in meinem Code,

Florian

dann habe ich vielleicht in meinen Tests eben

Florian

eine Config-Fixture,

Florian

was mir eine sinnvoll

Florian

konfigurierte Instanz

Florian

gibt von dieser Config-Klasse.

Florian

Oder in den Trainings

Florian

habe ich das Beispiel von so einem

Florian

R-Pan-Calculator, den ich testen will,

Florian

der nimmt dann auch eine Config als Argument

Florian

und sowas und damit ich

Florian

einfach nur die Instanzierung

Florian

von diesem R-Pan-Calculator,

Florian

also einfach ein Taschenrechner im Prinzip,

Florian

in Python geschrieben,

Florian

damit ich das nicht copy-pasten muss in jedem

Florian

Test, mache ich mir eben so eine Fixture-Funktion,

Florian

wo ich das alles aufsetze,

Florian

zurückgebe

Florian

und Tests können dann diese Fixture

Florian

eben nutzen. Mit dem Ziel

Florian

eben so diese Setup-Schritte

Florian

schön zu isolieren aus

Dominik

den Testfunktionen. Also man baut sich quasi das Objekt,

Dominik

das die API bereitstellt, einmal irgendwie

Dominik

mit den Parametern nach, wie man sie in echt auch gerne

Dominik

hätte, um die dann in dem Test benutzen

Dominik

zu können, zu gucken, ob die Ergebnisse, die man erwartet,

Dominik

dem entsprechen, was man möchte.

Dominik

Genau.

Florian

Ja, schwierig, das jetzt so

Florian

in ein paar Sätze zu fassen.

Dominik

Ja, ich finde das auch sehr abstrakt halt. Also wenn man das nicht gut sieht,

Dominik

dann wird das relativ klar.

Jochen

Die Spezialität bei PyTest-Fixers ist halt, dass die so

Jochen

diese magische

Jochen

Dependency-Injection gibt, sodass man halt

Jochen

einfach nur den Namen der Fixer

Jochen

in die Parameter

Jochen

vom Test schreibt und dann

Jochen

das automatisch ausgeführt wird.

Dominik

Genau, dafür schreibt man die Funktion ja quasi in den Conv-Test einfach rein.

Dominik

Ja, nö, musst du nicht.

Dominik

Ja, aber auch das ist schon, ja genau, aber auch gute Frage,

Dominik

ist das eine gute Idee?

Dominik

Ja, das ist eine gute Idee und so.

Dominik

Hängt davon ab.

Dominik

Aber es ist halt, also

Jochen

ich weiß auch nicht, ob man das heute nochmal machen würde,

Jochen

wenn man das nochmal designt, weil das ist schon sehr magisch.

Jochen

Und ich meine,

Jochen

ansonsten hat man ja, wenn man jetzt eine Funktion einfach

Jochen

aufrufen würde oder so, haben ja auch Support in der IDE,

Jochen

dass man draufklicken kann und landet dann da.

Jochen

Also bei PyCharm geht das zum Beispiel, dass man halt

Jochen

auf einfach eine

Jochen

Fixture in PyTest klickt und dann halt

Jochen

im richtigen Code landet.

Jochen

Aber das ist halt natürlich irgendwie nur

Jochen

dadurch, dass da jemand die Arbeit investiert

Jochen

hat.

Jochen

Irgendwie das

Jochen

parsen zu können und so. Also

Jochen

das wird wahrscheinlich nicht überall funktionieren.

Dominik

Es gibt auch eine Extension für andere Editoren.

Dominik

Ja.

Florian

Es ist schon eigenartig, ja.

Florian

Also ich sag so, dass

Florian

inzwischen habe ich es glaube ich raus, wie ich das den Leuten

Florian

erkläre, dass das passt.

Florian

Aber gerade am Anfang mit den Trainings

Florian

war das so der Punkt, wo ich sagen musste,

Florian

ja, ich werde auch jetzt erstmal verwirren

Florian

und irgendwann werde ich es verstehen.

Florian

Aber nicht gerade vom ersten Satz.

Dominik

Ja, ich fand das auch sehr, sehr schwierig, also vor allen Dingen

Dominik

diesen Unterschied zwischen Modulscope,

Dominik

Class-based Scope und Function-based Scope

Dominik

Fixtures und sowas. Und erstmal

Dominik

zu verstehen, dass halt eine Fixture irgendwie eigentlich ein

Dominik

Generator ist, der irgendwie halt dieses Setup und Teardown

Dominik

vorher und nachher macht und eigentlich nicht

Dominik

Returns, sondern eher was Yielded und dann

Dominik

was da so passiert, das war schwer zu verstehen. Also auch

Dominik

diese, dass die Fixtures alle immer neu

Dominik

gebaut werden, dann für jeden Test

Dominik

atomar und so, das war alles so ein bisschen

Dominik

ja, das hat ein bisschen gebraucht,

Dominik

würde ich sagen.

Florian

Gut, das sind jetzt ja alles Dinge mit diesem Caching

Florian

Scope und Yield und Teardown

Florian

und so, das kommt ja dann erstmal obendrauf

Florian

auf das Grundkonzept.

Florian

Also um Fixtures an sich erstmal

Florian

zu verstehen, kann man das, glaube ich, das meiste

Dominik

davon weglassen. Ja, ich glaube, meistens fällt man halt irgendwie

Dominik

direkt rüber und die machen halt dann irgendwelche Dinge,

Dominik

die man nicht erwartet und da kann man sich also schon

Dominik

ein bisschen mit in den Fuß schießen. Also ich würde

Dominik

auch empfehlen, also nicht am Anfang zu viel

Dominik

komplexe Tests darzuschreiben, nur vielleicht erstmal

Dominik

ein klein oder ein, zwei kleine

Dominik

und halt einfache Objekte einzugeben,

Dominik

wo man halt guckt, wie die

Dominik

zusammenhängen zum Beispiel oder was die tun.

Dominik

Also was ich halt

Dominik

hinterher wirklich schwierig finde, ist dann Objekte

Dominik

zu erzeugen oder viele Objekte oder halt dann

Dominik

man kann, was halt auch sehr schön ist,

Dominik

was Florian auch gut gezeigt hat, ist irgendwie

Dominik

Parametrisierung mit beispielsweise

Dominik

Data Classes oder sowas, dass man

Dominik

halt tatsächlich eine Plethora

Dominik

hundert verschiedene Dinge

Dominik

erstellt, automatisiert erzeugt an

Dominik

Tests, die die verschiedenen Edge Cases

Dominik

seiner Fälle dann halt auch beinhalten

Dominik

und man halt dann die Logik testen kann,

Dominik

ob sie da halt dann auch reißt, ohne

Dominik

jetzt direkt auf Hypotheses zu gehen,

Dominik

also mit

Dominik

zufälligen Figures, wenn ich das richtig verstehe, ja?

Dominik

Oder Zufallswerten für

Dominik

Dinge in den Figures.

Florian

Ja, vielleicht noch kurz zur Parametrisierung.

Florian

Wenn ich mir jetzt PyTest

Florian

anschauen würde und mal so die erste Testfunktion

Florian

geschrieben habe, wäre das

Florian

sicherlich so eines der ersten Dinge,

Florian

das ich anschauen würde, ist auch eines

Florian

der ersten Dinge dann in meinem Training,

Florian

weil

Florian

das, finde ich, es halt echt einfach macht,

Florian

ziemlich viel abzudecken.

Florian

Wenn man jetzt irgendeine Funktion testet

Florian

um halt eben nicht einen Input und einen

Florian

Output nur zu testen,

Florian

jetzt mal bei irgendeiner

Florian

langweiligen Utility-Funktion,

Florian

ich habe bei mir zum Beispiel so ein

Florian

Format Seconds, wo ich einfach

Florian

Sekunden übergebe und das dann schön

Florian

formatiere in halt Stunden, Minuten, Sekunden

Florian

beispielsweise.

Dominik

Oder hast du auch eine Seite übrigens,

Dominik

kurzer Exkurs, F-String irgendwie

Dominik

Docs, kann das sein?

Florian

F-String.help, genau.

Jochen

Oh ja, die habe ich auch schon oft

Jochen

angeguckt.

Jochen

Eine Webseite von mir,

Jochen

habe ich mal irgendwo

Florian

an der PyCon Germany, ich wollte

Florian

schon seit Jahren machen und dann kamen da

Florian

die Lightning Talks an der PyCon Germany

Florian

und abends vor den Lightning Talks

Florian

habe ich die noch kurz gemacht,

Florian

um sie dann eben da vorstellen zu können.

Florian

Ja, aber die ist echt super, weil sowas hat echt

Dominik

gefehlt, wenn ich zwischendurch da reingucke, das ist echt gut.

Dominik

Habe ich gerne.

Florian

Ja, Parameterization

Florian

macht es einem eben einfach,

Florian

um dann aus einer Testfunktion,

Florian

die nur einen Wert testet,

Florian

den so zu erweitern,

Florian

um zum Beispiel 10 oder 20

Florian

Werte zu testen,

Florian

ohne 10 oder 20 separate Funktionen

Florian

dafür schreiben zu müssen.

Florian

Und das ist sowas, das vermisse

Florian

ich dann sehr schnell in anderen Testframes,

Florian

Merks. Meistens geht das schon irgendwie,

Florian

aber halt mit einer aufwendigeren Syntax

Florian

als in Python oder als mit PyTest.

Florian

Ja, genau.

Jochen

Also PyTest Parameterize ist halt

Jochen

irgendwie dann der Dekorator, den man da

Jochen

verwendet. Den benutze ich auch ständig.

Jochen

Aber es gibt auch noch eine andere Möglichkeit.

Jochen

Man kann auch irgendwie Fixtures,

Jochen

die können irgendwie mehrere

Jochen

Dinge zurückgeben und dann werden auch

Jochen

quasi

Jochen

sozusagen wie unterschiedliche Parameter,

Jochen

also wird der Test auch mehrfach ausgeführt mit den

Dominik

unterschiedlichen Parameter. Also du meinst, wenn du mehrfach hintereinander yieldest,

Dominik

weil das beim ersten Aufbruch, beim zweiten Aufbruch

Dominik

und beim dritten Aufbruch passiert?

Jochen

Ich weiß es gar nicht mehr genau.

Florian

Nee, du kannst im

Florian

Fixture Decorator kannst du dann nochmal eine

Florian

Liste von Params angeben.

Florian

Genau. Und dann wird jeder

Florian

Test, der die Fixture nutzt, wird halt mehrmals

Florian

ausgeführt. Ja, genau.

Florian

Mit der Idee, wenn du irgendwie mehrere

Florian

Backends hast oder mehrere Implementationen,

Florian

die sich aber eigentlich gleich verhalten

Florian

sollen, dass dann halt eine ganze

Florian

Batterie von Tests über beide beispielsweise

Florian

Eislaufen lassen kannst.

Jochen

Ja. Genau, mir war das nur

Jochen

in Erinnerung geblieben, als das auch eine Art, wie man

Jochen

Parametrisierung machen könnte, aber

Jochen

tatsächlich sehe ich eigentlich auch immer eher

Jochen

nur PyTest, Parameterize und den anderen Weg

Dominik

eigentlich selten. Genau, du kannst halt beide Sachen gehen,

Dominik

entweder direkt an den Testrandschreiben oder halt an die Fixture.

Florian

Genau, aber jetzt sicherlich ein bisschen

Florian

exotischer.

Florian

Ja, das ist halt ganz nützlich,

Dominik

gerade für das Teardown. Also die Frage ist halt,

Dominik

nutzt ihr irgendwie sowas wie Factories oder

Dominik

sowas? Also, dass man dann

Dominik

Objekte zusammenbaut, ja, man könnte

Dominik

ja eine Factory schreiben, um einen User

Dominik

zu erzeugen, was da alles rein muss, der dann

Dominik

zum Beispiel Defaults enthält. Da habe ich einen

Dominik

schönen Blog-Eintrag zugesehen, wie

Dominik

man das ordentlich machen

Dominik

soll, irgendwie. Ja, weil es gab

Dominik

zwischendurch mal so eine Bibliothek, die

Dominik

hieß Factory Boy, die habe ich dann irgendwann

Dominik

wieder rausgeschmissen, die dann solche Sachen machte,

Dominik

aber nicht so wie das,

Dominik

wie ich das schön fand. Also

Dominik

mittlerweile glaube ich, man nimmt halt irgendwie

Dominik

dann einzelne Dinge von Faker vielleicht,

Dominik

um sich Zufallssachen,

Dominik

auch erstellen zu lassen und

Jochen

Ja, denke ich, ist aber ein anderes Problem, also

Dominik

ja. Und dann baut halt dann

Dominik

diese Funktion halt dann zufällig Objekte

Dominik

zusammen und dann könnte man zum Beispiel sagen, parametrisiere

Dominik

das mal für, keine Ahnung, 10 oder 20

Dominik

zufällige Nutzer

Dominik

aus so einer

Dominik

Factory heraus und benutze die halt einfach mal.

Dominik

Was die Tests natürlich nicht ganz

Dominik

so reproduzierbar macht

Dominik

vielleicht, aber vielleicht dann halt auch doch.

Dominik

Je nachdem, wie man das halt festgelegt hat.

Dominik

Wäre halt dann interessant,

Dominik

wie oft man das laufen lässt,

Dominik

um zu gucken,

Dominik

das Ergebnis immer gleich,

Dominik

ob man einen Spezialfall, wo es nicht passt,

Dominik

hat man einen Fehler in der Factory gebaut,

Dominik

nimmt man vielleicht sogar die Factory

Dominik

später auch für den eigentlichen Programmcode,

Dominik

um dann wirklich was Neues zu erzeugen?

Dominik

Ja,

Florian

ich weiß jetzt nicht, wie sinnvoll

Florian

ich das halte, also

Florian

so gezielt sowas zu nutzen, wäre

Florian

jetzt auch Hypothesis, was wir sicherlich

Florian

noch darauf sprechen werden.

Dominik

Also Jochen, uns wird auch kurz nicht stören.

Dominik

Ja, ich habe sowas

Jochen

so was, Factory-Boys,

Jochen

sowas früher mal verwendet, aber ich mache das eigentlich

Jochen

inzwischen nicht mehr.

Jochen

Ich habe...

Jochen

Mach doch kurz fertig.

Jochen

Ja, also einfach deswegen, weil ich

Jochen

finde, das macht einfach zu viel Magie

Jochen

mit irgendwelchen, da hast du dann auch wieder so Dekoratoren

Jochen

für die...

Jochen

Also, und ich weiß

Jochen

gar nicht, ob diese Magie so viel bringt.

Jochen

Also, das ist immer so, das Verhältnis von wie viel Magie

Jochen

ist da und wie schwer ist das zu verstehen im Verhältnis zu wie viel

Jochen

Nutzen bringt, das ist für mich jetzt inzwischen

Jochen

nicht mehr so...

Jochen

Also diese Relation ist nicht so, dass ich sagen würde,

Jochen

das ist total sinnvoll, das zu verwenden, sondern ich denke mir

Jochen

eher so, inzwischen ist

Jochen

halt auch irgendwie, wenn man

Jochen

halt ordentliche Funktionen, die solche Daten generieren,

Jochen

schreibt, halt auch mit entsprechend

Jochen

benannten, weiß ich nicht, Keyword-Only-

Jochen

Argumenten oder so, dann ist das eigentlich mal

Jochen

die bessere Variante. Und ich

Jochen

habe auch oft jetzt in Projekten inzwischen

Jochen

sowas wie so ein DevData-

Jochen

Modul oder so, wo ich mir halt Daten

Jochen

für bestimmte... Und das brauche

Jochen

ich halt nicht nur für Tests, sondern halt auch einfach, um

Jochen

Applikationen gezielt in bestimmte Zustände

Jochen

versetzen zu können, um halt zum Beispiel,

Jochen

irgendwas zeigen zu können oder so, dass ich

Jochen

halt mir für diese Fälle, die ich dann habe,

Jochen

halt immer irgendwie sowas schreibe, wo

Jochen

ich dann einfach nur eine Funktion aufrufe,

Jochen

wo ich sagen kann, okay, versetz meinen Applikationszustand

Jochen

mal in dieses... Also meine

Jochen

Applikation mal in diesen Zustand, wenn ich irgendwas

Jochen

demonstrieren kann. Und das kann ich dann halt auch für

Jochen

Tests verwenden. Das heißt, sozusagen

Jochen

dieses Generieren von diesen Daten oder so ist schon

Jochen

in meiner Applikation drin und das benutze ich dann

Jochen

in den Tests halt auch. Und ich benutze

Jochen

eigentlich sowas wie Factory Boy und sowas gar nicht mehr.

Dominik

Ich habe gerade den Bockartikel gefunden,

Dominik

den ich meinte. Zu dem von Luke Plant?

Dominik

Luke Plant, genau. Ja, okay. Ja, der ist gut.

Dominik

Ja, und so ähnlich habe ich das auch dann, glaube ich,

Dominik

versucht umzubauen.

Dominik

Genau, weil der macht dann quasi ja auch so ein...

Dominik

Das ist halt quasi das, was ich meinte, ne?

Dominik

Default Keyword Arguments mit vielleicht einem Faker dazu

Dominik

und dann hast du halt eine parametrisierbare

Jochen

Art und Weise. Ja, und Faker ist halt noch mal

Jochen

eine andere Geschichte, wo es einfach darum geht,

Jochen

dass man halt, wenn man jetzt,

Jochen

dass man sich nicht als Faker selber ausdenken muss,

Jochen

dass man plausible Daten hat. Okay, ja.

Jochen

Du kannst Faker auch den Seed mitgeben

Jochen

zum Beispiel, ja? Und dann kannst du halt...

Jochen

Dann ist es immer gleich. Genau.

Jochen

Ja, genau.

Jochen

Ja, vielleicht

Florian

wäre das jetzt gerade der Punkt, um noch was

Florian

zur Hypothesis zu sagen.

Florian

Ja, klingt gut.

Florian

Das ist ein Projekt, was erstmal nicht viel

Florian

mit PyTest zu tun hat, aber sich

Florian

halt doch gut im PyTest integriert

Florian

zu sogenannten

Florian

Property-Based Testing.

Florian

Man kann sich das so ein bisschen

Florian

wie ein Fuzzer vorstellen,

Florian

was also Zufallsdaten generiert.

Florian

Ja, man kann mir zum Beispiel sagen,

Dominik

gib mir irgendeinen Integer, ne? Und dann

Dominik

nimmt der alle, die er finden kann.

Florian

Ja, jetzt nicht alle. Ich glaube, standardmäßig

Florian

führt es dann halt 200 Mal oder so

Florian

die Testfunktion aus. Also

Florian

nicht so viel. Gut.

Florian

Und alle Integer wird eh schwierig.

Florian

Also,

Dominik

das kann auch sehr langsam werden.

Dominik

Wenn man das so findet.

Florian

Aber halt mit der Idee, dass man sich

Florian

eben so Strategien zusammenbauen kann,

Florian

also auch sagen kann, ich will

Florian

jetzt gerne irgendwie Dictionaries

Florian

und die Keys sollen Strings

Florian

sein, aber nur mit ASCII-Zeichen

Florian

und die Values sollen

Florian

dann irgendwie Listen sein

Florian

und die Elemente darin sollen dann irgendwie

Florian

das und das sein.

Florian

Oder auch passend

Florian

beispielsweise auch auf ein Django-Model

Florian

und sowas.

Florian

Und dann kann man sich mit diesen Strategien

Florian

halt ein bisschen gezielter Daten

Florian

generieren

Florian

und dann halt eben auf seine Funktionen loslassen.

Florian

Und gerade bei so

Florian

bestimmten Arten von Code,

Florian

gerade wenn es darum geht, irgendwo Dinge

Florian

aus einem String zu parsen oder so,

Florian

ist das relativ einfach,

Florian

sich da so eine Strategie

Florian

auszudenken oder auch einfach zu sagen,

Florian

schmeiß da bitte mal Zufallsdaten hin.

Florian

Einfach zufällige Strings.

Florian

Und dann, wenn es geht,

Florian

noch irgendwelche Invariants

Florian

zu testen. Also Dinge, die immer wahr sein

Florian

sollen, egal was der Input ist.

Florian

Also wenn man irgendwas

Florian

Compressed und Decompressed hat,

Florian

dann kann man das einmal durchlassen, einmal sagen

Florian

Compressed, einmal Decompressed

Florian

und es soll das Gleiche wieder rauskommen.

Florian

Oder Decrypt, Encrypt,

Florian

Encode, Decode, alles so diese

Florian

Paare, die sich halt umkehren

Florian

sollten.

Dominik

Ja, dann merkt man ja relativ schnell, ob man irgendwo

Dominik

eine Case hat, wo, ups.

Florian

Genau, dann lässt man das mal laufen und dann

Florian

ist die Chance relativ groß,

Florian

dass eine Hypothesis halt mit irgendeinem

Florian

komischen Corner Case kommt, den man echt

Florian

nicht bedacht hatte.

Dominik

Ja, das ist mir auch schon öfters auf die Füße gefallen.

Dominik

Hat mir dann die Augen geöffnet,

Dominik

warum zwischendurch irgendwas Komisches passierte, was man

Dominik

irgendwie nicht erwartet hätte, ja. Muss man nochmal drüber

Dominik

nachdenken, was mache ich denn da überhaupt eigentlich?

Dominik

Irgendwann was kaputt ist,

Dominik

das ist schon immer so ein bisschen, hm.

Jochen

Ja, ich glaube, das muss ich mir mal, ich habe das

Jochen

schon mal ausprobiert, aber ich habe es noch nicht wirklich

Jochen

häufig irgendwie in den

Jochen

Dingen so verwendet, die ich so mache.

Jochen

Ja. Also ich hatte das Gefühl

Dominik

tatsächlich, dass es so ein bisschen langsam ist, aber

Dominik

dann kann man das ja auch, glaube ich, aufzeichnen,

Dominik

glaube ich. Aber, ähm.

Florian

Ja, die Idee davon ist

Florian

eigentlich, dass es eben nicht langsam ist.

Florian

Das ist halt

Florian

als Teil seinen normalen Test

Dominik

laufen lassen kann. Aber also für mich war das

Dominik

immer so ein Punkt, wo ich dann angefangen

Dominik

habe, tatsächlich die Sachen einzuschränken, ja. Also wenn ich

Dominik

halt gemerkt habe, okay, Herr Passus, jetzt langsam halt eine

Dominik

eine Unit dann laufen lassen mit maximal

Dominik

möglichen Parametern.

Dominik

Und dann war es halt natürlich langsam, hat der Test

Dominik

dann vielleicht auch mal fast eine Minute gedauert oder so.

Dominik

Aber dann habe ich halt tatsächlich X-Cases gefunden, die ich

Dominik

rausschmeißen konnte und konnte dann mir sinnvoll

Dominik

überlegen, okay, der Eingabewert ist jetzt

Dominik

vielleicht doch nur maximal, weiß nicht, siebenstellig oder

Dominik

so, ja. Und nicht noch mehr.

Dominik

Und dann wurde dann der Test natürlich dann viel schneller.

Dominik

Und dann habe ich halt gesagt, ja, sorry, aber mehr

Dominik

ist jetzt hier einfach nicht erlaubt.

Dominik

Und das halt direkt mit abgefangen.

Dominik

Und so. Das war, glaube ich, ja,

Dominik

an der Stelle eine gute Strategie, um mal so ein bisschen

Dominik

so die Grenzen zu gucken, was überhaupt an

Dominik

I.O. da sinnvoll ist auch.

Dominik

Oder so eine Sanitization zu machen an zwei Stellen

Dominik

oder so, was gut ist.

Florian

Ja, und am Schluss muss halt auch der Code, der

Florian

dann irgendwas testet, genug schnell sein,

Florian

dass man den 200 Mal laufen lassen kann

Florian

und es dann halt trotzdem nur idealerweise

Florian

in Bruchteilen eine Sekunde geht.

Florian

Das ist nicht immer der Fall.

Florian

Ja.

Jochen

Ja, das ist auch so ein interessantes

Jochen

Thema, finde ich. Also ich mag

Jochen

das sehr gerne, wenn Tests halbwegs schnell

Jochen

durchlaufen. Ich finde das immer sehr frustrierend,

Jochen

wenn Projekte so, wenn die

Jochen

Tests so ewig brauchen, weil das halt auch

Jochen

macht das Entwickeln irgendwie echt langsam.

Dominik

Ja, also idealerweise halt ein, zwei Sekunden

Dominik

nebenbei in der Idee, dann kann man sie dann

Dominik

parallel laufen lassen und sieht direkt, wenn man irgendwas kaputt

Dominik

gemacht hat. Ja.

Dominik

Das ist auch gut. Ja, wäre

Florian

schön, aber ist dann halt bei größeren Projekten

Florian

schwierig, ja.

Florian

Irgendwann nicht mehr realistisch.

Dominik

Aber dafür gibt es ja Testmarker.

Dominik

Man könnte jetzt hingehen, könnte alle Tests,

Dominik

die nicht so schnell gehen, als langsam markieren

Dominik

oder sowas und die halt nicht immer parallel laufen

Dominik

lassen, sondern nur dann, wenn man es explizit möchte

Dominik

oder in der Pipeline oder so und nur

Dominik

die schnellen standardmäßig nebenbei

Dominik

von der IDE prüfen lassen.

Florian

Ja, kommt halt auch ein bisschen

Florian

darauf an, wie viele Tests man da hat.

Florian

Ja. Also wenn ich mir jetzt

Florian

PyTest selbst anschaue, wenn ich mir Cube Browser

Florian

anschaue, dann ist das irgendwas vierstellig

Florian

ist. Und

Florian

dann wird es zeitlich halt einfach knapp,

Florian

auch wenn die Tests selbst relativ schnell sind.

Florian

Das ist jetzt bei Cube Browser nicht der Fall.

Florian

Da sind es relativ viele End-to-End-Tests

Florian

und halt GUI-Applikationen und so.

Florian

Aber selbst wenn die Tests

Florian

schnell sind, wenn es dann halt ein paar Tausende

Florian

sind sogar in einem größeren Projekt,

Florian

dann ist das Endergebnis halt nicht mehr so schnell.

Florian

Ja.

Florian

Ja, irgendwann

Florian

kann man halt nichts mehr machen.

Jochen

Was man ja eventuell machen könnte,

Jochen

aber meistens, das hat man ja vielleicht auch nicht

Jochen

immer, was Tests dann letztlich,

Jochen

gut, ich meine, ich bin jetzt da eher

Jochen

im Web-Anwendungsumfeld unterwegs,

Jochen

was da die Tests langsam macht, ist halt immer, wenn man

Jochen

irgendwie Datenbank-Zugriffe macht oder so,

Jochen

dann ist halt das halt mal langsam.

Jochen

Jetzt könnte man natürlich,

Jochen

das weiß ich nicht, ich habe das ehrlich gesagt noch nie,

Jochen

ich habe es einmal selber gemacht, auch um es auszuprobieren.

Jochen

Was man da ja tun könnte, ist

Jochen

halt so Repository-Pattern oder so verwenden

Jochen

und dann halt quasi die Datenbank

Jochen

wegabstrahieren und dann für die Tests halt durch

Jochen

irgendwie eine Dummy-Datenbank ersetzen, die halt dann schnell ist

Jochen

und dann sind die nicht mehr langsam.

Jochen

Hast du schon mal gesehen, dass das jemand

Jochen

erfolgreich gemacht hat und dass es in einem größeren Projekt

Jochen

dann wirklich gut funktioniert hat?

Jochen

Ja, das könnte ja ein Weg sein.

Jochen

Ja, ich

Florian

bin jetzt nicht so

Florian

viel im Web-Umfeld unterwegs.

Florian

Ich habe ein Projekt, was ich maintaine,

Florian

Studentenportal.

Florian

So ein Portal für

Florian

Lernhilfen und

Florian

Zitate von Dozierenden

Florian

und sowas, halt von Studierenden für Studierende.

Florian

Und das

Florian

ist eine Django-Applikation und da hatten wir

Florian

das mal diskutiert

Florian

und sind dann zum Schluss gekommen, dass wir einfach

Florian

zu viele datenbankspezifische

Florian

Kleinigkeiten haben.

Florian

Also spätestens, wo du

Florian

halt irgendeine Volltext-Suche verwendest

Florian

und das halt dann so PostgreSQL

Florian

Fulltext-Search nutzt,

Florian

dann kannst du das nicht mal so auf die

Florian

Schnelle ersetzen.

Florian

Oder wenn du es kannst, läufst du

Florian

also in die Gefahr, dass die Tests dann überhaupt

Florian

nicht mehr das testen, was eigentlich in der Realität

Florian

läuft. Ja, klar.

Florian

Ja, das ist natürlich das Problem dabei.

Florian

Ja.

Florian

Ja, ich finde es auch schwierig.

Florian

Also so Datenbank-Sachen testen,

Dominik

muss man sich oft darauf verlassen, dass das irgendwie geht.

Dominik

Und dass das andere Menschen

Dominik

schon getestet haben.

Dominik

Und ja, das fällt dann halt auch tatsächlich

Dominik

oft runter, weil das so ein bisschen

Dominik

nervig sein kann.

Dominik

Also, ne, weil das halt so langsam

Dominik

wird dann im Entwickeln und wenn man das alles

Dominik

aufsetzen muss, dann muss ja auch die Datenbank laufen.

Dominik

Also ganz ehrlich, also alleine eine Datenbank laufen zu lassen

Dominik

auf einem Dev-Rechner ist manchmal schon eine Herausforderung.

Dominik

Je nachdem, was man alles draufhaben muss.

Dominik

Ja gut, man muss ja auch den Website

Dominik

angucken können auf dem Dev-System.

Dominik

Ja, aber wenn dann halt

Dominik

Menschen drei oder vier oder fünf verschiedene

Dominik

Projekte gleichzeitig machen müssen und dann

Dominik

haben die nur irgendwie einen Rechner mit 80 Gramm

Dominik

oder sowas, muss dann irgendwie da mal einen Docker draufhaben und dann müssen

Dominik

die Container aber irgendwie alle gleichzeitig anleihen, weil die schnell wechseln

Dominik

müssen, dann macht es dann bei fünf verschiedenen

Dominik

Datenbanken schon bumm. Dann musst du dann irgendwie gucken, dass du vielleicht

Dominik

eine hast, die dann irgendwie weg abstrahiert ist, wo dann

Dominik

aber auch die Klientel stimmen und dann musst du, wenn du eine abreißt,

Dominik

nicht alle abreißen, weil du den Container nicht einfach kaputt machen kannst.

Dominik

Und ja,

Dominik

dann rennen wir schnell schon wieder

Dominik

mit dem Kopf gegen eine Wand.

Dominik

Da wäre so eine Softwareentwicklung

Florian

mit 8 GB RAM

Florian

finde ich halt auch so ein bisschen kritisch.

Dominik

Ja, ist eine Katastrophe, ist das. Also Gott sei Dank muss ich sowas nicht tun.

Florian

Also Apple macht das ja,

Florian

dass sie ihre neuen MacBook Pros

Florian

haben im Standardmodell mit 8 GB

Florian

für tausend

Florian

noch was Euro. Ja, das ist eine Gemeinheit,

Florian

aber ja, so ist es.

Florian

Ja. Aber ja,

Florian

ich meine, ich mit Qt-Browser,

Florian

vielleicht soll ich da ja dann auch mal

Florian

nochmal

Florian

ein paar Worte dazu sagen.

Florian

Da muss ich halt ab und zu auch

Florian

Chromium kompilieren, also der Code

Florian

hinter Google Chrome.

Florian

Und das

Florian

braucht so mit einem Developer-Build,

Florian

also mit Debug-Symbolen und so

Florian

braucht das halt mal so irgendwie um die

Florian

30 GB RAM.

Jochen

Wow, allein das Kompilieren von dem,

Jochen

okay, das...

Florian

Wenn ich es halt parallel machen würde, nur mit so einem

Florian

Build-Job würde es mir wahrscheinlich auch weniger reichen.

Florian

Aber ja,

Florian

wir haben dann 32 GB

Florian

tatsächlich nicht mehr ausgereicht.

Florian

Ich bin jetzt

Florian

auf 48, was halt das Maximale

Florian

ist, was in den Laptop passt überhaupt.

Florian

Weil 16, glaube ich, fix

Florian

eingelötet sind.

Florian

Aber das fand ich

Florian

schon heftig. Also Chromium

Florian

ist ein riesiges Projekt.

Florian

Aber wenn es so

Florian

weitergeht, das wird dann nur noch komplexer,

Florian

wie es bei Software halt oft so ist,

Florian

habe ich echt irgendwann ein Problem.

Florian

Ja.

Dominik

Habt ihr schon mal Tests irgendwo auf

Dominik

anderen Rechnern laufen lassen, einfach nur? Also, das habe ich auch schon mal

Dominik

gehört, dass Leute das gar nicht bei sich mehr laufen lassen,

Dominik

sondern irgendwo nur in der Pipeline?

Dominik

Mache ich

Dominik

ganz oft, aus Feilheit.

Florian

Also, bei mir gehen die

Florian

Tests dann halt auch eine Weile und oft

Florian

lasse ich die dann lokal

Florian

halt gar nicht mehr laufen. Das ist eine gefährliche

Florian

Angewohnheit. Ja.

Florian

Ich pushe das halt mal,

Florian

wenn ich noch vernünftig bin in den Branch

Florian

und nicht gleich nach Main

Florian

und schaue dann halt mal, was da

Florian

zurückkommt von

Florian

GitHub-Actions.

Florian

Dadum.

Dominik

Dieser Test ist fehlgeschlagen.

Dominik

Oh, ja, okay. Meistens nicht.

Dominik

Manchmal gelingt es einem halt, das durchzukriegen,

Dominik

aber, ja.

Dominik

Ja, okay.

Dominik

Muss das aber halt, ja.

Dominik

Was auch super ist, wenn man dann gar keine Testumgebung hat,

Dominik

sondern es halt direkt durchgeht.

Dominik

Du brauchst halt auch keine Entwicklungsumgebung.

Jochen

Du machst halt alles bei GitHub. Ist das da Codespaces

Jochen

oder so? Und dann ist das alles

Jochen

nur noch in der Cloud.

Jochen

Wunderbar.

Dominik

Jemand anderes Problem.

Florian

Lass ich dann halt so die Tests für das, was ich

Florian

gerade daran arbeite, die lasse ich lokal laufen.

Florian

Aber so eine volle Testbatterie

Florian

soll woanders laufen.

Dominik

Ja, aber auch das ist vielleicht ein guter

Dominik

Punkt für Max.

Dominik

Also, um Tests zu markieren nach verschiedenen

Dominik

Themen oder sowas, dann kann man halt nur Tests laufen

Dominik

lassen für das einzelne Topic oder

Jochen

das Backend. Ja, aber ich meine, wenn du Entwickler hast,

Jochen

machst du das ja meistens, dass du einfach sozusagen

Jochen

entweder nur den einen Test, von dem du weißt,

Jochen

dass der halt betroffen ist, irgendwie laufen lässt

Jochen

oder halt eine Gruppe von Tests, die da

Jochen

außenrum sind. Ja, genau. Aber

Dominik

die Frage ist halt diese Gruppe, weil wenn du die thematisch

Dominik

gruppierst und die vielleicht nicht an demselben Ort

Dominik

liegen irgendwie, wenn man halt da, man kann ja die

Dominik

Tests, das ist auch eine Frage der Philosophie, ob man

Dominik

ein Testfahrzeichen schreibt oder an die

Dominik

Applikationen oder an die ganzen Apps, wo die zugehören

Dominik

oder so. Ja. Und wenn

Dominik

die dann halt so distributed sind und dann

Dominik

willst du aber trotzdem viele verschiedene davon zusammen

Dominik

laufen lassen, weil die mit der Funktionalität dann doch irgendwie

Dominik

zusammenhängen. Also, ja, also auch da eine Frage.

Dominik

Kann man sich über die Architektur

Dominik

Gedanken machen? Gibt es vielleicht doch Gründe, das dann so zu

Dominik

machen oder, ne?

Dominik

Und mit diesen Markern, die man da bei Python

Dominik

erst rübersetzen kann, dann kann man ja einfach, die gruppieren

Dominik

recht einfach. Finde ich gar nicht so

Dominik

schlecht für diese Fälle.

Dominik

Ja, mache

Florian

ich jetzt weniger. Ich habe einen Marker

Florian

einfach für alle GUI-Tests.

Florian

Sowas halt, weil

Florian

das halt wirklich projektübergreifend sind

Florian

Tests, die nutzen irgendwelche GUI-Dinge

Florian

und die testen einfach nur Python-Code.

Florian

Aber ansonsten,

Florian

ja,

Florian

ich kann mir jetzt vorstellen, so bei einem Enterprise-Projekt

Florian

können auch Kunden, die das so machen,

Florian

da dann wirklich so eine Use-Case

Florian

Nummer oder so noch dranhängen

Florian

und dann sagen, alle Tests irgendwie zu diesem

Florian

Use-Case laufen lassen.

Florian

Aber ansonsten, finde ich,

Florian

reicht eigentlich diese Unterteilung in Module.

Dominik

Ja, also je modularer man

Dominik

ist oder je modulitischer man so eine Anwendung baut,

Dominik

dann müsste man vielleicht tatsächlich diese einzelnen

Dominik

Funktionalitäten so ein bisschen

Dominik

so ein Multilead voneinander

Jochen

Ich weiß nicht, also bei mir reicht

Jochen

auch diese Trennung in Dateien

Jochen

eigentlich, ehrlich gesagt, aus.

Jochen

Ich habe dafür den Marker

Jochen

schon verwendet, aber nicht dafür.

Jochen

Ja, aber genau, das

Jochen

ist eine interessante Frage, was ich jetzt auch, also

Jochen

einfach alles Teste in einem

Jochen

Tests-Directory drin haben oder halt

Jochen

neben die Module

Jochen

im Code legen. Das sind ja auch zwei unterschiedliche Möglichkeiten.

Jochen

Ich habe beides auch schon gesehen und

Jochen

ich persönlich mag es lieber, irgendwie das

Jochen

alles in einem Tests-Verzeichnis zu haben.

Dominik

Ich mache tatsächlich beides.

Dominik

Also ich habe einen Tests-Verzeichnis, wo

Dominik

so die grundlegenden Sachen drin sind, wie

Dominik

Kernfunktionalität, die Clients für

Dominik

Authentication, die Nutzer

Dominik

und sowas. Und

Dominik

der

Dominik

Testswanderer und diese ganzen Sachen und

Dominik

die Haupt-Fictures oder auch

Dominik

witzig, manchmal auch

Dominik

meist einen anderen Fixtures schon. Das heißt,

Dominik

Fixtures für Modelle lege ich mit in das Hauptverzeichnis rein,

Dominik

aber die Tests selber, also

Dominik

die einzelnen Units für Routen zum Beispiel,

Dominik

die sind mit in dem API-Verzeichnis

Dominik

zum Beispiel oder in der

Dominik

App von Dango oder so.

Dominik

Da muss man

Dominik

die halt importieren, einfach

Dominik

in den Konftest, die man halt da nutzt und dann kann man

Dominik

aber direkt da die Tests schreiben, wo

Dominik

die Anwendung quasi liegt. Man muss nicht die ganze Zeit

Dominik

durch das ganze Directory so hin und her traversen.

Dominik

Okay.

Dominik

Und man kann halt auch modulär

Dominik

arbeiten und die Leute wissen halt direkt, dass die Tests

Dominik

da dazugehören und man vergisst dann nicht

Dominik

welche für welche Module. Man kann halt auch einmal direkt sehen,

Dominik

sind die Tests für die Module jetzt schon da drin oder welche

Dominik

Tests für die Module gibt es denn da? Manchmal

Dominik

finde ich sind Tests auch sehr nützlich sowas als

Dominik

wie Dokumentation für

Dominik

den Code. Wenn ich manchmal nicht mehr so

Dominik

genau weiß, was passiert denn da jetzt eigentlich oder

Dominik

was sollte da passieren, gucke ich mir den Test an und wenn der gut

Dominik

geschrieben ist, sagt der Test, testet ja die Logik,

Dominik

was da passieren sollte. Und dann lese ich den Test,

Dominik

ah, so war das. Und dann,

Dominik

das macht viel Sinn.

Florian

Das mache ich tatsächlich auch ganz oft.

Florian

Oft, wenn ich halt irgendwo einen Bug in einem

Florian

Python-Projekt finde, der sich nutzt, dann versuche

Florian

ich den halt mal kurz zu beheben.

Florian

Und dann schaue ich mir oft auch mal

Florian

irgendwie jetzt bei einem fremden

Florian

Open-Source-Projekt erstmal die Tests ein bisschen an,

Florian

um mehr ein Gefühl zu kriegen,

Florian

was da passiert.

Florian

Wenn es dann welche gibt.

Florian

Ja, gut.

Dominik

Ja, das ist tatsächlich auch eine der Sachen, die oft runterfällt.

Florian

Ich mache das tatsächlich aber auch so,

Florian

wie das die PyTest-Dokumentation, glaube ich,

Florian

auch empfiehlt, dass ich einfach ein Testverzeichnis

Florian

habe und dann da quasi so

Florian

eins zu eins das

Florian

Python-Package gespiegelt.

Florian

PyTest-Dokumentation

Dominik

ist auch noch so eine, ich fand

Dominik

PyTest-Dokumentation war eine der schwierigeren Dokumentationen,

Dominik

die ich lesen durfte.

Dominik

Im Laufe der,

Dominik

wenn er so Python kriegt.

Jochen

Ja gut, ja, es ist halt auch kompliziert.

Jochen

Ja, aber gerade.

Florian

Ich habe da so diesen

Florian

Curse of Knowledge halt.

Florian

Ich kenne das so unter diesem Begriff,

Florian

dass es halt echt schwierig ist, wenn man das alles schon

Florian

verinnerlicht hat. Ja, ich verstehe das.

Florian

Das nochmal so in den Augen eines Neulings

Florian

anzuschauen.

Dominik

Also, dass man wirklich einfach verstehen kann, was denn da passiert.

Dominik

Das ist so eine hohe Kunst, glaube ich.

Dominik

Und das war also bei PyTest,

Dominik

ich muss auch sagen, mittlerweile ist es einfacher,

Dominik

also die Doku zu lesen, aber

Dominik

manchmal ist es, hä, was wollen die denn jetzt und warum?

Dominik

Und dann waren auch so ganz viele Fragen offen.

Dominik

Die haben dann irgendwie ganz viel Knowledge halt auch tatsächlich

Dominik

vorausgesetzt, dass man sich

Dominik

halt irgendwo an irgendwelchen anderen Stellen so zusammenklauben

Dominik

musste und wo musste man dann selber

Dominik

finden und so und das war schon, war steil.

Dominik

Aber ja, also was

Dominik

noch vielleicht so eine coole Funktionalitäten

Dominik

von PyTest, ich glaube, es gibt noch jede Menge Plugins,

Dominik

die wir noch vielleicht erwähnen können.

Dominik

Ich würde eins gerne herausfinden, VCR,

Dominik

also irgendwie so Videorecording auch noch.

Dominik

Das ist auch sehr cool, das, ja.

Dominik

Was macht das denn?

Dominik

VCR stellt quasi,

Dominik

wenn du jetzt eine API nutzt und zum Beispiel ein Request,

Dominik

zeichnet das quasi die

Dominik

echten Antworten auf und

Dominik

macht halt quasi einen echten API-Call

Dominik

und schreibt das Ergebnis inklusive

Dominik

aller Header und allem Content und so weiter

Dominik

in Jamil-Files rein, automatisch

Dominik

und beim nächsten

Dominik

Call nimmt es einfach die und tut halt so,

Dominik

als wäre die echte API-Antwort quasi

Dominik

in der File drin und dann hast du quasi

Dominik

die echte API-Antwort gemockt, quasi genauso

Dominik

wie sie kommt und du kannst halt

Dominik

PyTest immer sagen, okay, zieh jetzt mal neu,

Dominik

also du bist gerade in einer Umgebung, wo du das ausprobieren kannst,

Dominik

aber du willst ja die APIs auch wegen Quotas und so weiter

Dominik

halt auch nicht ständig fragen zum Beispiel.

Dominik

Oder halt auch

Dominik

nur selten oder halt, wenn sich was aktualisiert

Dominik

und kannst aber so halt dann schon gucken,

Dominik

ob die API nach draußen halt auch funktioniert und

Dominik

halt nicht nur so tun, als hast du die API nachgebaut,

Dominik

sondern kannst ja tatsächlich direkt

Jochen

benutzen. Ja, ich weiß nicht, ich mach

Jochen

sowas ungern, also

Jochen

da gibt es ja auch immer diesen

Jochen

Spruch, ich weiß nicht, vielleicht

Jochen

don't mock what you don't own,

Jochen

also ich mock lieber meine eigenen Sachen als

Jochen

das externe Geschichten, weil ich

Dominik

weiß nicht. Ja, aber es ist ja eben vielleicht nicht gemockt.

Dominik

Just record it.

Jochen

Ja, aber das, ja gut, das ist ein bisschen

Jochen

Convenience, aber du mockst es im Grunde schon.

Jochen

Ja, ich weiß nicht, aber

Florian

Du willst ja nicht, dass

Florian

deine Tests wirklich auf die API

Florian

zugreifen im Normalfall.

Florian

Also gerade wenn du da irgendwie einen API-Key

Florian

brauchst, irgendwelche Credits hast oder

Florian

die API was ganz Schlimmes macht,

Florian

dann musst du die ja irgendwie mocken.

Jochen

Ja, aber ich würde sie an der Stelle

Jochen

mocken an der internen, sozusagen

Jochen

bevor ich das aufrufe.

Jochen

Die dann gar nicht aufrufen.

Jochen

Ach so meinst du. An der Stelle, wo ich halt noch weiß,

Jochen

was das ist, sodass ich halt auch weiß, wenn ich das

Jochen

ändere, dass ich dann auch den Mock

Jochen

ändern muss. Aber bei einem externen, wenn ich das einfach

Jochen

nur automatisch mogge, dann weiß ich ja gar nicht,

Jochen

wenn sich da jetzt irgendwas geändert hat, okay,

Jochen

muss ich meine Mocks anpassen irgendwie, das

Jochen

kriege ich ja nicht sozusagen direkt mit.

Jochen

Ja. Gut, am Schluss

Florian

ist dein Code

Florian

ja sowieso kaputt, wenn sich an der API

Florian

wirklich was ändert. Ja, das, ja.

Florian

Da, was ich

Florian

einen schönen Ansatz finde da,

Florian

ist, dass man,

Florian

um vielleicht auch nochmal bei den Plugins einzuhängen,

Florian

es ist sehr einfach

Florian

PyTest halt eben irgendwie zu erweitern

Florian

und unter anderem auch ein eigenes

Florian

Kommandozeilen-Argument zu PyTest

Florian

hinzuzufügen.

Florian

Und was man dann machen kann,

Florian

ist theoretisch zumindest, ich habe jetzt

Florian

nicht ein Projekt, wo ich das effektiv mache,

Florian

tatsächlich,

Florian

eine Kommandozeilen-Option,

Florian

Real API oder sowas hinzuzufügen

Florian

und dann halt zu sagen, wenn ich das mitgebe,

Florian

laufen einmal meine Tests gegen die

Florian

richtige API durch,

Florian

anstatt gegen meine

Florian

recordeten Antworten.

Jochen

Ja, das könnte man natürlich machen, ja.

Jochen

Dann je nach API halt sagen,

Florian

das können wir nach, auf einer CI irgendwie

Florian

wöchentlich oder monatlich oder sowas mal

Florian

ausführen. Ja, also ich finde

Dominik

es super spannend, also das macht halt echt

Dominik

coole Sachen möglich.

Dominik

Man kann ja auch seine eigene API quasi mit aufnehmen

Dominik

oder sowas, wenn man das möchte und dann hat man

Dominik

auch schnell so Mock-Fictures da, die man halt

Dominik

nicht selber bauen möchte, selbst wenn du

Dominik

sagst, okay, du möchtest gerne vorher das Mocken, aber

Dominik

ich finde das schon ziemlich gut.

Dominik

Ja gut, nee, kann ich auch gar nicht.

Dominik

Man kann das sogar abusen,

Dominik

wenn man sich viele

Dominik

Zeugs irgendwie abspeichern will von

Dominik

irgendwelchen Scrapern oder sowas, könnte man das tatsächlich

Dominik

einfach einsetzen, um sich

Dominik

die API-Calls einfach mal wegzuschapen

Dominik

und das relativ easy.

Dominik

Ja, ich

Dominik

weiß nicht, also genau,

Jochen

ich beurteile gerade, was ich

Jochen

an Plugins normalerweise verwende,

Jochen

weil X-Test verwende ich

Jochen

tatsächlich irgendwie, aber

Jochen

das muss man ja, wenn man irgendwie Tests parallel

Jochen

ausführen lassen möchte.

Jochen

Da kommt aber noch viel mehr

Jochen

Zeug mit dabei, ich will manchmal

Jochen

nicht so ganz sicher, ob ich das alles

Jochen

haben will, aber was ich

Jochen

auch oft benutze, also was ich total super finde,

Jochen

ist PyTestMock zum Beispiel, finde ich super.

Jochen

Ich bin mit Unitests, immer wenn ich

Jochen

Unitests-Geschichten irgendwo mache und dann

Jochen

türmen sich so die Patch-Dekoratoren

Jochen

oder ganz viele Context-Manager

Jochen

und dann ist PyTestMock echt total

Jochen

also sehr angenehm.

Jochen

Was macht das? Das übernimmt,

Jochen

das macht das halt automatisch.

Jochen

Du kriegst halt einen Mocker

Jochen

und schreibst als Fixture sozusagen

Jochen

in deinen Text-Test und dann

Jochen

rufst du halt Mocker.patch irgendwie

Jochen

einfach auf, musst aber da nicht

Jochen

einen Context-Manager drum rum machen oder

Jochen

irgendwie das Integriator verwenden und kannst das halt

Jochen

auch mehrfach aufrufen, ohne

Jochen

dass du da halt irgendwie dann eine Verschachtelung von

Jochen

Context-Managern hast und

Jochen

das wird halt hinterher auch wieder alles

Jochen

entmockt sozusagen,

Jochen

entgepatcht, wenn der Test vorbei ist und so.

Jochen

Also ich finde es immer so,

Dominik

ja, du hast recht, das ist für viele Sachen

Dominik

ganz nett, aber ich finde es auch irgendwie hässlich, ich weiß nicht mehr genau

Dominik

warum, was ist da so?

Dominik

Ja, diese API halt von

Florian

unitest.mock, die macht schon irgendwie

Florian

ganz viel Magic, also da bin ich

Florian

auch nicht so wirklich zufrieden damit irgendwie.

Florian

Und ja, das Plugin ist eigentlich nur ein relativ dünner

Florian

Layer darum, um das halt

Florian

zu einer PyTest-Fixture zu machen, zum einen

Florian

und zum anderen,

Florian

wenn dann was schief geht, man kann

Florian

diese Mock-Objekte ja dann

Florian

im Nachhinein fragen, wurdest du jetzt so

Florian

und so aufgerufen?

Florian

Und wenn was schief geht, nochmal

Florian

PyTest einzuhängen, dass man halt

Florian

diese, den schöneren

Florian

Output von PyTest kriegt, der dann auch

Florian

die Werte vergleicht und sowas.

Florian

Aber viel

Florian

mehr als das macht das Plugin eigentlich nicht.

Dominik

Apropos schöner Output, PyTest-Witch

Dominik

natürlich.

Dominik

Ah, okay, ja.

Jochen

Ja, das hier überhaupt, das hat man noch gar nicht

Jochen

so richtig, finde ich, ist eigentlich fast der Haupt,

Jochen

das Hauptfeature von PyTest

Jochen

für mich jedenfalls, dass halt die,

Jochen

dass man einfach so Assertion schreiben kann

Jochen

und das halt funktioniert und man halt trotzdem

Jochen

sehr schöne Ausgabe kriegt irgendwie,

Jochen

dann zeigt, wo ist genau was unterschiedlich

Jochen

und so. Das ist

Jochen

halt sehr, sehr angenehm.

Dominik

Nicht so komisch, dass du sagst, ich will den Camel-Case.

Florian

Das ist aber auch übrigens eine

Florian

ordentliche Portion Magie.

Jochen

Ja, ich fürchte auch irgendwie, ja.

Florian

Weil an sich dieses Assert-Keyword

Florian

von Python, das macht einfach nur

Florian

einen Assertion-Error, also ohne

Florian

jetzt, dass man irgendwie Zugriff hat

Florian

auf Infos, was da passiert ist.

Florian

PyTest macht

Florian

da eben sein Rewriting,

Florian

ja, durch den Dekorator.

Florian

Das ist den Abstract-Syntax-Tree,

Florian

was Python

Florian

aus so einem Modul generiert, intern,

Florian

bevor das wirklich dann zu Python-Byte-Code

Florian

wird. Das wird, passiert das

Jochen

beim Import der Test-Module irgendwie, ne?

Jochen

Da wird der Byte-Code dann

Jochen

gedruckt. Ja, ja.

Florian

Nicht der Byte-Code, sondern halt ein Level vorher,

Florian

der Abstract-Syntax-Tree,

Florian

da injectet dann PyTest noch seine

Florian

eigenen Calls,

Florian

um da quasi einmal festzuhalten,

Florian

was ist da eigentlich drin in dieser,

Florian

in dieser Assertion.

Florian

Ja.

Florian

Ja, PyTest macht

Florian

viele Dinge, wo ich sagen muss,

Florian

genau, ist sehr viel Magie,

Florian

aber irgendwie so unterm Strich halt auch sehr

Florian

angenehm. Ja. Also hat

Florian

sich irgendwo bewährt.

Dominik

Entspricht diesem Pythonic-ästhetischen

Dominik

Ansatz irgendwie, das in klarer

Dominik

Sprache hinzuschreiben, was das machen soll, und

Dominik

das Assert ist da für Tests, glaube ich,

Dominik

sieht einfach schick aus.

Jochen

Ja, aber wäre das jetzt nicht auch schick,

Jochen

wenn man, wenn ein Assert in einen anderen

Jochen

Stellen genauso funktionieren würde?

Jochen

Vielleicht denken ja Leute, wenn sie das

Jochen

in PyTest verwendet haben, ah, das funktioniert ja

Jochen

immer so, und machen das dann irgendwann anders, und dann

Jochen

verhält sich das plötzlich ganz anders, als wir gedacht haben.

Dominik

Ja, aber, also man kann ja zwar

Dominik

Asserts ausschalten, ne, wenn man das

Dominik

richtig aufruft, den Interpreter,

Dominik

aber normalerweise macht man das ja nicht, und normalerweise fährt Assert

Dominik

dann einfach mit einem Assertion-Error auf die

Dominik

Nase. Ja, ja.

Jochen

Aber in PyTest sieht das dann ja anders aus.

Dominik

Na ja, aber das ist eigentlich

Dominik

relativ klar, oder, dass halt, wenn ein Test

Dominik

fehlt, dass der Assertion-Error dann mit mehr

Dominik

Informationen auch zurückgegeben wird, also

Dominik

das macht der ja schon, also der im Prinzip

Dominik

ein fehlender Python-Test heißt, du hast ein Assertion-Error.

Dominik

Ne, ne, ne,

Jochen

das, ja, aber, also

Jochen

Python-Test macht dann halt eine Menge Dinge.

Dominik

Ja gut, aber das ist ja, dafür ist ja das Framework

Dominik

ja da, das glaube ich, glaube ich, dass das ist. Ja.

Florian

Da wollte Ronny Pfandschmid, auch

Florian

einer der Maintainer, wollte da auch mal

Florian

irgendeinen Pip schreiben, oder sowas, dass man

Florian

sich eben bei Python grad

Florian

schöner reinhängen kann in diese Assertions.

Florian

Ja, das wäre, also,

Florian

das wäre schon ganz nützlich,

Jochen

für irgendwie so eine Assertion-Lib, oder sowas,

Jochen

die man einfach importiert, und dann hat man schönere Assertions,

Jochen

oder so, das wäre doch cool, aber, ja,

Jochen

wahrscheinlich ist es nicht so einfach. Genau, aber ich glaube, da ist es leider

Jochen

nie was geworden.

Jochen

Was es

Florian

gibt für Notebooks, vielleicht noch ganz

Florian

interessant, ein Ding namens

Florian

IPyTest,

Florian

was eben PyTest in diese Notebooks

Florian

integriert, also man kann da einfach mit

Florian

Prozent-Prozent IPyTest,

Florian

kann man halt PyTest ausführen,

Florian

und hat dann auch Zugriff gleich auf die lokalen

Florian

Variablen aus dem Notebook und sowas,

Florian

und das, wenn man

Florian

das einmal einrichtet in einem Notebook,

Florian

dann kriegt man auch in diesem Notebook

Florian

global quasi

Florian

geschenkt die

Florian

Assertion-Infos, wenn eine Assertion fehlschlägt.

Florian

Ach, und das geht dann auch an anderen Stellen,

Florian

sozusagen, dann, ah ja.

Florian

Genau, das hängt sich dann halt da irgendwie ein.

Jochen

Ach, cool, das kann ich auch noch nicht.

Jochen

Ja.

Dominik

Und noch mehr Plugins

Dominik

hier benutzt?

Dominik

Wollte ich nochmal freescannen,

Dominik

wenn ich irgendwie so Zeit sagen will,

Dominik

also zu der und der Zeit, oder die Zeit muss ich jetzt um

Dominik

zwei Stunden verschieben, zwischen zwei Tests

Dominik

oder sowas, das ist ganz nett,

Dominik

mit Context-Manager oder so,

Dominik

das ist cool.

Florian

Ja, das habe ich schon genutzt, Responses.

Florian

Das ist Mocking

Florian

halt für Requests, man

Florian

ruft eigentlich, wie man Requests abruft,

Florian

ruft man halt erstmal Responses auf,

Florian

und das mockt einem das weg.

Dominik

Ich glaube, das gibt auch für HTTPX, wenn ich das richtig gesehen habe.

Dominik

Und da,

Florian

ich fände es eigentlich schön, wenn es

Florian

mehr so Mocking-Libraries

Florian

gibt, also sowas wie jetzt eben

Florian

freescannen, VCR, Responses

Florian

oder diesen HTTPX-Mock.

Florian

Ich bin eigentlich der Meinung,

Florian

jede Python-Library, die irgendwas macht

Florian

mit externen Systemen,

Florian

also auch sowas wie PySerial beispielsweise,

Florian

sollte halt

Florian

gerade auch irgendwie so Testsupport

Florian

oder so Mocks gleich mitliefern,

Florian

und dann auch schöne, maintained, getestete

Florian

Mocks.

Florian

Mocking ist immer noch sowas, das macht man irgendwie so

Florian

ad hoc in jeder Testsuite wieder neu

Florian

das Rad erfunden.

Florian

Ja, ist das nett.

Dominik

Stimmt, da ist relativ viel Zeit

Dominik

immer dann, bis man das richtig läuft.

Dominik

Das ist wahrscheinlich sogar der Hauptteil,

Dominik

den man braucht für Testschreiben.

Jochen

Nö, das würde ich jetzt auch nicht sagen.

Jochen

Aber es ist halt immer wieder

Jochen

das.

Jochen

Was ich noch gerne mache, ist

Jochen

Insta-Fail.

Dominik

Und dann sieht man halt direkt, wenn die Tests

Dominik

ein bisschen länger laufen und die Tests, die fehlen schon mal,

Dominik

kann man daran schon mal dann werkeln, weil man

Dominik

einfach nur, keine Ahnung, sich verschrieben hat, vertippt hat oder so.

Dominik

Hat man den schon mal dann drauf und das läuft dann

Dominik

trotzdem noch.

Dominik

Mhm. Ich nutze noch, da bin ich jetzt

Dominik

nicht so stolz drauf, aber ich nutze noch

Florian

PyTest-Rerun-Failures,

Florian

wo man Tests halt als flaky markieren

Florian

kann und wenn sie fehlschlagen, werden sie halt

Florian

nochmal ausgeführt.

Florian

Weil ich bei Qt-Browser halt

Florian

wirklich aus GUI-Applikationen mit so

Florian

vielen externen Komponenten

Florian

dieses Problem mit flaky

Florian

Tests fast nicht in den Griff kriege.

Florian

Ah ja. Okay.

Florian

Und dann bis zu irgendwie eine

Florian

Assertion-Failure in der libc,

Florian

also so die Library-C selbst,

Florian

implementiert, wo ich sagen muss, dass

Florian

ich mir jetzt so viele Labels darunter, da kann

Florian

ich jetzt echt nichts daran ändern.

Florian

Also, was will ich machen?

Florian

Ja.

Florian

Aber natürlich nur so jedes tausendste Mal.

Florian

Ja.

Dominik

Das ist ja ganz mies, wenn irgendwie so

Dominik

ein Test nur jedes hundertste oder so

Dominik

Mal-Fail schlägt, das ist ja ganz

Dominik

eklig. Irgendwie so

Dominik

das rauszufinden, bläh.

Dominik

Das ist immer...

Jochen

Ist das ein Plugin oder kann das Plug-Test, das weiß ich

Jochen

gar nicht, aber dass man die Reihenfolge

Jochen

irgendwie zufällig macht.

Jochen

Random?

Jochen

Ja, da gibt es ein paar.

Jochen

Randomly.

Jochen

Ja.

Florian

Ja, macht eigentlich Sinn, weil eben

Florian

Tests voneinander unabhängig sein sollten.

Florian

Und

Florian

andersrum gibt es PyTest-Order,

Florian

wo man sagen kann, Tests sollen halt voneinander

Florian

abhängig sein in einer bestimmten Reihenfolge.

Dominik

Wie heißt das? Kannst du nochmal

Florian

betonen, bitte? PyTest-Order.

Florian

Ah.

Florian

Da kommt oft die Frage dann eben von

Florian

Kunden von mir, die dann

Florian

irgendwie Elektronik mit PyTest testen.

Florian

Weil da natürlich,

Florian

wenn man jetzt eine Klimakammer

Florian

hat oder so, dann ist das halt

Florian

nun mal so, dass die Dinge voneinander abhängen.

Florian

Oder dass man vielleicht

Florian

alle Tests irgendwie bei 30 Grad

Florian

laufen sollen, dass man

Florian

die erstmal laufen lassen will, anstatt

Florian

jedes Mal auf minus 10 Grad runter zu kühlen

Florian

und wieder hoch auf 30. Oder wie auch immer.

Florian

Ja.

Florian

Schlecht Sinn.

Florian

Ja.

Florian

Ja, PyTest-BDD nutze ich noch.

Jochen

Ah, okay. Das ist interessant.

Jochen

Ja, da habe ich auch schon häufiger was gehört.

Jochen

Ja.

Dominik

Ich habe es auch mal versucht zu nutzen.

Dominik

Also, vielleicht nochmal kurz der Behavior-Driven

Dominik

Development-Test.

Dominik

Genau.

Dominik

Man kann so Logik, so Business-Logik schreiben,

Dominik

so für den PO oder so.

Dominik

Und der kann dann so Sätze

Dominik

formulieren in seiner eigenen Sprache

Dominik

und dann guckt PyTest-BDD, ob es geht

Dominik

oder nicht.

Dominik

Aber so tief reinzukriegen...

Florian

Das ist im Prinzip einfach nochmal eine

Florian

kleine Abstraktion, dass man sagen kann,

Florian

given I have

Florian

an author user,

Florian

when I do this and that,

Florian

then this and that should happen.

Florian

Also mit diesem given, when, then.

Florian

Das halt wirklich als Testsprache

Florian

hat und dann die Implementation

Florian

der Tests

Florian

eigentlich nochmal abgekapselt

Florian

hat von den Test-Cases.

Florian

Also quasi so diese User-Story

Florian

reingießen, ja.

Florian

Genau.

Dominik

Also ich hab's wieder rausgeschmissen, ich hab's ausprobiert,

Dominik

aber irgendwie... Wahrscheinlich lag's aber auch

Dominik

an einem Projekt halt, wo das halt nicht so wirklich

Dominik

dazu gepasst hat.

Jochen

Wofür verwendest du das?

Florian

Ich nutze halt ganz stark für die

Florian

End-to-End-Tests für Cube-Browser.

Florian

Jetzt müsste ich da vielleicht nochmal kurz einhaken,

Florian

was Cube-Browser denn überhaupt ist.

Florian

Jetzt hab ich's schon ein paar Mal erwähnt.

Florian

Das ist so mein Hauptprojekt

Florian

seit ziemlich genau

Florian

zehn Jahren. Ich glaub in

Florian

drei Tagen oder so sind's zehn Jahre.

Florian

Und zwar

Florian

ein Web-Browser, der

Florian

sehr stark auf Tastaturbedienung

Florian

ausgelegt ist, so inspiriert

Florian

von VI beziehungsweise WIM,

Florian

eben auf

Florian

Chromium aufsetzt und in Python

Florian

geschrieben ist. Und darüber

Florian

bin ich dann auch zu PyTest gekommen.

Florian

Und

Florian

das hat halt dann so

Florian

ein Interface

Florian

mit einer Command-Line quasi

Florian

eingebaut.

Florian

Und da hab ich dann halt auch viele End-to-End-Tests

Florian

wo ich halt einfach irgendwo ein Kommando

Florian

hinschicke zu einem laufenden Browser

Florian

und dann erstmal schaue

Florian

mit einem Web-Server, der direkt

Florian

im PyTest-Prozess läuft,

Florian

wurde dann das

Florian

die und die Seite aufgerufen oder ist

Florian

das und das passiert.

Florian

Und so diese End-to-End-Tests hab ich dann

Florian

halt eben mit diesem PyTest-BDD geschrieben,

Florian

dass ich sage, when I run

Florian

open und irgendwie

Florian

ein Pfad,

Florian

then this and that page should be loaded.

Florian

Hm.

Florian

Ja.

Florian

Ja, an der Stelle

Jochen

klingt das durchaus sinnvoll, weil wahrscheinlich

Jochen

hat man dann ganz viele davon und da will man ja

Jochen

wahrscheinlich dann sozusagen nicht immer

Jochen

das ganze Boilerplate

Jochen

hinschreiben.

Florian

Ja, ich weiß auch nicht, ob ich es

Florian

nochmal so machen würde, weil

Florian

es sind jetzt halt doch sehr viele so End-to-End-Tests

Florian

geworden und da

Florian

ein einziges Problem mit flaky Tests

Florian

und mit langsamen Tests.

Florian

Aber ich glaube, für so gewisse Dinge

Florian

lohnt sich das schon. Also ich fand es auch ganz

Florian

angenehm, wenn halt neue Leute

Florian

dazukommen, die noch nie was mit PyTest

Florian

gemacht haben, dass du denen sagen kannst,

Florian

guck, schau dir das mal an,

Florian

das ist eine schöne,

Florian

eine hohe Abstraktion, nochmal höher als

Florian

Python-Code und schau mal, ob du so einen Test

Florian

schreiben kannst.

Florian

Ja.

Jochen

An der Stelle ist es vielleicht auch noch ganz interessant, genau,

Jochen

das ist ja auch, selbst wenn man jetzt nicht BDD

Jochen

Tests sozusagen

Jochen

so hinschreibt, sondern

Jochen

normale Tests, dann empfiehlt es sich

Jochen

da ja auch vielleicht, sich im Grunde an

Jochen

dieses Pattern zu halten. Also

Jochen

genau, Given-When-Then ist halt die eine

Jochen

Formulierung, wie man das halt

Jochen

ausdrücken kann. Es gibt noch eine andere,

Jochen

die nennt sich irgendwie

Jochen

Arrange-Act-Assert,

Jochen

aber es ist im Grunde beides das Gleiche.

Jochen

Es ist halt immer irgendwie, man baut sich zuerst irgendwie

Jochen

einen

Jochen

State zusammen, der halt irgendwie ist

Jochen

und dann macht man

Jochen

irgendwas drauf und dann guckt man hinterher, ist das rausgekommen,

Jochen

was man sich irgendwie

Jochen

was man erwartet hat und wenn nicht, ist halt

Jochen

schlecht. Aber es macht halt

Jochen

ja Sinn,

Jochen

Tests immer so zu strukturieren, dass man

Jochen

halt auch, wenn man jetzt auf den Test guckt,

Jochen

sofort weiß, okay, ach, an der Stelle wird nur

Jochen

irgendwas zusammengebaut, an der Stelle wird jetzt der eigentliche

Jochen

Aufruf gemacht und hier assorten wir irgendwelche Dinge,

Jochen

wo wir dachten, das müsste jetzt

Jochen

da rauskommen, ja.

Jochen

Das BDD, das klingt auch so ein bisschen

Dominik

nach, als könnte man das mit Playwright machen.

Dominik

Ich weiß nicht, ob das dieses Pattern auch ist.

Jochen

Die Playwright-Tests,

Jochen

die ich bisher gemacht habe,

Jochen

ne, die waren halt einfach, da habe ich das alles immer von Hand hingeschrieben.

Jochen

Ja.

Jochen

Es ist halt, ja,

Dominik

das macht aber so ein bisschen BDD auch, oder? Also es gibt halt

Dominik

so einen Browser und sagt halt, okay, geh auf diese

Dominik

Seite und drück mal so einen Knopf

Dominik

und erwarte das. Ja, aber es sind schon

Jochen

einfach Funktionsaufrufe, ist nicht irgendwie

Jochen

Text, den man hinschreibt. Ja, okay, stimmt.

Dominik

Ich wache es halt an, dass die es halt direkt abheißen, ja.

Dominik

Ja.

Dominik

Ja, ich glaube, ich, also mir fällt kein

Dominik

Plugin mehr ein, was ich jetzt empfehlen wollen

Dominik

würde. Welche hatten wir ja schon?

Dominik

Ähm, was

Jochen

muss ich mich fragen, ob sowas gibt, ich weiß

Jochen

nicht, in der JavaScript-Welt, das sehe ich halt ab und zu

Jochen

mal, gibt es halt auch so Dinge,

Jochen

da läuft halt einfach immer irgendwie

Jochen

oder da wird halt geguckt,

Jochen

ob sich irgendwas an den Files geändert hat und wenn,

Jochen

dann läuft halt da irgendwie der Testrunner

Jochen

quasi die ganze Zeit und läuft

Jochen

alle Tests, die dann halt sozusagen davon

Jochen

beeinflusst sein könnten von irgendeiner Änderung, werden dann

Jochen

halt nochmal ausgeführt und das gibt dann einem

Jochen

so eine Art Dashboard, was halt gerade nicht funktioniert

Jochen

oder was funktioniert, gibt es das

Jochen

für PyTest eigentlich auch, weil ich glaube, sowas habe ich noch nicht

Jochen

gesehen.

Jochen

Ja, es gibt

Jochen

Testmon.

Jochen

Ah, okay, cool.

Florian

Ein größeres Projekt,

Florian

Testmon.org,

Florian

hatte ich mir mal angeschaut, aber jetzt auch schon

Florian

länger nicht mehr.

Florian

Ein paar Linken, guck mal nochmal rein.

Florian

Ich weiß, dass es auch

Florian

ein, zwei Leute gibt, die jetzt da so ein bisschen

Florian

noch schauen, wie

Florian

kann ich mit Coverage

Florian

halt auch dann schauen, welche Tests wirklich

Florian

beeinflusst sind von

Florian

einer Änderung und sowas.

Florian

Aber es ist schon noch so etwas, was

Florian

jetzt nicht so

Florian

in fix fertig, jetzt eben aus der

Florian

Testmon, also es gibt schon in fix fertig, aber

Florian

jetzt auch noch was, was ich weiß, dass Leute

Florian

dann arbeiten.

Florian

Ja.

Jochen

Ja, ansonsten, ich weiß nicht, was haben wir denn noch

Jochen

so für Themen?

Jochen

Noch irgendwie größere Dinge

Jochen

gar nicht besprochen oder?

Jochen

Ja, vielleicht noch den

Jochen

Development Sprint.

Jochen

Naja, und zwar

Florian

gab es im 2016

Florian

glaube ich mal einen Development Sprint,

Florian

wo wir uns alle mal getroffen hatten

Florian

in Freiburg im Breisgau

Florian

und halt mal zusammen

Florian

rumgehackt haben an PyTest.

Florian

Zum einen halt eben so die

Florian

wirklichen Verdächtigen, die

Florian

Core-Entwickler, zum anderen aber auch

Florian

ganz viele Leute von irgendwelchen Plugins

Florian

oder auch einfach Leute, die mal was an PyTest

Florian

machen wollten. Und

Florian

ich bin gerade daran, fürs

Florian

24 sowas wieder zu

Florian

organisieren,

Florian

müsst ihr wahrscheinlich mal noch schauen, dass ich das auf die

Florian

PyTest-Webseite auch mache, weil

Florian

bisher war die Resonanz

Florian

nicht so

Florian

viel.

Florian

Ich hab da halt mal

Florian

von einem Kunden von mir das Angebot

Florian

bekommen, dass die

Florian

uns da

Florian

hosten bei sich in Vorarlberg,

Florian

was erstmal so

Florian

eben nirgendwo ist.

Florian

Vorarlberg klingt nach Alpen

Florian

irgendwo.

Florian

Ja, das ist tatsächlich ziemlich nah

Florian

als Österreich, aber

Florian

gerade an der Schweizer Grenze.

Florian

In einem Dorf mit irgendwie

Florian

3000 Leuten oder so

Florian

sind die zu Hause.

Florian

Omikron

Florian

heißen die und die hatten

Florian

mir angeboten, das halt

Florian

da zu hosten und

Florian

meinten noch, ja, wir können da

Florian

gratis essen und so und haben Sitzungsräume

Florian

und sowas.

Florian

Und da

Florian

hatte ich jetzt mal so eine Umfrage

Florian

gemacht, wer dann so kommen will und

Florian

es haben sich halt irgendwie fünf Leute oder so gemeldet.

Florian

Ich würde

Florian

da eigentlich ganz gerne ein paar mehr Leute noch haben.

Florian

Also eben in

Florian

2016 waren es 27

Florian

Leute.

Florian

Diesmal könnten wir schon

Florian

so 30, 35 oder so

Florian

könnten wir hosten.

Florian

Wahrscheinlich dann auch mit

Florian

Preise teilweise bezahlt und sowas

Florian

Unterkunft teilweise bezahlt. Müsste man sich

Florian

alles im Detail mal anschauen.

Florian

Wenn wirklich die Resonanz auch da ist.

Jochen

Ja, cool. Also da kann man sich

Jochen

auf jeden Fall mal melden, wenn man da Interesse hat.

Jochen

Wann wäre das denn ungefähr

Jochen

im Sommer oder?

Jochen

Genau im Juni.

Jochen

Dann ist noch ein bisschen Zeit.

Jochen

Genau, Mitte,

Florian

Ende Juni, sowas. Müssen noch schauen,

Florian

welche Woche das wird.

Florian

Und dann

Florian

wäre eben so die Hoffnung,

Florian

dass wir da Leute zusammenkriegen,

Florian

die irgendwas machen wollen. Jetzt ohne

Florian

eine fixe Idee zu haben, was genau ist,

Florian

kommt dann mal alles noch.

Florian

Aber halt einfach so ein Development Sprint

Florian

wieder mal zu haben und sich mal wieder in Person

Florian

zu sehen auch.

Florian

Gute Sache.

Florian

Ja, was gibt's noch?

Dominik

Ich würde sagen, mit Pytest sind wir glaube ich

Dominik

mit den Themen, die ich zumindest auf der

Dominik

Liste hatte, soweit.

Dominik

Dann können wir vielleicht zu den Pics

Dominik

der Woche des Monats der Folge

Dominik

übergehen. Ja, können wir gerne machen.

Dominik

Alles klar, dann mache ich

Dominik

mal Kapitelmarke, Pics,

Dominik

Upsi.

Dominik

Also ich picke

Dominik

fstring.help.

Dominik

Aha, mich geehrt.

Jochen

Ich glaube, ich hatte das auch schon

Jochen

mal irgendwann gepickt, meine ich. Aber wir müssen mal

Jochen

gucken. Wir picken immer nur noch Sachen,

Jochen

die wir schon mal gepickt haben.

Dominik

Ja, ist mir jetzt

Dominik

letztens auch passiert, da habe ich es genau

Dominik

in der nächsten Episode noch mal gepickt,

Dominik

was ich schon mal gepickt hatte.

Jochen

Ja, lass mal überlegen, was würde

Jochen

ich denn picken? Ah, ich glaube, ich mache mal irgendwas aus dem

Jochen

Data-Science-Bereich. Jetzt hat man das am Anfang schon,

Jochen

so ein bisschen

Jochen

den Mund wässrig gemacht mit dem

Jochen

OpenAI-Thema und dann kam

Jochen

aber überhaupt gar nichts mehr.

Jochen

Ich versuche mich da wieder so ein bisschen reinzufuchsen. Ich mache das

Jochen

ja auch, aber in letzter Zeit viel mehr Web-Entwicklungen

Jochen

gemacht aus, weiß gar nicht, warum.

Jochen

Eigentlich ist ja auch das große Thema

Jochen

gerade, aber

Jochen

und deswegen habe ich mir

Jochen

auch mal geguckt, was gibt es denn da so an Kursen,

Jochen

wenn man sich jetzt für diese ganzen Geschichten

Jochen

LLM-Deployment-Kram

Jochen

interessiert. Und da gibt es einen

Jochen

Fast-Kurs von Fast.ai.

Jochen

Jeremy Howard macht das, das ist super.

Jochen

Den verlinke ich dann auch mal in den

Jochen

Shownotes.

Jochen

2022 und 23, ich weiß nicht,

Jochen

ob es die 23 schon gibt,

Jochen

aber die 22 ist auf jeden Fall, ich glaube, die habe ich,

Jochen

das Ding ist echt.

Dominik

Eigentlich müssten wir dazu eh noch mal eine Folge machen. Ich würde sagen, der Einstiegskurs

Dominik

ist vielleicht sogar CS50

Dominik

AI with Python für die Leute, die

Dominik

so ein bisschen mehr anfangen, die Grundlagen

Dominik

irgendwie. Und dann

Dominik

parallel mit der

Dominik

Video-Tutorial-Serie von Andrew Capaci

Dominik

ein Fast.ai.

Dominik

Ja. Würde ich sagen, dann ist

Dominik

mein Datasign schon mit der Nase

Dominik

ganz schön tief drin.

Dominik

Wenn man so ein bisschen noch Statistik macht, vielleicht dann.

Jochen

Oh, und dann picke ich vielleicht die andere

Jochen

Geschichte, die ich mir auch aufgeschrieben hatte, gleich mit.

Jochen

Es gibt eine super schöne

Jochen

Visualisierung von, wie funktionieren

Jochen

diese LLMs eigentlich, wo man halt sieht, wie ein

Jochen

Token irgendwie oben so grafisch

Jochen

irgendwo reinfällt und dann halt

Jochen

irgendwie in Embeddings umgewandelt

Jochen

wird und dann durch diese ganze Maschinerie durchläuft.

Jochen

Dann kann man auch noch auswählen, welches Modell hätte man gerne.

Jochen

Und wenn man das

Jochen

natürlich, oh, das ist aber eine beeindruckende Visualisierung

Jochen

und naja, das ist ja bestimmt alles irgendwie nur so,

Jochen

hat sich jemand halt, ein Grafiker halt hingemalt

Jochen

oder sowas. Nein, es ist tatsächlich, sind die

Jochen

echten mehr oder weniger, also gut,

Jochen

vielleicht nicht in jedem letzten Detail, aber es sind schon fast

Jochen

die, schon quasi die echten Modelle

Jochen

und da hat jemand sich echt Mühe gegeben

Jochen

und in WebAssembly die ganzen

Jochen

Operationen

Jochen

alle nachimplementiert und

Jochen

das ist schon großartig. Es gibt auch

Jochen

den Source dazu.

Jochen

Ja, es ist halt hauptsächlich

Jochen

TypeScript und WebAssembly, aber

Dominik

das ist aber nicht ManimaML.

Dominik

ManimML.

Jochen

Ne, wüsste ich jetzt nicht. Also, das ist halt einfach so

Jochen

grafisch, man sieht halt quasi

Jochen

wie so ein Ergebnis von

Jochen

so einem Modell berechnet wird, halt grafisch.

Jochen

Und wie heißt das?

Dominik

Also, ich kenne ManimML.

Dominik

ManimML.

Dominik

Da muss ich mal grad nachgucken,

Jochen

ob das genau so

Jochen

heißt.

Jochen

Das heißt einfach nur

Jochen

LLM Visualization.

Jochen

Ah, cool.

Jochen

Also, bbcroft.net

Dominik

Also, was man mit ManimML kann man

Dominik

quasi seine eigenen Sachen auch bauen, weil man

Dominik

da kann man sich auswählen, welche Layer man in sein

Dominik

Neural-Network reinsteckt und dann

Dominik

sowas bauen. Oh, das sieht aber auch

Dominik

schick aus. Ja, gut, kann man jetzt nicht sehen, wenn man

Dominik

es nur hört, aber... Ja, ja, Jochen hat es gerade aufgemacht

Dominik

auf dem Screen. Das sieht sehr nice aus.

Dominik

Das bitte auch einmal linken.

Jochen

Genau, das hätte ich dann halt auch nochmal verlinken.

Dominik

Ja, dann machst du ManimML direkt noch dazu.

Dominik

Dann haben wir beide. Okay.

Dominik

Mach ich dann auch.

Dominik

Ja.

Dominik

Florian, hast du auch einen Pick?

Florian

Ja, ich hatte erst mal gar nichts

Florian

und jetzt sind mir da gleich zwei Dinge eingefallen.

Florian

Ja, sehr gut.

Florian

Zum einen, als du Data Visualization

Florian

erwähnt hattest,

Florian

eine Webseite, die ich letztens

Florian

von einem Kollegen

Florian

gekriegt habe, datatowith.com,

Florian

was

Florian

einem so durchleitet, wenn ich eine gewisse

Florian

Art von Daten habe, also

Florian

jetzt irgendwie numerische Daten,

Florian

zwei Variablen, ordered,

Florian

was mir dann anzeigt,

Florian

wie plotte ich das am schönsten.

Florian

Mit dann auch gerade Links

Florian

zu irgendwie Python-Example-Code

Florian

und sowas. Ja, schick.

Florian

Das war das eine.

Florian

Das andere ist

Florian

die Evol-Game.

Florian

Weiß nicht, ob ihr das mitbekommen habt mit

Florian

The Password Game.

Florian

Eine Webseite, wo man halt ein Passwort eingeben soll

Florian

und dann kommen mehr und mehr

Florian

Regeln dazu, das irgendwie

Florian

um es dann dann

Florian

unmöglich zu machen.

Florian

Und basierend darauf,

Dominik

Das Passwort-Game will ich auch.

Florian

Und basierend darauf hat jemand halt

Florian

The Evol-Game gemacht, wo man eine Python-Expression

Florian

eingeben muss, die dann immer mehr und mehr

Florian

Regeln folgen.

Jochen

Okay, interessant. Das klingt gut.

Jochen

The digits in your password

Jochen

must add up to 25.

Jochen

Großartig.

Jochen

Sehr gute Idee.

Florian

Ganz so ähnlich sieht es dann auch beim Evol-Game aus.

Florian

Ja, nee.

Florian

Vielen Dank. Das klingt doch super.

Florian

Ja.

Florian

Ja.

Florian

Ja, ich glaube, dann sind wir

Florian

heute durch.

Dominik

Vielen Dank, dass du da warst, Florian. Ich fand's

Dominik

sehr schön.

Dominik

Ja, danke euch.

Dominik

Viele Dinge, die ich noch nicht wusste.

Dominik

Ja, Python ist ein ganz essentieller

Dominik

Teil, glaube ich, von dem, was wir so machen.

Dominik

Auf jeden Fall.

Dominik

Ja, dann danke, Florian.

Dominik

Bleibt uns alle gewogen. Danke, Jochen.

Dominik

Schreibt ein, wenn ihr wollt, wenn ihr irgendwas noch wissen

Dominik

wollt, Fragen habt, Anregungen, Kommentare.

Dominik

Vielen Dank auch von unseren lieben Hörerinnen und Hörern,

Dominik

die uns Fanpost schicken oder

Dominik

Fragen stellen und so. Das ist immer sehr nett.

Dominik

Hallo at pythonpodcast.de

Dominik

könnt ihr uns erreichen.

Dominik

Dann bis bald und ein

Dominik

gutes Jahresende, kann man ja fast schon sagen.

Dominik

Wir sind ja bald schon im sechsten Podcast. Ja, Jochen.

Jochen

Ach du jemine. Echt? Ist das schon so lang?

Jochen

Ja.

Jochen

Ui. Jetzt fühle ich mich ja noch älter als

Jochen

normalerweise schon fühle. Aber gut.

Florian

Heißt also, die Folge muss jetzt noch

Jochen

dieses Jahr rauskommen. Das wird aber auch noch nicht.

Jochen

Ja, hier denke ich. Ja. Gut, gut.

Jochen

Heute Abend.

Jochen

Ja, schauen wir mal.

Jochen

Also,

Jochen

vielen Dank für eure Aufmerksamkeit. Ja, ebenso.

Jochen

Ciao, Jochen. Tschüss.

Jochen

Tschüss.