我正在努力寻找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
,我的脚本仍然失败。还有其他方法吗?
谢谢
答案 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提供的更好的技巧:
RTFM仍然很新潮,不是吗? : - )注意:尽管上述表达式有效,但使用效率更高 以下表达式:name =“file”value =“([^”] +)“&gt; where [^”] - 意味着匹配任何东西,除了“在这种情况下,匹配的引擎可以 一见到第一个就停止看,而在之前看到 如果引擎必须检查它是否找到“&gt;而不是说”&gt;。
答案 1 :(得分:1)
简单地Don't use regular expressions to parse HTML,一个小的标记更改,添加或替换属性,在下一行渲染标记的一部分,无论如何,你的测试都被破坏了。
你有:
//input[@name='javax.faces.ViewState']/@value
input[name=javax.faces.ViewState]
,使用value
作为属性