我试图强调一个使用身份验证的相当简单的JSF Web应用程序,jMeter从不调用与按下的按钮关联的动作方法(在托管bean中) . 多个用户的身份验证(从CSV文件加载)完美运行(或者我认为) . 我将测试计划减少到最低限度,以便尝试调试这种情况 . 我有一个登录,一个带有commandLink的简单页面,其动作是ManagedBean中的一个方法(带有requestScope) .

我的xpath提取器值是://input [@id ='javax.faces.ViewState'] / @ value

我也尝试使用正则表达式提取器,使用表达式id = \“javax.faces.ViewState \”value = \“( . ?)\使用其中任何一个,它似乎工作正常(我曾经有一些viewState相关的问题 .

在他的POST请求(包含javax.faces.ViewState)上,我有$ 作为值(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>
                
</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>

先感谢您 .