Abhängigkeiten testen mit tox (Speicherplatz-Problem)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
stefanbunde
User
Beiträge: 29
Registriert: Dienstag 20. Oktober 2015, 12:59

Hallo allerseits.

Ich entwickle aktuell mehrere kleine Django-Apps. Jede dieser Apps wird mit tox und pytest getestet.
Dabei teste ich die jeweiligen Abhängigen der Apps mit, allerdings nicht nur in der aktuellsten Version, sondern in verschiedenen Versionen (wie Django 3.2, 4.0 und 4.1). Damit will ich Aussagen darüber treffen können, welche die niedrigste unterstützte Version des jeweiligen Paketes ist.
Hier mal ein Auszug aus meiner tox.ini:

Code: Alles auswählen

[tox]
envlist =
    latest
    py3{7,8,9,10,11}-django3.2-drf3.{11,12,13,14}-drfnestedrouters0.{90,91,92,93}
    py3{7,8,9,10,11}-django3.2-drf3.{11,12,13,14}-guardian2.{2,3,4}
    py3{7,8,9,10,11}-django3.2-drf3.{11,12,13,14}-djangocountries7.{1,2,3,4}
    py3{7,8,9,10,11}-django3.2-drf3.{11,12,13,14}-djangophonenumberfield{5.0,5.1,5.2,6.0,6.1,6.2,6.3}
    py3{7,8,9,10,11}-django3.2-dateutil2.{7,8}
    py3{7,8,9,10,11}-django3.2-reversion{3.0,4.0,5.0}
Es wird also in dem Beispiel mit allen Python Versionen von 3.7 bis 3.11 getestet, mit Django 3.2, mit allen djangorestframework Versionen von 3.11 bis 3.14 und so weiter.
tox bildet für jede Zeile Permutationen, sodass allein für die erste Zeile 80 Testdurchläufe durchgeführt werden. Das kostet Zeit, aber das ist mein geringstes Problem.
Für jeden Testdurchlauf wird ein Environment auf der Festplatte angelegt. Letzte Woche war ich an dem Punkt, dass eine App die 180 GB gesprengt hat. Damit habe ich die Grenze des Test-Servers ausgereizt.

Daher überlege ich gerade, wie ich am sinnvollsten die Anzahl der Environments reduziere. Daher würde mich mal interessieren, wie ihr eure Abhängigkeiten testet.
Würdet ihr nur mit Python 3.7 und 3.11 testen und davon ausgehen, dass dazwischen auch alles gehen muss? Das Gleiche mit z.B. djangorestframework in den Versionen 3.11 und 3.14?
Wie geht ihr da vor?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich kenne tox nicht gut, aber ich sehe zwei Auswege: randomisieren, oder in batches bearbeiten.

Ersteres würde Bestandteile der Testmatrix zufällig entfernen, damit sie in Summe kleiner ist. Über die Zeit wird aber alles getestet.

Zweiteres minimiert den impact zum Preis erhöhter Laufzeit.
stefanbunde
User
Beiträge: 29
Registriert: Dienstag 20. Oktober 2015, 12:59

Danke für deine Anregungen. Für beides sind mir keine Möglichkeiten unter tox bekannt.
Die Tests werden mit dem Aufruf tox auf der Kommandozeile gestartet und dann werden alle Test-Environments ausgeführt/getestet.
Man kann mit tox -e django3.2 ein bestimmtes Environment auswählen, aber dann wird halt nur Django 3.2 getestet und der Rest in der aktuellsten Version. Also es ist genau ein Environment.
Um deinen Vorschlag umzusetzen müsste man sich nach meinem Wissensstand ein Script schreiben, welches diese Randomisierung und Batches übernimmt. Ich werde darüber nachdenken.

Aber vllt teste ich auch einfach nur unnötig viel, daher sind gern weitere Meinungen gewünscht.
Antworten