Bom dia,
Estou usando o JMeter pela primeira vez para testar uma aplicação feita em JSF 2 rodando em Tomcat 6, e estou com problemas para enviar um formulário. Dei uma consultada em alguns sites, configurei com os seguintes itens:
Thread Group, configurando o número de testes e a repetição;
HTTP Authorization Manager, onde configurei o Manager do Tomcat e criei também um HTTP Request (Sampler) mapeado para a URL /manager/status;
HTTP Cookie Manager, com um parâmetro:
name: jsessionid
value: 1
domain, path: deixei em branco
secure: desmarcado
Regular Expression Extractor, com a seguinte configuração:
Reference Name: jsfViewState
Regular Expression: <input type="hidden" name="javax\faces\ViewState" id="javax\faces\ViewState" value="(.*?)" />
Template: $1$
E um View Results Tree para visualizar os dados, cabeçalho, etc.
Na aplicação: tenho uma página index.xhtml, e um formulário com dois campos: um código e um tipo (o usuário deve preencher um ou outro). Estou utilizando o commandLink para fazer a requisição:
<h:form id="meuForm" prependId="false">
<table width="750" border="0" cellspacing="0" cellpadding="0" class="tableConsulta">
<tr>
<td valign="top">
<h:outputText value="Codigo:" /><br />
<p:inputText value="#{meuBean.codigo}" id="codigo" size="16" />
</td>
<td valign="top">
<h:outputText value="Tipo:" /><br />
<p:inputText value="#{meuBean.tipo}" id="tipo" size="30" />
</td>
<td>
<h:commandLink style="margin-left: 0px" id="pesquisar" action="#{meuBean.pesquisar}" >
<h:graphicImage alt="Pesquisar locações" value="/resources/botoes/pesquisar.jpeg" />
</h:commandLink>
</td>
</tr>
</table>
</h:form>
Meu último teste com o JMeter foi criar dois HTTP Request para esta index.xhtml, um com GET e o outro POST, só para ver o que ocorria. No POST, configurei dois parâmetros:
[list]codigo (é o nome de um dos inputs no formulário): 123456[/list]
[list]javax.faces.ViewState: ${jsfViewState}[/list]
Mas, quando rodo o teste, ele não submete o formulário e não executa a pesquisa. Se eu removo o HTTP Request GET e executo novamente o teste (só com o POST), ocorre a exceção abaixo:
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1937)
at com.sun.faces.renderkit.ServerSideStateHelper.getState(ServerSideStateHelper.java:263)
at com.sun.faces.renderkit.ResponseStateManagerImpl.getState(ResponseStateManagerImpl.java:97)
at com.sun.faces.application.view.StateManagementStrategyImpl.restoreView(StateManagementStrategyImpl.java:217)
at com.sun.faces.application.StateManagerImpl.restoreView(StateManagerImpl.java:177)
at com.sun.faces.application.view.ViewHandlingStrategy.restoreView(ViewHandlingStrategy.java:119)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.restoreView(FaceletViewHandlingStrategy.java:438)
at com.sun.faces.application.view.MultiViewHandler.restoreView(MultiViewHandler.java:144)
at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:182)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:107)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)
Sem nenhuma classe da minha aplicação aparecer no stacktrace.
Alguém tem uma orientação para este cenário?
Obrigada.