源路径表达式
概述
验证和设置可变步骤两者都允许用户指定源。源总是引用a变量应将其用作用于验证或提取的值的来源。
如果希望使用源变量的完整值,可以使用全部价值选项,并使用未修改的值
如果Source是一个复杂的值(如JSON或XML),并且用户只需要使用该值的一部分,则可以使用Source Path字段提取Source的所需部分。如果用户需要提取非JSON或XML文本的一部分,可以使用正则表达式。
支持api的Test StudioJSONPath,XPath和正则表达式对于路径表达式。
XPath
从R1 2017版本开始,api的Test Studio支持XPath表达式。这里有一些有用的链接,您可以在其中阅读更多关于XPath语法的内容:
JSONPath
Test Studio for api支持基本的JSONPath表达式。可以找到描述JSONPath规范的原始文章在这里。但是请注意,不同的JSONPath实现以不同的扩展和变化覆盖该规范。Test Studio for api支持JSONPath规范中描述的大部分表达式,但不是全部。看到当前的JSONPath限制下面是更多信息。
请看下面的一些例子。
当前的JSONPath限制
在api的Test Studio中使用JSONPath可以实现的场景有一定的限制。
- JSON数组的长度不能使用JSONPath(例如:$.users.length())来检索。你可以使用编码的步骤来解析JSON值并获取其集合的长度(您可以添加一个参考来Json。网并使用它来解析json值)。
- api的Test Studio目前不支持用脚本表达式替换属性名或索引。例如,这样的表达式是:
$ .store.book [(@.length-1)]
。支持的最后一个表达式的替代方案是:$ .store.book [1:]
。
例子
作为在Test Studio for api中支持的JSONPath表达式的一个示例,我们将使用与中提供的相同的书店示例JSONPath规范。
{“商店”:{“书”:[{“类别”:“参考”,“作者”:“奈杰尔·里斯”,“标题”:“世纪名言”,“价格”:8.95},{“类别”:“小说”,“作者”:“伊夫林·沃”,“标题”:“荣誉之剑”,“价格”:12.99},{“类别”:“小说”,“作者”:“赫尔曼·梅尔维尔”,“标题”:“白白”,“isbn”:“0-553-21311-3”,“价格”:8.99},{“类别”:“小说”,“作者”:“j·r·r·托尔金”,“标题”:“指环王”,“isbn”:“0-395-19395-8”,“价格”:22.99}],“自行车”:{“颜色”:"red", "price": 19.95}}
XPath | JSONPath | 结果 |
---|---|---|
/存储/书/作者 | $ .store.book [*] .author | 书店里所有书的作者 |
/ /作者 | 美元. .作者 | 所有作者 |
/存储/ * | .store美元。* | 一切都在储备中 |
/ /价格/商店 | .store美元价格. . | 店里所有东西的价格 |
/ / book [3] | $ . .书[2] | 第三本书 |
/ / book [last ()] | $ . .书[1:] | 最后一本书按顺序(注意“$ . .书[(@.length-1)] 表达式在Test Studio中不支持) |
/ / book [position () < 3] | 美元. .书[0,1] 美元. .书(2): |
前两本书 |
/ /书(isbn) | $ . .书[? (@.isbn)] | 过滤所有具有isbn号的图书 |
/ / book [price < 10] | 美元. .书(? (@.price < 10)) | 过滤所有价格低于10美元的书 |
/ / * | 美元. . * | XML文档中的所有元素。JSON结构的所有成员 |
检查示例项目有关路径表达式的更多实际示例。
正则表达式
中使用正则表达式路径领域的变量设置步骤或验证当您需要提取变量值的一部分时。
在构建正则表达式时,您应该记住,用于api的Test Studio是基于。net的,因此在正则表达式处理方面共享框架的特性和限制。你可以看到在这里有关支持的regex特性的快速参考。看到在这里来比较。net与其他框架/语言所支持的特性。
仅限第一场比赛
如果源代码的多个部分与正则表达式匹配,那么Test Studio for api将只返回第一个出现的部分。如果需要提取匹配的一些非第一次出现,则需要调整正则表达式以首先匹配它。
正则表达式将始终从左向右应用,因此您将获得模式的最左侧匹配。
例子:
如果你的Source包含以下字符串:
Lorem xxx111xxx ipsum xxx222xxx dolor sit met xxx333xxx
这种模式:
xxx (\ d {3}) xxx
将返回:
xxx111xxx
提取部分正则表达式匹配
如果只需要提取匹配的一部分,可以使用命名组在您的模式中(如"(?
例子:如果你想从Location头中提取一个id_token,例如:
地点:https://sampleservice.com/ id_token = SomeTokenValue&token_type = Bearer&expires_in = 3600
下面是一个比较表,根据你的正则表达式,你可能会收到的结果:
描述 | 正则表达式模式 | 结果 |
---|---|---|
使用命名组 | id_token = (? < IdToken > [^ &] +) & | SomeTokenValue |
使用多个命名组 | id_token = (? < IdToken > [^ &] +) &token_type = (? < TokenType > \ w +) & | SomeTokenValue |
使用未命名的组 | id_token = ([^ &] +) & | id_token = SomeTokenValue& |
混合命名组和未命名组 | id_token = ([^ &] +) &token_type = (? < TokenType > \ w +) & | 持票人 |
区分大小写
默认情况下,正则表达式区分大小写。如果在应用regex模式时需要忽略大小写,则可以包含(我)?选项使其不区分大小写。(请参阅有关正则表达式选项的更多信息在这里).例子:
正则表达式模式 | 结果 |
---|---|
(?我)测试工作室 | 将匹配测试工作室和测试工作室 |
如果只需要部分表达式不区分大小写,则需要添加(我)?在不区分大小写模式的开头添加(? -我)你需要关闭这个选项。如果你跳过“关闭”选项(? -我),然后是(我)?选项将应用到模式的末尾。例子:
正则表达式模式 | 结果 |
---|---|
(i) api测试工作室(i) | 将匹配api测试工作室,但不是api测试工作室 |
(i) api测试工作室 | 将处理完整的模式不区分大小写,并将匹配api测试工作室也api测试工作室 |
(i) api的测试工作室 | 将只处理模式的“api”部分,不区分大小写,并将匹配api测试工作室,但不是api测试工作室 |
检查示例项目有关路径表达式的更多实际示例。