RTSP Lasttests mit JMeter
Ziel
Ziel des Projekts war es die bestehenden Stresstestmöglichkeiten einer IPTV Infrastruktur so zu erweitern, dass auch die VOD Playout Kapazität der RTSP Server und die entsprechenden Netzwerksegmente unter Last zu testen. Um größtmögliche Flexibilität für die Durchführung der Tests zu gewährleisten wurde entschieden Apache JMeter zu verwenden und dafür eine eigens entwickelte Javakomponente einzusetzen.
Testumgebung
Für die Lasttests kamen acht Clients und ein Master zum Einsatz. Auf jedem Client wurden bis zu 50 IP-Adressen konfiguriert um die Simulation von Multiuserverhalten sicherzustellen. Der Master war für die globale Konfiguration und Steuerung des gesamten Testsystems mittels JMeter verantwortlich.
Implementierung
Zum Einbinden eigens entwickelter Java Testszenarien in JMeter wird grundsätzlich von der abstrakten Service API Klasse AbstractJavaSamplerClient geerbt und die Methode runTest implementiert.
RtspSampler ist verantwortlich für das Einlesen der Testparameter, das Erstellen des RtspClient und die Auswertung der Ergebnisse. Die Resultate werden nach Ablauf des Samples an die API übergeben um in JMeter visualisiert werden zu können. Die Klasse RtspClient ist der Kern der Anwendung und verantwortlich für die Kommunikation zwischen Client und Server und das Konsumieren der Videostreams. Für die Implementierung des RTSP Protokolls und die Verbindung zum Server wurden Java Sockets verwendet. Nachfolgend ein vereinfachtes Beispiel des Kommunikationsprotokolls.
- OPTIONS rtsp://x.x.x.x:x/x RTSP/1.0
+ RTSP/1.0 200 OK
+ Public: OPTIONS,DESCRIBE,SETUP,PLAY,TEARDOWN
- DESCRIBE rtsp://x.x.x.x:x/x RTSP/1.0
- CSeq: 2
+ RTSP/1.0 200 OK
+ Public: OPTIONS,DESCRIBE,SETUP,PLAY,TEARDOWN
- SETUP rtsp://x.x.x.x:x/x RTSP/1.0
+ RTSP/1.0 302 Moved Temporarily
+ Location: rtsp://x.x.x.x:x/y
- DESCRIBE rtsp://x.x.x.x:x/y RTSP/1.0
+ RTSP/1.0 200 OK
- SETUP rtsp://x.x.x.x:x/y RTSP/1.0
+ RTSP/1.0 200 OK
- PLAY rtsp://x.x.x.x:x/y RTSP/1.0
+ RTSP/1.0 200 OK
+ ANNOUNCE rtsp://x.x.x.x:x/y RTSP/1.0
+ Notice: 2101 End-of-Stream Reached
- TEARDOWN rtsp://x.x.x.x:x/y RTSP/1.0
+ RTSP/1.0 200 OK
Auswertung
Die Analyse der Netzwerkauslastung erfolgte mittels Systemtools. Die Status der einzelnen Requests des RTSP Verbindungsaufbaus konnten in JMeters Result Tree dargestellt werden. Entsprach z.B. der HTTP Response Status nicht dem erwarteten Ergebnis wurde der Request in JMeter rot und somit als Fehler gekennzeichnet. Auch die Antwortzeiten des Servers lassen sich einfach und ansprechend in JMeter visualisieren und auswerten.

Erkenntnisse
Das Apache JMeter API bietet Schnittstellen die das Entwickeln eigener Java Testsamples und deren Einbinden in JMeter erleichtern. Die Steuerung des Testsystem an einer zentralen Stelle erlaubt eine einfache und schnelle Konfiguration und Steuerung von mehreren Testmaschinen.
Links
RTSP RFC: http://www.ietf.org/rfc/rfc2326.txt
Apache JMeter: http://jmeter.apache.org/
August 2012, Peter Zellner