如何在HP ALM Rest API查询中编写链接连接?

问题描述 投票:0回答:3

我正在使用HP Quality Center版本11.52,我的任务是复制一系列图形或AnalysisItems,因为它们的正式名称是。我没有找到任何方法直接从AnalysisItem检索图形显示数据,因此我的方法是在这些AnalysisItems中提取过滤器,并将它们复制/细化为工作的REST调用或URL。这在大多数情况下都适用,但我遇到了链式连接的问题。以下是其中一个AnalysisItem的示例过滤器,如配置选项卡和过滤器文本框中所示:

Filter: Test: Project["My Project"]; 
Cross Filter: <Cross Filter Test Instance-Test Set>Test Set Folder[^Root\My Path\My Project\My Tests^]

这里有两个过滤子句,用';'分隔

  1. 我可以通过名称在项目下轻松找到测试实例。它是这样的: .../test-instances/?query={test.user-18["My Project"]}

当然,这要求我们使用user-18字段来存储项目名称,这是我公司中使用的逻辑分区,在作为QC实体的已定义项目中。

  1. 但是,如果我想交叉过滤这些找到的测试实例,并且只在特定文件夹中的测试集中找到实例,我将不得不进行链式连接,我希望这可能是这样写的: .../test-instances/?query={test.user-18["My Project"]; test-set.test-set-folder.name["^Root\My Path\My Project\My Tests^"]}

然而,这给了我一个错误,说明“实体:测试集没有一个名为test-set-folder.name的字段。现在我知道了,但我希望它能理解最后一个标点之前的部分马克,也是一种关系。它没有。

我也尝试过:

.../test-instances/?query={test.user-18["My Project"];
test-set[test-set-folder.name["^Root\My Path\My Project\My Tests^"]]}

但嵌套的方括号也不起作用。

最后,我在“filter-data”中尝试了我在数据库中看到的语法,它看起来像这样:

.../test-instances/?query={test.user-18["My Project"];
test-set[x]test-set-folder.name["^Root\My Path\My Project\My Tests^"]}

这也是不允许的。

我对自己想要实现的目标非常有信心,但文档并没有多大帮助。我想如果可以在QC用户界面内的AnalsisItem中设置过滤器,那么它也应该可以在REST-API中使用。我已经尝试过广泛搜索API,但要么在文档中找不到,要么很难找到。

任何人都可以帮助我使用正确的语法(如果有的话)吗?

rest alm qc
3个回答
1
投票
  • 在质量中心,报告和图表不包含数据。它们只是定义,它们从DB“live”中检索数据。
  • 显示的QC过滤器可能更有可能是用于与后端交互的OTA(开放测试架构)定义,然后它是REST。

但是如果您想收集测试实例数据,那么您可以从文件夹中向下工作。

第一步:获取文件夹路径

在Quality Center中,文件夹路径由字母组合定义。文件夹使用三个字母的短语构建。 'AAA'是根。

'AAA'
   -- 'AAAAAA'
         -- 'AAAAAAAAA'
         -- 'AAAAAAAAB'
         -- 'AAAAAAAAC'
   -- 'AAAAAB'

我不认为可以在与UI本身的根文件夹相同的级别上创建额外的文件夹。基本上,当没有进行自定义时,前三个字母将始终为“AAA”。

基于Marco的评论和我的经验,我将创建一个组件来处理检索文件夹。在潜入其他结构时你也需要它,所以如果你努力推广它就不会失去努力。

您的第一次搜索将在分层路径上,从“AAA”(根文件夹)开始,长度为6个字符(第二级文件夹,您要搜索的第一个孩子)。然后获取新的Id并重复,直到您在路径标识符的末尾。在你的情况下:

  • 我自己的路
  • 我的项目
  • 我的考试

基本上,您根据名称沿着路径走,并使用字符串连接组成标识符。然后,该结果可用于检索确切的文件夹。假设在同一级别上没有两个具有相同名称的文件夹。

假设这些都是根节点下的第一个,并假设您还需要更多的后代,我们继续使用这个假设的逻辑:

确定的分层路径是'AAAAAAAAAAAA'。

我知道我在这里变得非常冗长,但作为测试员角色的技术用户,我个人喜欢一些简单的编码步骤,然后是一个复杂的步骤。仅仅因为编写密集编码是一种诗意的艺术,我并不掌握它。

第二步:获取所请求路径的所有子文件夹

所以,继续:通过这个分层路径,我们可以识别所有子文件夹,并收集它们的ID。

这看起来像这样:

.../test-set-folders?query={hierarchical-path["AAAAAAAAAAAA*"]}

第三步:获取测试集

使用这些文件夹ID,您可以检索所需的测试集:假设它返回ID为1的测试集文件夹。

.../test-sets?query={parent-id[1]}

迭代每个文件夹ID的REST查询,收集测试集ID。

第四步:获取测试实例

使用测试集,您可以通过类似查询获取测试实例和所有可用数据。

这是我对这种事情使用休息服务的看法。如果您要从QC中检索数据,目的是拍摄快照并使用数据设计自己的图表,我个人建议您查询数据库。使用SQL,您可以在Excel报告中轻松地创建所需的所有连接。

这确实会破坏使用REST API的难易程度。也许一个简单的专用客户端用于具有特定查询的数据库将是一个解决方案?

收集数据的最后一句话:在检索自定义图表的数据时,我使用'run'对象作为我的基础。

  • 运行可以提供一段时间的视图
  • 运行可以链接到各种东西,并且是执行的实际来源
  • 使用实例时,您需要拍摄快照,运行会以某种方式为您处理。

1
投票

假设我想进入测试集路径:Root / System Test / ProgramName / ReleaseName / WeekNumber /等等。登录后能够发送REST消息:-)

下面只是一个示例(来自我的python模块的输出)我如何检查路径和操作的描述:

GET https://yourServer.com/qcbin/rest/domains/DomainName/projects/SANDBOX/test-set-folders?query={name['Root']}

在测试集中询问名称Root - >可能是多个文件夹的名称为Root(我故意创建了另一个),但是您的工具应该能够获得真正的“Root”文件夹xml。

200 - test-sets folder hierarchy downloaded.
Multiple folder with that name! Found 2 folders with that name!
Root ID found.

GET https://yourServer.com/qcbin/rest/domains/DomainName/projects/SANDBOX/test-set-folders?query={name['System Test'];parent-id['0']}
200 - test-sets folder hierarchy downloaded.
Folder System Test already existing...going ahead in path....

现在获取下一步的xml:具有parent-id 0的“System Test”文件夹名称。

GET https://yourServer.com/qcbin/rest/domains/DomainName/projects/SANDBOX/test-set-folders?query={name['ProgramName'];parent-id['112']}
200 - test-sets folder hierarchy downloaded.
Folder ProgramName already existing...going ahead in path....

迭代多次相同的程序(当然我不是手动执行此操作)

GET https://yourServer.com/qcbin/rest/domains/DomainName/projects/SANDBOX/test-set-folders?query={name['ReleaseName'];parent-id['113']}
200 - test-sets folder hierarchy downloaded.
Folder ReleaseName already existing...going ahead in path....
GET https://yourServer.com/qcbin/rest/domains/DomainName/projects/SANDBOX/test-set-folders?query={name['SWType'];parent-id['114']}
200 - test-sets folder hierarchy downloaded.
Folder SWType already existing...going ahead in path....
GET https://yourServer.com/qcbin/rest/domains/DomainName/projects/SANDBOX/test-set-folders?query={name['WK18'];parent-id['115']}
200 - test-sets folder hierarchy downloaded.
Folder WK18 already existing...going ahead in path....
GET https://yourServer.com/qcbin/rest/domains/DomainName/projects/SANDBOX/test-set-folders?query={name['FeatureType'];parent-id['366']}
200 - test-sets folder hierarchy downloaded.

想象一下,在路径的末尾,您仍然想要追加一个新文件夹:

Folder FeatureType has to be created.
POST https://yourServer.com/qcbin/rest/domains/DomainName/projects/SANDBOX/test-set-folders
201 - test-set-folders created.

从每次获取的xml中,您使用的是父ID和要检查的文件夹名称。这是一个独特的组合。

到达最后一步后,您就会知道您要查找的结束文件夹的ID(以及所有描述)。现在您可以使用它来检查您需要的所有信息!该ID正是您所需要的!

我说的程序可以完全自动化。祝你有愉快的一天,我希望这对你有所帮助!


0
投票

这里只是一个快速的答案,关于解决了我的大多数问题:

关系

在文档中,您实际上可以找到一些称为关系的东西,它为您提供了许多非常类似于SQL连接的选项,它允许您根据链接类似连接方式的值从一个实体获取结果。

© www.soinside.com 2019 - 2024. All rights reserved.