如何在JMeter中用正则表达式忽略HTML标签并提取内容与XML对比?
解决JMeter中提取
内容时忽略斜体标签的问题
嘿,我来帮你搞定这个匹配失败的问题!你遇到的核心问题是正则表达式把<p>标签里的<i>/</i>也一起提取了,导致和XML里去掉<italic>后的纯文本对不上。下面给你几个实用的解决办法:
方法1:改进正则表达式 + 字符串替换
如果坚持用正则提取,可以先把<p>内的所有内容(包括<i>标签)提取出来,再通过替换去掉斜体标签:
- 先用这个正则提取整个
<p>区块:(?s)<p>(.*?)</p>- 解释:
(?s)让.匹配换行符,.*?是非贪婪匹配,确保只匹配到第一个</p>
- 解释:
- 然后在Beanshell断言里对提取到的变量做替换:
// 获取正则提取的内容 String htmlContent = vars.get("extractedPContent"); // 去掉所有<i>和</i>标签 String cleanedHtml = htmlContent.replaceAll("<\\/?i>", ""); // 准备XML侧的目标内容(去掉<italic>标签后的文本) String targetXmlContent = "testing contenttesting content"; // 对比判断 if (cleanedHtml.equals(targetXmlContent)) { AssertionResult.setFailure(false); } else { AssertionResult.setFailure(true); AssertionResult.setFailureMessage(String.format("内容不匹配:预期[%s],实际[%s]", targetXmlContent, cleanedHtml)); }
方法2:用CSS/JQuery提取器(更推荐)
处理HTML内容,正则不如专门的HTML解析工具靠谱。JMeter自带的CSS/JQuery提取器可以直接提取文本内容,自动忽略标签:
- 添加CSS/JQuery提取器到你的请求下
- 配置参数:
- 引用名称:比如
cleanedPText - CSS/JQuery表达式:
p(选中所有<p>标签) - 属性:
text(提取标签内的纯文本,自动忽略子标签)
- 引用名称:比如
- 这样提取到的
cleanedPText就是testing contenttesting content,直接和XML的目标内容对比就行,不用再处理标签!
为什么你之前的正则不行?
- 你用的
<p>(.*)</p>是贪婪匹配,会把<p>到</p>之间的所有内容(包括<i>text</i>)都捞出来,自然和XML的纯文本对不上 <p>(.*)<i这种写法只提取到<i>之前的内容,后面的testing content会被丢掉,当然也匹配失败
内容的提问来源于stack exchange,提问作者la1
相关产品推荐
相关产品推荐

