2017-08-23 1 views
1

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!

+0

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

+0

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

+0

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

Antwort

0

Viele Selenbenutzer haben ihre Tests durch Animationen beeinflusst. Um die sich ändernden Preise zu testen, ist es am besten, Animationen zu deaktivieren. Selbst wenn Sie beabsichtigen, Animationen zu testen, sind die komplizierteren Erfahrungen/Ergebnisse mit Selen manchmal geschichtet und das Entfernen von Variablen einzeln nach dem Testen bietet eine bessere Kontrolle und gibt Ihnen die Möglichkeit, jede Ebene einzeln zu testen.

http://marcgg.com/blog/2015/01/05/css-animations-failing-capybara-specs/

Zusätzlich habe ich einige Versionen von Treiber-Binärdateien erfahren für meist Gründen langsam zu werden, die auf meine Testumgebung lokalisiert waren. Es kann Ihnen helfen, ein Entwurfsmuster zu verwenden, das für jeden Test eine neue Treiber-Binärdatei enthält und den Treiber zerstört, wenn der Test abgeschlossen ist. Dadurch wird zusätzlicher Overhead bei der Codeausführung verursacht. es ist jedoch eine schätzbare Zeit und kann in den Erwartungen enthalten sein.

Verwandte Themen