[JUnit] eigener Testsuite Runner + Ausgabe

specialize

Bekanntes Mitglied
Grüß euch,

ich bin gerade dabei meine eigene Testrunnerumgebung für JUnit zu schreiben.

Starten lassen und die Testsdurchlaufen kann er, allerdings happert es bei der Ausgabe.
Ich verstehe z.B. nicht ganz wie Descriptions eingesetzt werden und wofür.

Prinzipiell will ich mit dem JUnitCore (> der 4.x Runner) eine beliebige Testsuite durchlaufen lassen, welche Selenium Tests durchführt.
Das kann er bereits.
Des weitere kann ich mit dem Result die Anzahl der gelaufenen Tests sowie die Anzahl der Fehlerhaften Tests ausgeben.

1.
Wo ich Hilfe brauche: Wie kann ich eine für den User wissenswerte laufende Fehlerausgabe/Resultausgabe bekommen. (also nach jedem Testcase die Fehlermessage)

2.
Der Runner läuft in einem eigenen Thread. Zusätzlich rennt ein anderer Thread, der das Result mittels while Schleife auf einen fertigen Testcase abhört. Allerdings scheint mir das Result nicht schnell genug upzutaten (oder die while Schleife?). Bei sehr schnellen Tests springt er von 0 Tests abgeschlossen auf 5 Tests abgeschlossen. Lösung dazu?

Hier Ausschnitte aus meinem code (bitte über die conventions mal hinwegzusehen):

Klasse:
Java:
	JUnitCore JTR = new JUnitCore();	
	Result JTRES = new Result();
	RunListener JTRL = JTRES.createListener();
	
	Thread th1 = new Thread(new FirstThread());
	Thread th2 = new Thread(new SecondThread());
	Thread th3 = new Thread(new ThirdThread());

Junit Thread:
Java:
String SuiteToRun = new String(tf_runts.getText());
			Class<?> STR = Class.forName(SuiteToRun);
   
			Request JTRQ = Request.classes(STR);					
			JTR.addListener(JTRL);
			JTR.run(JTRQ);	
			Thread.sleep(500);
			JTR.removeListener(JTRL);
			System.out.println("i_finished");
			i_finished = 1;
			th2.join();

While Schleifen Thread:
Java:
int newruncount = JTRES.getRunCount();	
			System.out.println("BeginCount: "+JTRES.getRunCount()+"-"+newruncount);
			while (i_finished == 0)				
			{	
				if (JTRES.getRunCount() == newruncount+1)							
				{					
				ta_cmd.setText(ta_cmd.getText()+"\n"+"Run Time: "+JTRES.getRunTime()*0.001+" - "+ JTRES.getRunCount() +": "+ "Description");	
				ta_cmd.setCaretPosition(ta_cmd.getText().length());	
				newruncount = newruncount+1;								
				}
				else{}				
			}
 
*Push* Kennt sich da keiner aus, bzw kann mir keiner einen Tipp geben?
(will, dass die Tests auch ohne IDE rennen...)

Hab die API versucht zu verstehen, google durchforstet und hab keine simple verständliche Lösung(wenn überhaupt) gefunden.

Wieso braucht der Runlistener zb.: eine Description bei testfinished und wie schaut die Description aus wenn ich mit JUnitCore arbeite??

Wie bekomme ich die Namen der einzelnen Testcases(der klasse) als Ausgabe?


Oder wär eurer Meinung nach TestNG überhaupt vorteilhafter??
 
Zuletzt bearbeitet:
Du ignorierst leider die Tipps die man dir gibt, das gibt es alles schon fertig.

Schau dir doch mal den Ant JUnit Task an.
 
Hi,

...ich bin gerade dabei meine eigene Testrunnerumgebung für JUnit zu schreiben.
....
Prinzipiell will ich mit dem JUnitCore (> der 4.x Runner) eine beliebige Testsuite durchlaufen lassen, welche Selenium Tests durchführt.
also mir ist nicht klar warum Du das machst? Für JUnit gibt es doch genug Ant, Maven ? Und für TestNG das Gleiche....

Ich verstehe Dein Problem nicht? Hängt es eventuell mit den Selenium Tests zusammen ? Was möchtest Du erreichen bzw. was klappt nicht?

Gruß
Karl Heinz Marbaise
 
zu 1. Du kommst bei Selenium nicht drum rum vernünftige Logs selbst zu erzeugen.
Der Error aus JUnit bzw. die Message der Exception helfen dir im Prinzip gar nicht weiter, da null Aussagekraft. Besonders falls du Selenium 1.0 benutzt. Ein Logger bietet sich hier also an.

zu 2. Nach viel Hirn-Aktivität meinerseits konnte ich den Sinn hinter dieser Vorgehensweise leider nicht erkennen. Wozu brauchst du das? :>
 
Hallo,

zu 1. Du kommst bei Selenium nicht drum rum vernünftige Logs selbst zu erzeugen.
Der Error aus JUnit bzw. die Message der Exception helfen dir im Prinzip gar nicht weiter, da null Aussagekraft. Besonders falls du Selenium 1.0 benutzt. Ein Logger bietet sich hier also an.

Hm....Selenium Tests:
Code:
-------------------------------------------------------------------------------
Test set: com.xyz.de.test.AuswahlBenutzerRollenIT
-------------------------------------------------------------------------------
Tests run: 4, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 33.891 sec <<< FAILURE!
dialogAufVollstaendigkeitOhneRollenWahl(com.xyz.de.test.AuswahlBenutzerRollenIT)  Time elapsed: 0.015 sec  <<< FAILURE!
org.junit.ComparisonFailure: expected:<Auswahl [X]der Nutzerrolle> but was:<Auswahl []der Nutzerrolle>
	at org.junit.Assert.assertEquals(Assert.java:123)
	at org.junit.Assert.assertEquals(Assert.java:145)
	at com.xyz.de.test.AuswahlBenutzerRollenIT.dialogAufVollstaendigkeitOhneRollenWahl(AuswahlBenutzerRollenIT.java:25)
Also mir ist ja nicht klar was an der obigen Ausgabe unklar/unzureichend ist? Hier finde ich in welcher Klasse der Test auf die Nase gefallen ist und die Zeilennummer bekomme ich auch noch...? Was brauch ich sonst noch?

Das ist ein Integrations-Test (Selenium) mit Maven...

Gruß
Karl Heinz Marbaise
 
Ja mir und den Testern reicht das immer nicht um die Tests vernünftig anzupassen. Wir loggen den kompletten Testablauf mit, inklusive der Element-Locators (idR XPath) und so weiter. Dann kann man die Fehlerquelle noch ein bisschen schneller entdecken. Bei vielen Testfällen kann das sehr praktisch sein. Dazu ist aber zu sagen, dass wir nicht einfach nur rein Selenium benutzen sondern unseren eigenen Testautomaten drum rum gebaut haben.
Und wir benutzen nur Selenium 1.0 und somit Selenium Remote Control. Selenium 2.0 erzeugt so wie ich das bis jetzt gesehen habe schon etwas bessere Fehlernachrichten.
 

Zurück
Oben