2013-03-11 69 views
-2

我尝试通过使用JMetter提交表单(提交100个数据)来测试我的保存功能。在我的函数中,首先我将数据保存到数据库。但是因为有太多的数据保存了重复,所以我试着写数据。我得到了原因,当我捕捉到JMetter提交的数据时,重复的数据就出现了。我想问,为什么提交的数据是重复的,而当我使用wireshark检查提交的请求(post)数据时,没有由JMetter发送的重复。这意味着问题在于struts。如何解决这个问题,谢谢。在动作类Duplicate Post Data Struts

功能代码形式展现

public String renderAddMaintenanceItemForm(){ 
    maintenanceItem = new MaintenanceItemDto(); 
    return SUCCESS; 
} 

JSP表单代码

<%@ taglib prefix="s" uri="/struts-tags"%> 
<script type="text/javascript"> 
jQuery(document).ready(function() { 
    jQuery("#frmAddMaintenanceItem").validate({ 
     submitHandler: function(form) { 
      return postForm(form, "savemaintenanceitem", "listmaintenanceitem", true); 
     } 
    }); 
}); 
</script> 

<h4 class="widgettitle nomargin shadowed">Add Maintenance Item</h4> 
<div class="widgetcontent bordered shadowed nopadding"> 
<form id="frmAddMaintenanceItem" class="stdform stdform2"> 
    <s:hidden name="maintenanceItem.id" value="%{maintenanceItem.id}"/> 
    <s:if test="maintenanceItem.criteria == 'perma'"> 
     <s:hidden name="maintenanceItem.criteria" value="%{maintenanceItem.criteria}"/> 
     <p> 
      <label>Item Name</label> 
      <span class="field"> 
       <s:textfield name="maintenanceItem.name" value="%{maintenanceItem.name}" cssClass='input-xlarge required chardigit' minlength="5" maxlength="50"/> 
      </span> 
      </p> 
    </s:if> 
    <s:else>  
      <p> 
       <label>Tipe</label> 
       <span class="field"> 
        <select name="maintenanceItem.criteria" class="uniformselect required"> 
         <option>Select</option> 
          <option value='event' <s:if test="maintenanceItem.criteria == 'event'">selected="selected"</s:if>> 
           Event 
          </option> 
          <option value='time' <s:if test="maintenanceItem.criteria == 'time'">selected="selected"</s:if>> 
           Time 
          </option> 
        </select> 
       </span> 
      </p> 
      <p> 
       <label>Item Name</label> 
       <span class="field"> 
        <s:textfield name="maintenanceItem.name" value="%{maintenanceItem.name}" cssClass='input-xlarge required chardigit' minlength="5" maxlength="50"/> 
       </span> 
      </p> 
      <p> 
       <label>Normal Treshold (KM)</label> 
       <span class="field"><s:textfield name="maintenanceItem.normalTreshold" value="%{maintenanceItem.normalTreshold}" cssClass="input-xxlarge required"/></span> 
      </p> 
      <p> 
       <label>Max Treshold (KM)</label> 
       <span class="field"><s:textfield name="maintenanceItem.maxTreshold" value="%{maintenanceItem.maxTreshold}" cssClass="input-xxlarge required"/></span> 
      </p> 
    </s:else> 
    <p> 
     <label>Note</label> 
     <span class="field"><s:textfield name="maintenanceItem.note" value="%{maintenanceItem.note}" cssClass="input-xxlarge required"/></span> 
    </p> 
    <p class="stdformbutton"> 
     <button class="btn btn-primary">Submit </button> 
     <button type="reset" class="btn">Reset </button> 
    </p> 
</form> 
</div> 

这个功能,以节省用户输入(在这种情况下,我只是把它写到控制台)

public String saveMaintenanceItem(){ 
    System.out.println(maintenanceItem.getName()); 
    /*messageDto = carService.saveMaintenanceItem(maintenanceItem); 
    actionStatus = messageDto.getResult(); 
    SessionManager.serviceReturnToSession(session(), messageDto);*/ 
    return SUCCESS; 
} 

当我检查时,它就像jmetter忽略窗体上的JavaScript。 Jmetter直接将数据发布到操作类。这样对吗?我仍然混淆为什么它仍然会得到重复的数据。

+1

首先告诉我你做了什么和你的代码 – 2013-03-11 08:00:01

回答

0

似乎在称为postForm的JavaScript函数中,还有另一个表单提交。这可能会导致双重表单提交。如果您找不到问题,请剪切jsp页面块的各个部分,然后检查并提交给操作类。

+0

但是当我检查时,它就像jmetter忽略了窗体上的javascript。 Jmetter直接将数据发布到操作类。 – 2013-03-13 04:08:36

+0

您可以从html中删除div类并再次进行测试。我最后一次遇到这个问题是因为我包含在jsp页面中的可滚动div。使用表单提交的一行代码向服务器发送请求并首先进行测试,然后添加更多代码,直到您获得双重提交。 – zawhtut 2013-03-14 05:13:20