Ich verwende Python und Selenium, um die Anpassungsoptionen meiner Storefront zu testen, und habe festgestellt, dass sich die Tests im Laufe der Zeit deutlich verlangsamen.Tests werden langsamer, wenn Sie bestimmte Kombinationen durchgehen
Konkret habe ich eine Anzahl von <select>
Tags auf der Seite, von denen jede eine Anzahl von <option>
Tags als Kinder hat. Jede Änderung in der Kombination Ajax fragt einen neuen Preis ab, auf den Selenium durch explizite Wartezeiten wartet, bis die Ladeanimation zuerst erscheint und dann verschwindet, bevor sie zur nächsten Option wechselt.
Da ich 5 verschiedene Auswahlfelder mit jeweils 3-10 Optionen habe, dauert der gesamte Test eine Weile. Es scheint jedoch eine große Diskrepanz zwischen früheren Kombinationen und späteren zu geben - während die früheren typischerweise weniger als eine Sekunde laden, können die allerletzten die Ladeanimation für bis zu 20 Sekunden anzeigen, bevor der Preis geändert wird.
Das Problem scheint nicht mit der Maschine zu sein, auf der der Test ausgeführt wird, da sowohl die CPU- als auch die Speicherbelegung moderat sind. Ich bin sehr gespannt, was diese Verschlechterung der Leistung im Laufe der Zeit verursachen könnte - wäre sehr dankbar, wenn jemand eine Idee hat. Danke im Voraus!
Welchen Browser oder welche Treiber-Binärdatei steuern Sie mit Selen? Wenn es weniger Zeit braucht, um die Treiber-Binärdatei zu instanzieren, als warten, sollten Sie erwägen, das Skript so zu schreiben, dass die Treiber-Binärdatei bei jeder Iteration erneut instanziiert wird. Cookies und andere Daten können an die neue Instanz der Treiber-Binärdatei übergeben werden. – user14218
Ich verwende Chrome Webdriver, da PhantomJS das Problem zu verschärfen scheint. Können Sie näher erläutern, was Sie meinen, wenn Sie den Treiber erneut instanziieren? Die relevanten Daten aus der Instanz wären die Login-Sitzung und der aktuelle Zustand der Selects – Peter
Grundsätzlich schreiben Sie das Skript zum Beenden und erstellen Sie einen neuen Chromedriver für jede Kombination. driver.quit(): driver = webdriver.Chrome ('/ pfad/zu/chromedriver'). – user14218