使用Dom4j配合xpath解析jmeter脚本文件
引入的依赖
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.2.0</version>
</dependency>
注意:使用 dom4j 配合 xpath 的时候,必须要引入 jaxen
依赖项,否则无法使用 xpath.
如果没有添加依赖的话,会报如下错误:
如果没有添加的话 会出现以下错误
* Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/NamespaceContext
* at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230)
* at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207)
* at org.dom4j.tree.AbstractNode.selectSingleNode(AbstractNode.java:183)
解析 jmeter 脚本文件
jmeter 的脚本文件本质上是 xml 格式的文本文件。
重点使用的函数是selectNodes
或selectSingleNode
方法。
代码片段:
Element root = doc.getRootElement();
// 提取 stringProp节点中 属性 name="query" 并且 节点文本中含有 "INSERT INTO"文本的node list
List<Node> nodes = root.selectNodes("//*/stringProp[@name=\"query\" and contains(text(),\"INSERT INTO \")]");
xpath 表达式的写法
Xpath 格式如下: 相对路径-推荐使用
- 基本用法: //标签名[@属性名=值]
- 叠加用法 支持逻辑运算 and/or:
//代表相对路径
/代表绝对路径
//标签名[@属性名=值 and @属性名=值]
//标签名[@属性名=值 or @属性名=值]
//*[@id="virus-2020"] *为通配符
- xpath 复杂写法-包含:
//标签名[contains(@属性名/text(),”要包含的内容”)]
场景如:定位链接, 链接中带有动态 ID, 可用模糊匹配
5.xpath 复杂写法-元素文本匹配:
//标签名[text()=” “]
例如: //a[text()=”作业”]