Jmeter和JSF,未调用commandLink操作的托管bean方法

时间:2014-06-03 00:40:13

标签: java jsf jmeter viewstate managed-bean

我试图强调一个使用身份验证的相当简单的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>

提前谢谢。

0 个答案:

没有答案