2009-12-08 11 views
8

Ich bin neu in der Unit-Tests, also würde ich gerne die Meinung von einigen bekommen, die ein wenig mehr eingeweiht sind.Unit-Tests für Screen-Scraping?

Ich muss in Kürze einen Screen-Scraping-Code schreiben. Das Zielsystem ist ein Web-UI, in dem umfangreiche HTML-Parsing und ähnliche volatile Goodness involviert sind. Ich werde niemals über Änderungen durch das Zielsystem informiert (z. B. wenn sie ihre Website neu gestalten oder ihre Funktionalität anderweitig ändern). Also erwarte ich, dass mein Code regelmäßig bricht.

Also meine wirkliche Frage ist, wie viel, wenn überhaupt, meiner Unit-Tests sollte sich Sorgen über oder Umgang mit der Schnittstelle (die Website, die ich kratze) ändern?

Ich denke Unit Tests oder nicht, ich werde zur Laufzeit stark testen müssen, da ich sicherstellen muss, dass die Daten, die ich konsumiere, makellos sind. Selbst wenn ich Unit-Tests vor jedem Lauf ausführen würde, könnte die Web-UI immer noch zwischen Tests und Laufzeit wechseln.

Also konzentriere ich mich auf In-Code-Tests und Ausnahmebehandlung? Bedeutet das, eine Linie in den Sand zu zeichnen und diese Art von Tests von Unit-Tests auszuschließen?

Dank

+1

Ich glaube nicht, dass Sie "Unit Tests" meinen. Komponententests werden von Ihnen ausgeführt, um den Code zu testen, den Sie im Wesentlichen auf Methodenebene geschrieben haben. So wie ich Ihre Frage lese, klingt es eher so, als würden Sie über automatisierte Tests sprechen, um zu sehen, ob Ihre Eingaben gut genug sind, um den Rest der Arbeit zu durchlaufen. Ist das wahr? –

+0

Nun, ich bin mir nicht sicher sicher, aber zum Beispiel hatte ich mir vielleicht eine Methode getGoogleSearchResult() vorgestellt und für diese Methode konnte ich einen Test und Behauptungen machen. Und nein, ich kratze nicht an Google SERPs.:) – Chris

Antwort

6

Die Gerätetests sollten immer so ausgelegt sein, dass sie wiederholbare bekannte Ergebnisse liefern.

Komponententest Daher ist ein Bildschirm-Schaber, sollten Sie den Test gegen einen bekannten Satz von HTML schreiben (Sie können ein Mock-Objekt verwenden, um dies darzustellen)

Die Art von Sache, die Sie über doesn sprechen werden Es klingt für mich nicht wirklich nach einem Szenario für Komponententests. Wenn Sie sicherstellen möchten, dass Ihr Code so robust wie möglich ausgeführt wird, handelt es sich mehr um In-Code-Tests und die Behandlung von Ausnahmen.

Ich würde auch einige Alarmierungscode einbeziehen, so dass das System Sie auf Fälle aufmerksam gemacht hat, in denen der HTML-Code nicht wie erwartet geparst wird.

+0

Ja. Ich habe etwas sehr ähnliches gemacht. Holen Sie HTML, das zu verschiedenen Fällen passt (Abschnitt vorhanden, Abschnitt fehlt, Tabelle leer usw.), und füttern Sie diese Zeichenfolgen in Ihre Parsing-Klasse (die von Ihrer Web-Downloader-Klasse getrennt sein sollte). – TrueWill

+0

Danke ich denke das spricht wirklich zu meinem genauen Konflikt damit. Und stimmte über den Alarmierungscode überein! – Chris

1

Ich denke, die Sache Unit-Tests für hier nützlich sein könnten, wenn Sie einen Build-Server haben werden sie Ihnen eine Frühwarnung der Code nicht mehr funktioniert geben. Sie können keinen Komponententest schreiben, um zu beweisen, dass screenscraping immer noch funktioniert, wenn die Seite ihren HTML-Code ändert (weil Sie nicht sagen können, was sie ändern wird).

Möglicherweise können Sie einen Komponententest schreiben, um zu überprüfen, ob von Ihren Bemühungen etwas Nützliches zurückgegeben wird.

+0

Die Überprüfung, dass etwas Nützliches (und fällt in bekannte Einschränkungen) ist im Grunde, was ich im Sinn hatte, wenn ich Komponententests zu den verschiedenen Scraping-Methoden schreiben würde. – Chris

2

Sie sollten versuchen, Ihre Tests so weit wie möglich zu trennen. Testen Sie die Datenverarbeitung mit Tests auf niedriger Ebene, die den tatsächlichen Code ausführen (d. H. nicht über einen simulierten Browser).

Stellen Sie im simulierten Browser sicher, dass die richtigen Dinge passieren, wenn Sie auf Schaltflächen klicken, Formulare absenden und Links folgen.

Versuchen Sie niemals zu testen, ob das Layout korrekt ist.

+0

Kein Browser im Mix. Nur Befehlszeilenausführung und Curl. – Chris

Verwandte Themen