Jmeter正则表达式

时间:2017-03-13 20:16:34

标签: regex jmeter beanshell

我正在努力寻找Jmtere动态输入值的解决方案,它返回一个匹配的值,但是带有子字符串。

override var traitCollection: UITraitCollection {
    if UI_USER_INTERFACE_IDIOM() == .pad {
            return super.traitCollection
    } else {
        let horizontal = UITraitCollection(horizontalSizeClass: .compact)
        let vertical = UITraitCollection(verticalSizeClass: super.traitCollection.verticalSizeClass)
        return UITraitCollection.init(traitsFrom: [horizontal, vertical])
    }
}

我试图获得“07JgPgLP3e1jdtHd6s1UxDoKEaCU362MYbfU48r9paGrBDfo”此值。我重新表达:

</script></span><input type="hidden" name="j_id_s_1_SUBMIT" value="1" /><input type="hidden" name="javax.faces.ViewState" id="j_id__v_0:javax.faces.ViewState:1" value="07JgPgLP3e1jdtHd6s1UxDoKEaCU362MYbfU48r9paGrBDfo" autocomplete="off" /></form>

referencename:view

它返回:

j_id_s_1_SUBMIT" value="(.+)"

我试过Match count: 1 Match[1][0]=j_id_s_1_SUBMIT" value="1" /><input type="hidden" name="javax.faces.ViewState" id="j_id__v_0:javax.faces.ViewState:1" value="07JgPgLP3e1jdtHd6s1UxDoKEaCU362MYbfU48r9paGrBDfo" autocomplete="off" Match[1][1]=1" /><input type="hidden" name="javax.faces.ViewState" id="j_id__v_0:javax.faces.ViewState:1" value="07JgPgLP3e1jdtHd6s1UxDoKEaCU362MYbfU48r9paGrBDfo" autocomplete="off ,我的脚本仍然失败。还有其他方法吗? 谢谢

2 个答案:

答案 0 :(得分:1)

name="j_id_s_1_SUBMIT"\svalue="(.+?)"\s/>

如果你没有告诉它在第一场比赛后停止(?.+),那么它将尽可能广泛匹配 - 这就是发生的事情。

PS 但是,这是在你的表达之后,你会得到1,而不是你需要的那个令牌。

所以,为了得到你的东西,你最好做

id="j_id__v_0:javax\.faces\.ViewState:1"\svalue="(.+?)"\sautocomplete

PPS 您的HTML似乎格式正确,为什么不使用XPath提取器呢?您当时不会依赖于响应中HTML的属性顺序和/或整体结构。

PPPS 以下是官方JMeter doc提供的更好的技巧:

  

注意:尽管上述表达式有效,但使用效率更高   以下表达式:name =“file”value =“([^”] +)“&gt; where [^”] -   意味着匹配任何东西,除了“在这种情况下,匹配的引擎可以   一见到第一个就停止看,而在之前看到   如果引擎必须检查它是否找到“&gt;而不是说”&gt;。

RTFM仍然很新潮,不是吗? : - )

答案 1 :(得分:1)

简单地Don't use regular expressions to parse HTML,一个小的标记更改,添加或替换属性,在下一行渲染标记的一部分,无论如何,你的测试都被破坏了。

你有:

  • XPath Extractor,相关的XPath查询就像//input[@name='javax.faces.ViewState']/@value
  • 一样简单
  • CSS/JQuery Extractor,选择将为input[name=javax.faces.ViewState],使用value作为属性