引入的依赖

		<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 格式的文本文件。

重点使用的函数是selectNodesselectSingleNode方法。

代码片段:

                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 格式如下: 相对路径-推荐使用

  1. 基本用法: //标签名[@属性名=值]
  2. 叠加用法 支持逻辑运算 and/or:

//代表相对路径

/代表绝对路径

//标签名[@属性名=值 and @属性名=值]

//标签名[@属性名=值 or @属性名=值]

//*[@id="virus-2020"] *为通配符
  1. xpath 复杂写法-包含:
//标签名[contains(@属性名/text(),”要包含的内容”)]

场景如:定位链接, 链接中带有动态 ID, 可用模糊匹配

5.xpath 复杂写法-元素文本匹配:

//标签名[text()=” “]

例如: //a[text()=”作业”]