OTA API Quality Center: возвращает только первый уровень дочерних TestSets в TestSetFolder - PullRequest
4 голосов
/ 18 ноября 2010

Похоже, что API HP QC OTA предоставляет два метода для возврата списка TestSets в указанном TestSetFolder.Однако оба метода являются рекурсивными и возвращают все наборы тестов для каждой подпапки ниже по иерархии.Я хочу иметь возможность возвращать только непосредственные дочерние наборы тестов из любой заданной папки наборов тестов.Я понимаю, что это может быть достигнуто с помощью очень простого запроса SQL с использованием объекта Command, но в моем сценарии это не вариант из-за требуемых разрешений QC.

Рассмотрим следующий пример кода c # ниже.Это использует стандартный пример проекта QC, чтобы проиллюстрировать проблему.Используя путь к папке «Root \ Mercury Tours Web Site \ Functionality And UI», все 3 набора тестов возвращаются правильно во всех случаях.Однако указание пути к «Root \ Mercury Tours Web Site» возвращает 5 наборов тестов, поскольку образец содержит 2 подпапки из 3 и 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 и инструментальное тестирование инструмента QCExplorerустанавливается постепенно по мере расширения узлов в дереве наборов тестов.

Есть идеи?Спасибо!

Ответы [ 2 ]

3 голосов
/ 19 ноября 2010

Оказывается, что использование символов вставки (^) в CY_FOLDER_ID фактически используется для принудительного рекурсивного поиска.Если они удаляются и заменяются двойными кавычками, тестовые наборы в подпапках не возвращаются.Таким образом, метод 2 в примере может быть изменен на:

// 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);

Спасибо Кристиану Гжелке, который ответил на мой пост на SQAForums .

0 голосов
/ 04 ноября 2015
filter["CY_FOLDER_ID"] = "\"" + testSetFolderPath + "\"";

Приведенный выше код недействителен с ALM 11 . Это выдаст ошибку "не целое число".

Вам придется использовать метод get_NodebyPath поверх диспетчера дерева наборов тестов.

...