12. Februar 2008

JMeter und JSF

Problem: Bei JSF gibt es die Besonderheit, dass auf der Clientseite in einem "hidden field" ein ViewState gespeichert wird. Dieser ermöglicht dem Server die Zuordung zu einem ComponentTree. Der Inhalt dieses Feldes variiert bei jedem Aufruf und muss immer mitgeschickt werden. Mit einem Standard-JMeter-Test ist dies nicht möglich.

Lösung: Durch die Verwendung eines "Regular Expression Extractor" kann immer der richtige Feldinhalt mitgeschickt werden.

Schritt 1:

Bei JMeter muss in der Thread Gruppe ein "Regular Expression Extractor" angelegt werden mit folgenden Eigenschaften:

Für die SUN-RI:
  • Respons Field to check: body
  • Reference name: jsfViewState
  • Regular Expression: <input type="hidden" name="com\.sun\.faces\.VIEW" id="com\.sun\.faces\.VIEW" value="(.+?)" />
  • Template: $1$
  • Match No.: 0
  • Default Value: leer
Für Apache MyFaces:
  • Respons Field to check: body
  • Reference name: jsfViewState
  • Regular Expression: <input type="hidden" name="javax\.faces\.ViewState" id="javax\.faces\.ViewState" value="(.+?)" />
  • Template: $1$
  • Match No.: o
  • Default Value: leer
Schritt 2:

Bei jeder aufgezeichneten JSP im Recording Controller muss unter "Parameter die mit dem Request gesendet werden" die oben definierte Variable gesetzt werden:
  • bei SUN RI
    • Das Feld "com.sun.faces.VIEW" mit dem Wert "${jsfViewState}" überschrieben werden
  • bei Apache MyFaces
    • Das Feld "javax.faces.ViewState" mit dem Wert "${jsfViewState}" überschrieben werden

2 Kommentare:

Unknown hat gesagt…

Danke funktioniert hervorragend.

Dreamboy hat gesagt…

Hallo ,
ich bekomme trotz diese Anpassungen mehrere Exceptions wenn ich die Lasttests durchführe:

javax.faces.application.ViewExpiredException: viewId:/presentation/task.jsf - View /presentation/task.jsf could not be restored.

ich benutze jsf mit Facelets.

muss ich noch was anpassen?ich bin am verzweifeln!