【问题标题】:Quality Center OTA API: Return just the first-level of child TestSets in a TestSetFolderQuality Center OTA API:仅返回 TestSetFolder 中的第一级子 TestSet
【发布时间】:2015-11-04 16:45:03
【问题描述】:

HP QC OTA API 似乎提供了两种方法来返回指定 TestSetFolder 中的 TestSet 列表。但是,这两种方法都是递归的,并返回层次结构中每个子文件夹的所有测试集。我希望能够只返回任何给定测试集文件夹的直接子测试集。我意识到这可以通过使用 Command 对象的非常简单的 SQL 查询来实现,但由于需要 QC 权限,这在我的场景中不是一个选项。

考虑下面的 C# 代码示例。 这里使用标准 QC 示例项目来说明问题。 使用“Root\Mercury Tours Web Site\Functionality And UI”的文件夹路径,3 个测试集在所有情况下都正确返回。但是,指定“Root\Mercury Tours Web Site”的路径会返回 5 个测试集,因为样本分别包含 3 个和 2 个测试集的 2 个子文件夹。在这种情况下,SQL 正确地不会返回任何测试集。

// where 'tdc' is a valid TDConnection object logged in to DEFAULT.QualityCenter_Demo
// string testSetFolderPath = @"Root\Mercury Tours Web Site";                          // 0 test sets (Method 1 and 2 return 5)
string testSetFolderPath = @"Root\Mercury Tours Web Site\Functionality And UI";     // 3 test sets

// Method 1: TestSetFolder.FindTestSets()
var testSetTreeManager = (TestSetTreeManager)tdc.TestSetTreeManager;
var testSetFolder = (TestSetFolder)testSetTreeManager.get_NodeByPath(testSetFolderPath);
var testSets = testSetFolder.FindTestSets("", false, "");
Console.WriteLine("Folder {0} contains {1} testsets", testSetFolderPath, testSets.Count);

// Method 2: NewList() with filter
var testSetFactory = (TestSetFactory)tdc.TestSetFactory;
var filter = (TDFilter)testSetFactory.Filter;
filter["CY_FOLDER_ID"] = "^" + testSetFolderPath + "^";
testSets = (List)testSetFactory.NewList(filter.Text);
Console.WriteLine("Folder {0} contains {1} testsets", testSetFolderPath, testSets.Count);

// Method 3: SQL Query using Command object
var command = tdc.Command;
command.CommandText = "select CY_CYCLE as TestSet from CYCLE where CY_FOLDER_ID = " + testSetFolder.NodeID;
Recordset records = command.Execute();
Console.WriteLine("Folder {0} contains {1} testsets", testSetFolderPath, records.RecordCount);

可以遍历返回的测试集以检查 TestSetFolder 路径属性是否与当前文件夹匹配。但是,这会导致很大的性能开销,尤其是对于大型 QC 项目和/或网络连接速度较慢时。

QC 中必须有某种方式来执行此操作,因为 QC Web UI 和 QCExplorer 工具都会在您展开测试集树中的节点时逐步加载测试集。

有什么想法吗?谢谢!

【问题讨论】:

    标签: hp-quality-center


    【解决方案1】:

    事实证明,在 CY_FOLDER_ID 上使用插入 (^) 符号实际上是用于强制执行递归搜索。如果这些被删除并替换为双引号,则不会返回子文件夹中的测试集。所以示例中的方法二可以修改为:

    // Method 2: NewList() with filter
    var testSetFactory = (TestSetFactory)tdc.TestSetFactory;
    var filter = (TDFilter)testSetFactory.Filter;
    filter["CY_FOLDER_ID"] = "\"" + testSetFolderPath + "\"";    
    testSets = (List)testSetFactory.NewList(filter.Text);
    if (testSets == null)
        Console.WriteLine("Folder {0} does not contain any testsets", testSetFolderPath);
    else
        Console.WriteLine("Folder {0} contains {1} testsets", testSetFolderPath, testSets.Count);
    

    感谢 Christian Grzelka,他在 SQAForums 上回复了我的帖子。

    【讨论】:

    • 我尝试了您的解决方案,但收到一个错误'Root\Sandbox' is not a valid integer value。您的解决方案中是否缺少某些内容?
    【解决方案2】:
    filter["CY_FOLDER_ID"] = "\"" + testSetFolderPath + "\"";
    

    上述代码在 ALM 11 中无效。它将抛出一个错误“不是整数值”。

    您必须在测试集树管理器上使用 get_NodebyPath 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多