【问题标题】:Regex the extract two string a text in jmeter正则表达式在jmeter中提取两个字符串一个文本
【发布时间】:2014-01-21 09:48:49
【问题描述】:

我想提取 VIEWSTATE 值和 EVENTVALIDATION 值,但我没有。如何从该文本中提取两个字符串(viewstate 和 eventvalidation)?

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="DAwNEAIAAA4BBQAOAQ0QAgAADgEFAQ4BDRACAAAOAQUTDgENEAIAAA4BBQUOAQ0QAhAMDA8DAQlEYXRhQm91bm=" />


 <!--
        <div class="FullWidth FooterMa
            <div class="container_24 clearf
                <div class="grid_14 clearfix eisk-info alpha suffix
                    <p class="grid_14 branding-x2 alpha" title="" style="text-align:rig

                    <p style="text-align:rig

                </
            </
        </
    -->

<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="GwABAAAA/////wEAAAAAAAAADwEAAAACAAAACAZFC0eJh7q7CwA=" />
    <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
    <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />

【问题讨论】:

  • Regex 不是您正在寻找的工具。它无法正确解析 HTML:stackoverflow.com/questions/1732348/… 您想查看 Xpath 和 HTML 解析器。您使用什么语言,这里的上下文是什么?
  • 我尝试用 jmeter 测试一个 .NET 应用程序,我必须关联:/ 所以我必须从文本中提取这个值。我只能做一个值,但我不能做两个字符串。例如:仅事件验证值:__EVENTVALIDATION" value="(.*?)"

标签: regex jmeter substring extract eisk


【解决方案1】:

用正则表达式解析 HTML 不是一个好主意,尤其是多行表达式,因为轻微的标记更改会导致您的所有努力都付诸东流。您可以尝试使用XPath Extractor Post Processor,如下所示:

  • 参考名称:test
  • XPath 查询://输入[@id='_VIEWSTATE']/@value | //输入[@id='_EVENTVALIDATION']/@value

您应该能够将 VIEWSTATE 称为 ${test_1} 并将 EVENTVALIDATION 称为 ${test_2} JMeter 变量。

Debug SamplerView Results Tree 监听器的组合对于查看 JMeter 属性和变量非常方便,可用于调试正则表达式和其他提取器。

【讨论】:

    【解决方案2】:

    试试这些正则表达式:

    <input.*id="__(?:VIEWSTATE|EVENTVALIDATION)"\s+value="([^"]+)"\s+/>
    

    演示

    http://regex101.com/r/iZ4kQ7

    【讨论】:

    • 我只想得到一个表达式。我只能提取视图状态或事件验证。但我想从一个正则表达式中提取两个子字符串。
    【解决方案3】:

    我遇到了同样的问题,但我使用 正则表达式提取器将它们分成 2 个单独的变量:

    对于事件验证:

    Reference Name: eventValidation
    Regular Expression: name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="(.+?)"
    Template: $1$
    Match No.(0 for Random): 1
    

    对于 VIEWSTATE:

    Reference Name: viewState
    Regular Expression: name="__VIEWSTATE" id="__VIEWSTATE" value="(.+?)"
    Template: $1$
    Match No.(0 for Random): 1
    

    将它们与 ${viewState} 和 ${eventValidation} 一起使用。

    【讨论】:

      【解决方案4】:

      第一个正则表达式提取器将抓取页面的 VIEWSTATE 元素并将其存储在 JMeter viewState 变量中。在 JMeter 中添加一个新的正则表达式提取器:

      • 右键单击您的线程组
      • 选择添加 -> 后处理器 -> 正则表达式提取器

      配置如下:

      • 参考名称:viewState
      • 正则表达式:name="__VIEWSTATE" id="__VIEWSTATE" value="(.+?)"
      • 模板:$1$
      • 数学编号:1
      • 默认值:错误

      将 EVENTVALIDATION 元素存储在 eventValidation 变量中的正则表达式提取器。再次:

      • 右键单击您的线程组
      • 选择添加 -> 后处理器 -> 正则表达式提取器

      配置如下:

      • 参考名称:eventValidation
      • 正则表达式:name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="(.+?)"
      • 模板:$1$
      • 数学编号:1
      • 默认值:错误

      现在我们已经提取了 viewState 和 eventValidation 值,我们需要在 POST 到我们的应用程序时包含它们。在我的运行中,这只发生在登录页面上。

      • 在测试计划的记录控制器中选择您的登录页面 POST,
      • 将 __VIEWSTATE 参数设置为 ${viewState},
      • 将 __EVENTVALIDATION 参数设置为 ${eventValidation}。

      您需要对所有具有这些查询/发布参数的请求执行此操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-22
        • 2016-02-14
        • 1970-01-01
        • 2012-05-30
        相关资源
        最近更新 更多