4

HP QC OTA APIは、指定されたTestSetFolder内のTestSetのリストを返すための2つのメソッドを提供しているようです。ただし、どちらの方法も再帰的であり、階層のさらに下にあるすべてのサブフォルダーのすべてのテストセットを返します。任意のテストセットフォルダの直接の子テストセットのみを返すことができるようにしたいと思います。これは、Commandオブジェクトを使用した非常に単純なSQLクエリを使用して実現できることを認識していますが、QC権限が必要なため、これは私のシナリオではオプションではありません。

以下のc#コードサンプルを検討してください。これは、標準のQCサンプルプロジェクトを使用して問題を説明します。「Root\MercuryTours Web Site \ Functionality And UI」のフォルダパスを使用すると、3つのテストセットがすべての場合に正しく返されます。ただし、「Root \ Mercury Tours Webサイト」のパスを指定すると、サンプルにはそれぞれ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 Web UIとQCExplorerツールの両方の負荷テストセットが段階的に読み込まれるため、QCにはこれを行うための何らかの方法が必要です。

何か案は?ありがとう!

4

2 に答える 2

3

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への私の投稿に答えてくれたChristianGrzelkaに感謝します。

于 2010-11-18T23:49:00.143 に答える
-1
filter["CY_FOLDER_ID"] = "\"" + testSetFolderPath + "\"";

上記のコードはALM11からは無効です。「整数値ではありません」というエラーがスローされます。

テストセットツリーマネージャーでは、get_NodebyPathメソッドを使用する必要があります。

于 2015-11-04T07:53:00.463 に答える