本主题提供有关在以下产品 JSON 断言器 和 JSON 数据库 和工具中选择 JSON 元素的信息 Virtualize。
本章包含:
修改元素
对于使用 JSON 和选择节点,Virtualize 在“底层”构造一个 XML DOM,以便使用 Xpath 进行节点选择。XML 结构与 JSON 结构非常匹配。除下列情况外,所有名称及值均相同:
档的根节点在 Xpath 中称为
root
,但在 JSON 文档中是对象或数组引用。它以{}
或[]
的形式出现在Virtualize JSON 树。数组项在 Xpath 中称为
item
,但在 JSON 文档中未命名(由于是数组元素)。它们以[0]
、[1]
等的形式出现在Virtualize JSON 树。包含 XML 元素名称中非法字符的 JSON 名称将被转换为创建合法的 XML 元素名称,以便在 XPaths 中使用。Virtualize JSON 树将在 JSON 文档中显示原始名称。
当选择 JSON 树节点时,Virtualize 还要创建一个对应的 XPath。
如果需要手动构造 Xpath,并且不确定 XPath 中使用什么节点名,我们建议使用 JSON 树来选择节点。这将生成 XPath,然后可以查看和修改它以满足你的特定需求。
修改选定的 XPath 设置
单击时打开的对话框中有以下选项 Change Element (针对 JSON 断言器)或 Modify (针对 JSON 数据库)。
选定的 XPath 选项
- XPath: 显示表示要提取的值的 XPath。如果正在寻找更通用的 XPath,则可以很容易地在列表索引中键入不同的数字。例如,如果只对第二次出现感兴趣,则可以将
[1]
更改为[2]
。编辑 XPath 文本之后,单击 Evaluate XPath 按钮来验证 Xpath 格式。 - Extract: 允许精确地指定提取的内容。
- Entire Element: 选择 Entire Element 将输出完整的 XPath。例如,
XPath/Parent
将输出<parent>VALUE</parent>
。你可以配置 Index to extract。默认值为1
。在元素出现多次的情况下,此控件控制提取哪个元素。 - Content Only: 选择 Content Only 将值输出值。例如,
XPath/Parent
将输出VALUE
。可以配置 Text Content,提取所选元素的文本内容,或者配置 All Child Nodes,提取所选定元素的所有子节点。
- Entire Element: 选择 Entire Element 将输出完整的 XPath。例如,
- XPath Evaluation: 单击 Evaluate Xpath 按钮显示对预期消息应用 Xpath 表达式的结果。
数据源列选项(仅限数据库)
- Custom column name: 指定存储值的数据源列名。除非指定了其他位置,否则值存储在内部数据源中(比如,如果选择 Writable data source column or Variable)。这是你将在其他地方引用该值时使用的名称。例如,如果该值存储在名为 My Value的数据源列中,则应选择 My Value 作为参数化值。也可以引用其作为文字视图或多响应视图中的
${My Value}
。 Writable data source column:告诉Virtualize 将值存储在可写数据源列中。。这允许存储数组形式的值。然后,其他工具可以遍历存储值。
- Write to all columns that match: 此选项允许将值保存到包含指定字符串的名称的所有列中。当提取消息中的多个值时,每个值都将跨匹配的所有列写入。相反,如果选择一个可写数据源列(上面的选项),那么值将跨多行写入列。
Variable: 此选项允许将值保存在指定的变量中,以便可以跨当前测试、响应程序或操作套件重用该值。变量必须已经被添加到当前套件中,如 在 Virtualize 中定义变量。以这种方式设置的任何值都将覆盖套件属性面板中指定的任何局部变量值。
对于数据头,可以配置数据头名称和上述列出的数据源列选项。
参数化 XPaths
可以参数化 Xpaths 以引用测试或响应程序套件变量、环境变量和数据源值。引用变量的语法为 ${myVariableName}
。引用数据库值和数据源值的语法为:${myColumnName}
。
例如,如果 ${XPath Key}
是数据源列名,则可以使用以下内容:
/*[local-name(.)="bookstore" and namespace-uri(.)=""]/*[local-name(.)="book" and namespace-uri(.)=""][child::node()[local-name(.)="title" and text()="${XPath Key}"]]]