【问题标题】:JMeter, post ALL form dataJMeter,发布所有表单数据
【发布时间】:2013-01-29 09:53:48
【问题描述】:

我正在尝试使用 JMeter 对网站的编辑功能进行性能测试。 但是,我尝试测试表单中的 200 多个项目的步骤。 我显然希望所有项目都与显示给用户的表单相同(不包括我打算更改的表单)。我知道这可以使用正则表达式提取器(请参阅问题JMeter - MVC : Form posting model that contains dymanic data)但是这需要为表单中的每个元素手动设置,这是巨大的!

有没有办法让 JMeter 回发所有表单元素,而不必单独设置每个元素?或任何插件来做到这一点?

任何帮助将不胜感激。

【问题讨论】:

    标签: performance http jmeter performance-testing jmeter-plugins


    【解决方案1】:

    定义正则表达式提取器后,

    step1) 使用所有值创建“Debug PostProcessor”= true

    • Jmeter 属性 = true
    • Jmeter 变量 = true
    • 采样器属性 = true
    • 系统属性 = true

    当您检查此后处理器时,您会在列表中找到所有后参数值。尝试找到适合与 Post 请求一起发送的请求,并使用 API 设置 paramName 和 paramVal,如下所示。

    我使用 firebug 找出所有必需的 post 参数。要知道如何使用它,请点击此链接 http://community.blazemeter.com/knowledgebase/articles/80479-how-to-use-jmeter-for-login-authentication

    step2) 使用此脚本创建“Beanshell 预处理器”。其中“hiddenList”是正则表达式提取器的参考名称。

    log.info("=====================");
    
             count =  Integer.valueOf (vars.getObject("hiddenList_matchNr") ) ;
    
            log.info("Number of hidden fields in previous sampler: " + count);
    
    
    
            for (i=1; i <= count; i++) { 
                paramName = vars.getObject("hiddenList_"+ i + "_g1");
                paramVal = vars.getObject("hiddenList_"+ i + "_g2");  
                log.info("Adding request parameter: " + paramName + " = " + paramVal);
                sampler.addArgument(paramName, paramVal);
            } 
    
            log.info("=====================");
    

    希望这会有所帮助。

    【讨论】:

    • Disco 3 的回答是一个不错的选择。但是,当您的机器上有公司代理服务器限制时,这种方法很有用。记录的脚本为 HTTP 请求提供了所有误导性数据。除此之外,当您的脚本开始变大时,很难从录制的脚本中删除不必要的操作。我会把它留给用户。
    • 在“添加正则表达式提取器”中迷失了我...你们没有人读过stackoverflow.com/a/1732454/228732 - 我希望有一个使用实际 html 解析器的 FormData 提取器...
    【解决方案2】:

    另一种方法是使用 JMeter 的代理功能。

    您可以使用 JMeter(与其自动提交 HTTP 请求的能力不同)在浏览器中记录您的操作。然后,您可以访问该站点并提交表格。 Jmeter 将记录一个 HTTP 请求采样器,提取所有表单元素并使用您提交的值填充。如果您在 JMeter 测试中需要一些不同的值,对于在浏览器中提交的内容,您可以将它们编辑为正确的值。完成后,您可以将其保存为测试计划,然后运行它。

    这只有在您想编辑少量元素时才真正起作用。如果您需要每个元素提交的值与在浏览器中提交的值不同,那么上述方法会更好。

    http://jmeter.apache.org/usermanual/jmeter_proxy_step_by_step.pdf

    【讨论】:

      【解决方案3】:

      好问题。经过大量搜索,我发现奇怪的是 Jmeter 不能更优雅地支持这一点,并且需要相当多的解决方法来简单地回发在之前的 GET 请求中收到的表单数据。

      我发现 ShGiji 的回答有点难以理解,不得不四处寻找设置正则表达式提取器等。以下是我采取的步骤。

      1. 设置正则表达式提取器,从 GET 请求的响应中检索参数

        要强制 Jmeter 从正则表达式提取器生成列表,匹配编号应设置为 -1(如文档中的 here 所述)。请注意,您还需要捕获参数名称和值,因此您最终应该得到类似这样的内容...

      1. 可选择添加调试后处理器。如果这样做,您应该能够确认存在带有您选择的参考名称前缀的变量(在上面的示例中,您应该期望变量 fieldList_matchNrfieldList_1_g1fieldList_1_g2 等)

      2. 添加 Beanshell 后处理器,将参数添加到后续 POST 请求的表单数据中

        以下脚本适用于 Jmeter 2.11(撰写本文时的最新版本)。注意使用Integer.parseInt 而不是Integer.valueOf

      Beanshell 后处理器:

      log.info("=====================");
      
      count = Integer.parseInt(vars.getObject("fieldList_matchNr"));
      log.info("Number of order details fields: " + count);
      
      for (i=1; i <= count; i++) { 
        paramName = vars.getObject("fieldList_" + i + "_g1");
        paramVal = vars.getObject("fieldList_" + i + "_g2");  
        log.info("Adding request parameter: " + paramName + " = " + paramVal);
        sampler.addArgument(paramName, paramVal);
      }
      
      log.info("=====================");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-23
        • 2020-05-15
        • 2013-12-03
        • 1970-01-01
        • 2018-08-20
        • 2014-04-25
        • 1970-01-01
        相关资源
        最近更新 更多