2010-11-18 2 views
4

HP QC OTA API는 지정된 TestSetFolder에서 TestSets 목록을 반환하는 두 가지 방법을 제공합니다. 그러나 두 방법 모두 재귀 적이며 모든 단일 하위 폴더에 대한 모든 테스트 집합을 계층 구조 아래로 더 반환합니다. 나는 주어진 테스트 세트 폴더의 즉각적인 자식 테스트 세트를 반환 할 수 있기를 원한다. Command 개체를 사용하여 매우 간단한 SQL 쿼리를 사용하여이 작업을 수행 할 수 있다는 것을 알았지 만,이 시나리오에서는 QC 권한이 필요하기 때문에 옵션이 아닙니다.Quality Center OTA API : TestSetFolder에서 하위 TestSets의 첫 번째 수준 만 반환하십시오.

아래의 C# 코드 샘플을 살펴보십시오. 표준 QC 샘플 프로젝트를 사용하여 문제를 설명합니다. "Root \ Mercury Tours Web Site \ Functionality And UI"의 폴더 경로를 사용하면 세 개의 테스트 세트가 모든 경우에 올바르게 반환됩니다. 그러나 "루트 \ 머큐리 투어 웹 사이트"경로를 지정하면 샘플에 각각 3 개와 2 개의 테스트 세트가 포함 된 2 개의 하위 폴더가 있으므로 5 개의 테스트 세트가 반환됩니다. 이 경우 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 웹 UI와 QCExplorer 도구는 테스트 세트 트리에서 노드를 확장하면서 점진적으로 테스트 세트를로드하므로 QC를 수행하는 방법이 있어야합니다.

아이디어가 있으십니까? 감사!

답변

3

실제로 CY_FOLDER_ID에 캐럿 (^) 기호를 사용하면 실제로 재귀 검색을 시행하는 것으로 나타났습니다. 이들을 제거하고 큰 따옴표로 바꾸면 하위 폴더의 테스트 세트가 반환되지 않습니다. 그래서 예에서 방법 2로 수정할 수 있습니다 SQAForums에 내 게시물을 대답 기독교 Grzelka에

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

- 여러분 감사합니다.

+0

솔루션을 시도했지만 _'Root \ Sandbox '오류가 유효한 정수 값이 아닙니다 ._ 솔루션에 누락 된 것이 있습니까? – Harrison

-1
filter["CY_FOLDER_ID"] = "\"" + testSetFolderPath + "\""; 

상기 코드는 ALM 11 유효하지 않다. "정수 값이 아님"이라는 오류가 발생합니다.

테스트 세트 트리 관리자를 통해 get_NodebyPath 메소드를 사용해야합니다.