2017-02-24 3 views
1

In meiner Firma verwenden wir JMeter als Teil unserer Release-Pipeline, um verschiedene Tests (Rauch, Last, etc.) durchzuführen. Da ich jetzt kompliziertere Testszenarien entwickle, verwende ich eine Menge BeanShell und bin besorgt darüber, dass JMeter mit fehlgeschlagenen BeanShell-Skripten völlig in Ordnung zu sein scheint, und ich möchte einen Weg finden, fehlzuschlagen Tests, wenn BeanShell fehlschlägt.JMeter scheitert nicht an BeanShell-Fehlern

Wenn ein Syntaxfehler vorliegt, schlägt das Skript fehl, meldet die Protokolldatei, aber es verhindert nicht, dass die gesamte Testsuite erfolgreich ist, solange die fehlende BeanShell-Ausführung keinen weiteren Fehler verursacht . Beispiel (Klicken für Bild in voller Größe):

JMeter screenshot

Wie oben gesehen, ich habe einen Sampler mit einem Post-Prozessor, das Beanshell einen Syntaxfehler enthält. Wenn der Fehler ausgeführt wird, wird der Fehler protokolliert und der Fehlerzähler oben wird erhöht, aber das ist alles. Wenn der Benutzer dies nicht bemerkt, wird der Fehler in unseren Freigabevorgang verschoben, was unsere Tests weniger zuverlässig macht. Wenn ich JMeter mit der Befehlszeile ausführen, ist dies das Ergebnis:

Writing log file to: /home/user/jmeter/jmeter.log 
Creating summariser <summary> 
Created the tree successfully using Bad BeanShell Test.jmx 
Starting the test @ Fri Feb 24 12:23:11 CET 2017 (1487935391815) 
Waiting for possible Shutdown/StopTestNow/Heapdump message on port 4445 
summary =  2 in 00:00:01 = 1.9/s Avg: 382 Min: 29 Max: 736 Err:  0 (0.00%) 
Tidying up ... @ Fri Feb 24 12:23:13 CET 2017 (1487935393168) 
... end of run 

Wieder alles in Ordnung scheint, nur die Protokolldatei etwas falsch ist, um herauszufinden. Und das Hinzufügen eines Post-Test-Skripts zum Suchen nach Fehlern in der Datei ist kein guter eigenständiger Testfall.

Ich versuchte einen BeanShell Listener, aber es scheint nicht die Ergebnisse der Skriptkompilierung/-ausführung offenzulegen (SampleEvent enthält keine nützlichen Informationen), und selbst nach vielen Suchen, fand ich keine Möglichkeit, es zu tun überhaupt.

Es könnte ein Listener sein, eine Assertion, benutzerdefinierte Java-Code auf einem Plugin, eine Befehlszeilenkonfiguration, alles, solange ich es einmal auf meiner Testsuite hinzufügen kann, und zumindest einen Fehler auslösen oder die Suite zu abbrechen stellen Sie sicher, dass es untersucht wird.

Antwort

4

Der einzige Weg, Beanshell Postprocessor Fehler in den Testergebnissen wird zur Änderung der Mutter sampler Ergebnisses Einstellung es auf „Ausfall“ im Beanshell Skript beginnen und auf „Erfolg“ im Skript Scheitern, so etwas wie zu bekommen:

prev.setSuccessful(false); 
//your main Beanshell code goes here 
prev.setSuccessful(true); 

Wenn also ein Beanshell-Fehler zwischen diesen prev.setSuccessful-Methoden auftritt - der Eltern-Sampler wird fehlschlagen.


Angesichts Ihrer Test auf Scripting beruht möchte ich JRS223 Test Elements und Groovy language Schalt empfehlen, wird es aus Sicht der Leistung viel besser sein, Groovy Is the New Black Artikel für weitere Informationen, Benchmarks sehen, und scripting Best Practices.

+0

Danke. Scheinbar schneller und bessere Fehlerberichte, was nett ist, aber dieser Ansatz erfordert immer noch einen aktiven Aufwand, um das Skript auf eine bestimmte Weise zu programmieren, um solche Fehler zu erfassen. Als Entwickler sehe ich es als einen Job für die Plattform selbst, nachdem der Interpreter ausgeführt wurde und weiß, ob Fehler vorhanden waren. Warum können solche Informationen nicht dazu verwendet werden, den Test abzubrechen oder einen Fehler zu setzen, anstatt den Entwickler zu zwingen Tricks anwenden, um dasselbe Ergebnis zu erreichen? Wie auch immer, danke für deine Antwort, es ist meine beste Alternative bisher. – mdrg

Verwandte Themen