我试图强调一个使用身份验证的相当简单的JSF Web应用程序,jMeter从不调用与按下的按钮关联的操作方法(在托管bean中)。 多个用户的身份验证(从CSV文件加载)完美运行(或者我认为)。我将测试计划减少到最低限度,以便尝试调试这种情况。 我有一个登录名,一个带有commandLink的简单页面,其操作是ManagedBean中的一个方法(带有requestScope)。
我的xpath提取器值是: //输入[@id =' javax.faces.ViewState'] / @值
我还尝试使用正则表达式提取器,使用表达式id = \" javax.faces.ViewState \" value = \"(。+?)\对于它们中的任何一个,它似乎工作正常(我曾经有一些与viewState相关的问题。
在他的POST请求(包含javax.faces.ViewState)上,我有$ {jsfViewState}作为值(jsfViewState是一个用户定义的变量,用于保存从前一个GET方法保存的viewState)。
带有commandLink的页面是(注意我故意硬编码了这个值,以便更容易地识别问题):
<h:body>
<ui:composition template="/template/template.xhtml">
<ui:define name="content">
<c:set value="Category" target="#{menu}" property="title"/>
<ui:repeat value="#{category.list}" var="cat">
<h:form id="categoryForm">
<h:commandLink id="btnOrd" action="#{product.placeOrder(1)}">COMPRAR</h:commandLink>
</h:form>
<br/>
</ui:repeat>
</ui:define>
</ui:composition>
</h:body>
managedBean:
@Named("product")
@RequestScoped
public class ProductMBean {
@Inject
private ProductEBean productEBean;
@Inject
private UserProductEBean userProductEBean;
public List<Product> getList(){
return productEBean.findAll();
}
private void addMessage(FacesMessage message){
FacesContext.getCurrentInstance().addMessage(null, message);
}
public String placeOrder(long id){
userProductEBean.createNewOrder(id);
Product product = productEBean.findById(id);
addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "Your order of " + product.getName() + "has been processed. Thank you for using our service.", null));
return "success";
}
没有创建新订单(尽管如果我手动执行它会完美运行)。 commandLink的不同调用(例如,使用函数参数进行页面导航)正在工作,jMeter通过页面进行导航。
除了ViewState之外传递给POST请求的参数是:
**Name** **Value**
j_idt${nb.rampup}6:0:categoryForm j_idt${nb.rampup}6:0:categoryForm
j_idt${nb.rampup}6:0:categoryForm:btnOrd j_idt${nb.rampup}6:0:categoryForm:btnOrd
关于jMeter:
The request
POST http://localhost:8080/easuy-war/easuy/categories/list.xhtml
POST data:
j_idt26%3A0%3AcategoryForm=j_idt26%3A0%3AcategoryForm&javax.faces.ViewState=&j_idt26%3A0%3AcategoryForm%3AbtnOrd=j_idt26%3A0%3AcategoryForm%3AbtnOrd
Cookie Data:
$Version=0; JSESSIONID=f24cb939085c6bc761efdc76f67b; $Path=/easuy-war
浏览器的相关信息:
<form id="j_idt13" name="j_idt13" method="post" action="/easuy-war/easuy/categories/list.xhtml" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="j_idt13" value="j_idt13" />
<input type="hidden" name="javax.faces.ViewState" id="j_id1:javax.faces.ViewState:0" value="-9105321245957774265:-3870715546023364251" autocomplete="off" />
</form>
提前谢谢。