mmofacts.com

Selenium zur Automatisierung

gepostet vor 13 Jahre, 9 Monate von MrMaxx

Ich hab mich mit dem Thema noch nicht so viel beschäftigt, aber gibt es Spiele, in denen man die immer gleichen Klickabläufe hat? Es kann ja sein, dass das Spiel an sich ganz toll ist, aber ein Teil sich immer wiederholt.

http://seleniumhq.org/

Würde mich mal interessieren, ob es Leute gibt, die z.B. Selenium benutzen.

Mr.Maxx

gepostet vor 13 Jahre, 9 Monate von NeoArmageddon

Meinst du jetzt zum Testen, was die Spieler im Game machen, oder zum Makro aufzeichnen und spielen?

P.S. Nein, ich benutze es nicht, um auf deine Frage zu antworten.

gepostet vor 13 Jahre, 9 Monate von D4rk5in

Soweit ich weiß, ist Selenium ein Tool unter vielen. Z.B. gibt es auch ein FF-Add-On, dass sich iMacros nennt. Macht im Prinzip das Gleiche. In jedem Spiel, in dem es Dinge gibt, die sich immer wiederholen und mühsam sind selbst zu erledigen, werden solche Tools genutzt. Das behaupte ich jetzt einfach mal. Von meinem Spiel weiß ich es sicher und in allen anderen (in denen ich als Spieler aktiv war) gab es auch haufenweise Gerüchte wer welches dieser Tools nutzt... ;)

Aber bei mir ist das noch ein Fehler im Konzept, der nach und nach ausgebügelt wird. In einem guten und durchdachten Browsergame sollten solche Programme keine Anwendung finden und somit nicht lohnenswert sein.

MfG

gepostet vor 13 Jahre, 9 Monate von knalli

Selenium besteht aus mehreren Komponenten. Es gibt neben dem Macro-Editor (Caputure-and-replay) als Addon für den Firefox auch noch die Testrunnner und sogar serverseitige Module.

Beispielsweise kann man mit Capture-and-replay sich einen Testfall zusammenbauen (oder: ein Makro zusammenstellen). Zu anfangs wurde das sogar ganz normal als HTML-Tabelle (im drei Spaltenlayout?) gespeichert und war dann über einen JavaScript-Testrunner abspielbar. Es steht jedem frei, diesen Testfall auch mit der Hand anzulegen, das Firefox-Plugin ist nur eine Hilfestellung, die darüber hinaus im Zweifel auch eine schlechte Wahl vorschlagen wird.

Die serverseitigen Treiber (Stichwort: WebDriver seit Selenium 2, http://seleniumhq.org/docs/09_webdriver.html) zielen auf den automatisierten UI-Test ab. Beispielsweise für Java (es gibt auch was für die "anderen Welten") entsprechende (Maven-)Libraries, um einen Browser komplett "fernzusteuern". Durch die Abstraktion gibt es fertige Implementierungen für IE, Firefox und Chrome.. und sogar einen UnitDriver, der sogar einfaches JavaScript headless ausführen kann. Bei einer komplexen RIA mit ExtJS stürzt der Treiber zwar ab, aber bspw. eine AutoSuggest-Suche bei Google lässt sich damit ohne Browser testen (via Rhino?).

Selenium teilt aber das Problem aller Web-UI-Tests: Bei generischen Informationen und sich schon gering ändernden Daten sind Testfälle teilweise nur mit Mühe zu konstruieren. Positiv ist, das man etwa über die WebDriver-Schicht nach allem möglichen Suchen und Matchen kann: getElement(s) by id, tagName, className, XPath.

Alternative für Unittests: JSUnit.

Erfahrungswerte.

Allesamt lässt sich prima in eine JUnit-Umgebung integrieren, natürlich muss dabei beachtet werden, dass der ausführende Rechner die Voraussetzungen hat. Die Selenium-Tests habe ich bisher mangels grafischer Oberfläche auf dem Buildserver (Hudson) nur manuell angestoßen: die Firefox-Instanz wird dann zur Laufzeit geöffnet (neues Profil, parallel zu einer offenen), getestet und wieder geschlossen.

Bei Oberflächentests in Webanwendungen - und inbesondere bei Javascript-lastigen, die Daten *nachladen* - ist es teilweise etwas tricky. So habe ich mir (in Java) einen eigenen WaitForCondition-Callback-Wrapper (inkl. Timeout) bauen müssen. Eingebaut ist sowas nämlich nur für normale Pageloads, aber nicht für normale Ajax-Requests der Anwendung.

gepostet vor 13 Jahre, 9 Monate von MrMaxx

Wow...danke knalli...vor allem der letzte Teil mit deinen bisherigen Erfahrungen wird mir vermutlich einiges an Zeit ersparen. Ich darf vermutlich für die nächste Woche in unserer QA Abteilung mit Selenium rumspielen, weil sie in die Richtung verschiedene Systeme evaluiert haben wollen.

Initial meinte ich natürlich die Benutzung von Selenium durch Browsergame-Spieler.

Maxx

gepostet vor 13 Jahre, 9 Monate von knalli

Nur Oberflächentests? Weil dann könnte Selenium schon in die engere Auswahl fallen. Kannst aber gerne Alternativen zeigen, ggf. mit einem kurzen Einschätzung.

Im Falle von Selenium: Einfach die Hilfeseiten nehmen (u.a. den Link von mir oben folgen) und ratz-fatz ist ein Unit-Test in Java drinnen. Für eine Evaluierung reicht ja ein Standalone-Testverfahren (Unit-Test läuft gegen eine bekannte URL, meist der eigene Devserver), für den späteren richtigen Gebrauch ist das dann entweder das deployte Testsystem oder sogar ein eigens dafür hochgefahrene Server.

Ich weiß spontan nicht, ob man über die Remote-Unittests auch die mitgeschnittenen XML/HTML-Testcases verwenden kann; theoretisch kann man sich dafür aber wahrscheinlich selber einen Wrapper schreiben.

Wenn aber auch richtige Javascript-Unittests: Geht auch wieder einfach, dazu bietet http://www.jsunit.net alles mit im Paket. Das ist ein TestRunner, der out-of-the-box im Browser funktioniert und einfach einen Testfall abspielt (in Form von mehreren test-Methoden) oder eine TestSuite bestehed aus Testfällen (vgl. andere Unit-Tests). Zusätzlich bietet JSUnit ein fertigen Server-side-Part an: nach kurzer Konfiguration einfach "ant standalone_test" (btw: Lässt sich im Übrigen auch in Maven integrieren, wenngleich es etwas kniffeliger ist.) startet Jetty, einen definierten Browser, arbeitet die Tests ab und spuckt eine XML aus; "ant start_server" und "ant distributed_test" macht das gleiche nur als Server-Client-Spielchen. Ich stecke gerade fest an der Tatsache, das sich eben erwähntes Log-Protokoll leider noch nicht mit dem xUnit-Plugin von Hudson verträgt (Fehler in der XSL?), sodass der Reporting-Mechanismus in die Hose geht. Falls das also jemand *rein zufällig* gelöst hat... ;)

Weitere Alternative, kommerziell aber mit 20 Tage-Demoversion (und kleiner Hinweis: Die machen sehr aktive Akquise.) wäre noch Bredex GuiDancer (http://www.bredex.de/de/guidancer/whygd.html).. interessanter Ansatz, aber sehr komplex. Es soll für Webanwendungen auch funktionieren; getestet habe ich es mit dem Tutorial für eine Java-Swing-Anwendung und in einem Selbstversuch mit einer Webseite. Bei der RIA muckte es..

gepostet vor 13 Jahre, 9 Monate von dewarim

Selenium habe ich mal ausprobiert - lief aber damals nicht so toll. Aber das kann sich mittlerweile geändert haben.

Alternative ist in Perl WWW::Mechanize und in Java canoo webtest (http://webtest.canoo.com/webtest/manual/WebTestHome.html )

In WWW::Mechanize habe ich mal die Webseite der Arbeitsagentur ferngesteuert ;) - leider sind das so die Projekte, die ein ganz klein wenig in eine rechtliche Grauzone abgleiten können (auch wenn's nur zur legalen Arbeitssuche war, aber die EULA der BA verbietet alles mögliche).

In Canoo lassen sich die Tests in Groovy erstellen. Sehr angenehm.

Beispiele (noch unvollkommen): 

http://cinnamon.svn.sourceforge.net/viewvc/cinnamon/Dandelion/trunk/test/webtest/eu/hornerproject/dandelion/webtest/

Edit: Link korrigiert, verweist jetzt auf den Testordner.

gepostet vor 13 Jahre, 9 Monate von knalli

Das ist easy, das kann jedes Tool. Interessant wird es, wenn es ans eingemachte geht. Oben erwähnte Ausdrücke zum Gegentesten, Warten auf asynchrone Requests, Prüfen von Bildern (bzw. ggf. das Prüfen, welcher Bildpfad geladen wurde)... usw. usf. 

Das erste sieht stark nach einer Ant-Adaption aus ;) - dein zweiter Link ist tot?

gepostet vor 13 Jahre, 9 Monate von dewarim

Original von knalli

Das ist easy, das kann jedes Tool. Interessant wird es, wenn es ans eingemachte geht. Oben erwähnte Ausdrücke zum Gegentesten, Warten auf asynchrone Requests, Prüfen von Bildern (bzw. ggf. das Prüfen, welcher Bildpfad geladen wurde)... usw. usf. 

Das erste sieht stark nach einer Ant-Adaption aus ;) - dein zweiter Link ist tot?

Was sind "Ausdrücke zum Gegentesten"?

Warten auf asynchrone Requests: das werde ich heute mal ausprobieren ;)

Und der 2. Link war tatsächlich tot, danke für den Hinweis. Anscheinend lässt Sourceforge Links auf alte Revisionen nicht zu, wenn die Datei verschoben wurde. So was aber auch...

gepostet vor 13 Jahre, 9 Monate von knalli

Naja, reine Interaktion basierend auf Feldnamen ist jetzt relativ unspektakulär. Die WebDriver-API hat beispielsweise die Methoden findElement(By) und findElements(By). By kann dann sein: className, tagName, xpath etcpp. Das sind die Ausdrücke, die man etwa beim Firefox-Addon auch als "Ausgabe" des Capture-Mode erhält.

gepostet vor 13 Jahre, 9 Monate von inok1989

Bei Nützung solcher Tools wird man zurecht bei fast allen Browsergames jedenfalls wenn man entdeckt wird sofort gelöscht/gesperrt/gebannt, von dem her wundert mich das, warum hier über solche Tools diskutiert werden darf.

gepostet vor 13 Jahre, 9 Monate von DrakeL

Original von inok1989

Bei Nützung solcher Tools wird man zurecht bei fast allen Browsergames jedenfalls wenn man entdeckt wird sofort gelöscht/gesperrt/gebannt, von dem her wundert mich das, warum hier über solche Tools diskutiert werden darf.

Weil es hier nicht um die Ausnutzung geht, sondern um automatisierte Testläufe.

gepostet vor 13 Jahre, 9 Monate von Loron

Original von DrakeL

Original von inok1989

Bei Nützung solcher Tools wird man zurecht bei fast allen Browsergames jedenfalls wenn man entdeckt wird sofort gelöscht/gesperrt/gebannt, von dem her wundert mich das, warum hier über solche Tools diskutiert werden darf.

Weil es hier nicht um die Ausnutzung geht, sondern um automatisierte Testläufe.

Nö, geht schon um automatisierung bestehender Games. Siehe den Startpost.

gepostet vor 13 Jahre, 9 Monate von DrakeL

Original von Loron

Nö, geht schon um automatisierung bestehender Games. Siehe den Startpost.

Grad nochmal gelesen, stimmt ihm schon, dem Rest nicht. :)

Ist nur die Frage ob man es verbieten sollte als Anbieter oder das Problem aufgreifen sollte und lösen. Wenn etwas automatisiert werden kann (daher automatisch besser geht als wenn der Nutzer Denkarbeit/Entscheidungen treffen muss würde ich es als Fehler im Design sehen.

gepostet vor 13 Jahre, 9 Monate von knalli

Soll ein Moderator einen Branch für "Automatisierte Testverfahren" erstellen und diesen in den Entwicklerbereich schieben?

gepostet vor 13 Jahre, 9 Monate von dewarim

Original von DrakeL

Original von Loron

Nö, geht schon um automatisierung bestehender Games. Siehe den Startpost.

Oh, so hatte ich den gar nicht verstanden :)

Ist nur die Frage ob man es verbieten sollte als Anbieter oder das Problem aufgreifen sollte und lösen. Wenn etwas automatisiert werden kann (daher automatisch besser geht als wenn der Nutzer Denkarbeit/Entscheidungen treffen muss würde ich es als Fehler im Design sehen.

Das sehe ich auch so, aber es gibt Leute (Spieler), die das anders sehen. Vielleicht, weil sie von schlechten Spielen so erzogen wurden - im Wurzelimperium oder KapiHospital (und vermutlich Farmville etc) kann man praktisch kaum etwas falsch machen, weil diese Spiele relativ intelligenzfreies Anklicken und/oder Herumgeschiebe von Objekten beinhalten. Die Spieler sind dabei nicht mehr gefordert als Pawlow's Hund. Und das macht manchen Leuten Spaß. Bzw: es macht ihnen eigentlich keinen Spaß, und die Leute bezahlen Geld dafür, um es weniger spielen zu müssen. Und natürlich fragt sich jeder halbwegs intelligente Mensch dann irgendwann: Warum automatisiere ich das nicht?

gepostet vor 13 Jahre, 9 Monate von Loron

Die Spieler sind dabei nicht mehr gefordert als Pawlow's Hund. Und das macht manchen Leuten Spaß. Bzw: es macht ihnen eigentlich keinen Spaß, und die Leute bezahlen Geld dafür, um es weniger spielen zu müssen.

Und natürlich fragt sich jeder halbwegs intelligente Mensch dann irgendwann: Warum automatisiere ich das nicht?

Merkst du selber den Wiederspruch in sich ;).

gepostet vor 13 Jahre, 9 Monate von dewarim

Original von Loron

Die Spieler sind dabei nicht mehr gefordert als Pawlow's Hund. Und das macht manchen Leuten Spaß. Bzw: es macht ihnen eigentlich keinen Spaß, und die Leute bezahlen Geld dafür, um es weniger spielen zu müssen.

Und natürlich fragt sich jeder halbwegs intelligente Mensch dann irgendwann: Warum automatisiere ich das nicht?

Merkst du selber den Wiederspruch in sich ;).

Nö.

Jemand, der Mensch-Ärgere-Dich-Nicht oder ein anspruchsloses Browserspiel spielt, muß ja nicht dumm sein.

Und wer da eine nette Community findet, bleibt evtl. auch dann, wenn er merkt, daß die eigentliche Spielmechanik nicht viel hermacht. Aber die dauernde Wiederholung von ermüdenden, ewig gleichen Aktionen ist irgendwann nicht mehr attraktiv, also suchen die intelligenteren Leute nach Möglichkeiten, sich das zu erleichtern.* Die einen bezahlen Geld, um einen komfortableren Premium-Account zu bekommen. Die anderen, deren moralische Entwicklung noch hinter ihren finanziellen Möglichkeiten zurück geblieben ist, versuchen halt zu cheaten, in dem sie Bots einsetzen...

Interessanterweise setzt dann auch eine Entwicklung ein, daß manche das Spiel nicht mehr kritisch sehen können. "Ich habe 1000 Stunden auf Wichtel A geklickt, damit er seine Karotten zu Wichtel B bringt. Das habe ich nicht gemacht, weil ich mich so konditioniert habe, sondern weil es Spaß macht. Ganz brutalst viel Spaß."

* oder man spielt ein anderes Spiel.

Auf diese Diskussion antworten