0

QC統合ツールに取り組んでいて、テストプランでテストを作成するのに問題があります-残念ながら、APIはVB6用に作成されており、私はC#で作業しています。

これが私がこれまでに得たものです:

private void HPQC_Create_Test_Plan_Test(TDConnectionClass tdConnection, string ParentFolderPath, string TestName)
    {
        try
        {
            TreeManager treeM = (TreeManager)tdConnection.TreeManager;
            ISysTreeNode ParentFolder = (ISysTreeNode)treeM.get_NodeByPath(ParentFolderPath);
            TestFactory TestF = (TestFactory)tdConnection.TestFactory;

            Test TstTest = (Test)TestF.AddItem(System.DBNull.Value);
            TstTest.Name = TestName;
            TstTest.Type = "MANUAL";
            TstTest.Post();

            HPQC_Status_Test_Plan.Text = "Test " + TestName + " created.";

            tdConnection.Logout();
            tdConnection.Disconnect();
            tdConnection = null;

        }
        catch (Exception ex)
        {
            HPQC_Status_Test_Plan.Text = "Test Creation Failed.";
            Console.WriteLine("[Error] " + ex);

            tdConnection.Logout();
            tdConnection.Disconnect();
            tdConnection = null;

        }
    }

単純な「FailedtoPost」でコードが投稿でエラーになり、その理由がわかりません。

VB6のAPIの例は次のとおりです。

Public Sub AddTest(FolderName$, TestName$)

新しいテストを作成します。この例では、新しいテストを含むサブジェクトフォルダーがルートの「Subject」フォルダーの直下にあることを前提としています。

Dim objTest As Test
Dim folder As SubjectNode
Dim testF As TestFactory
Dim TreeMgr As TreeManager
Dim Path As String

Dim Trees As List
Dim RootName As String
Dim SubjRoot As SubjectNode

'tdc is the global TDConnection object.
Set TreeMgr = tdc.TreeManager

' Use TreeManager.TreeRoot to get the list of subject
' root nodes from the tree manager.
' There is only one item in this list.
Set Trees = TreeMgr.RootList(TDOLE_SUBJECT)

' Get the name of the subject tree root in your project.
RootName = Trees.Item(1)

Path = RootName & "\" & FolderName

On Error Resume Next
Set folder = TreeMgr.NodeByPath(Path)
On Error GoTo 0

If folder Is Nothing Then 'Create the folder
    ' Get the SubjectNode root node object from the
    ' tree manager by name.
    Set SubjRoot = TreeMgr.TreeRoot(RootName)
    Set folder = SubjRoot.AddNode(FolderName)
End If

Set testF = folder.TestFactory
Set objTest = testF.AddItem(Null)
objTest.name = TestName
objTest.Type = "SYSTEM-TEST"
objTest.Post

Dim VerCtl As VCS
Dim bIsLocked As Boolean
Dim strLockedBy As String

Set VerCtl = objTest.VCS

VerCtl.Refresh

bIsLocked = VerCtl.IsLocked
strLockedBy = VerCtl.LockedBy

' After POST, Test is checked in.
Debug.Print "Is locked: " & bIsLocked
'Is locked: False
Debug.Print "Is locked by: """ & strLockedBy & """"
'Is locked by: ""

VerCtl.CheckOut -1, "To change state", True

VerCtl.Refresh

bIsLocked = VerCtl.IsLocked
strLockedBy = VerCtl.LockedBy

Debug.Print "Is locked: " & bIsLocked
'Is locked: True
Debug.Print "Is locked by: """ & strLockedBy & """"
'Is locked by: "User1"

' Take an arbitrary field to change.
Debug.Print "Status: """ & objTest.Field("TS_STATUS") & """"
'Status: ""

objTest.Field("TS_STATUS") = "Ready"

objTest.Post

VerCtl.CheckIn "", "Changed status"

VerCtl.Refresh

bIsLocked = VerCtl.IsLocked
strLockedBy = VerCtl.LockedBy

Debug.Print "Is locked: " & bIsLocked
'Is locked: False
Debug.Print "Is locked by: """ & strLockedBy & """"
'Is locked by: ""

サブ終了

前もって感謝します!

4

2 に答える 2

1

私は似たようなものを持っていますが、フォルダ構造を生成するのにも適しています。QCのルートフォルダは「件名」ですが、これを変更するだけで、必要な特定のフォルダを作成できます。また、["TS_SUBJECT"]タイトルを設定する代わりに、リーフノードのノードを使用して指定されたフォルダーにテストを作成しているため、これは必要ありません。

private TestFactory addSubjectTreeStructure(String subjectField)
    {
        String folderRootString = subjectField;
        folderRootString = folderRootString.Replace("\\", "/");
        String[] folders = folderRootString.Split('/');

        // Test Plan Tree Manager
        TreeManager treeMgr = tdc.TreeManager;
        SubjectNode subjectNode = treeMgr.get_NodeByPath("Subject");

        ISysTreeNode node = (ISysTreeNode)subjectNode;

        // Creating the folders in test plan.
        for (int i = 0; i < folders.Length; i++)
        {
            try
            {
                node = node.FindChildNode(folders[i]);
            }
            catch (Exception ex)
            {
                node = node.AddNode(folders[i]);
                Console.WriteLine(ex.Message + ".\nChild not found. Adding new node: " + folders[i]);
            }
        }

        // Set the leaf folder and then returning the TestFactory from where all test cases will be generated from.
        SubjectNode folder = treeMgr.get_NodeById(node.NodeID);
        return folder.TestFactory;
    }

次に、返されたテストファクトリを使用して、このフォルダにテストを作成できます。

于 2013-05-14T14:56:15.737 に答える
0

週末に考えてみたところ、上記のコードにはツリー内でリンクする親属性がないことに気づきました。残念ながら、C#のTreeManagerには、何らかの理由で動作するTreeRootがありません。

プロトタイプのパスを手動で取得することでこの問題を回避しました。ユーザーは、「Root\Subject」などの親パスをテキストボックスに入力する必要があります。

重要な属性は、テストをアタッチするフォルダーのNodeIDである「TS_Subject」でした。

次のコードは私のために働きます:

private void HPQC_Create_Test_Plan_Test(TDConnectionClass tdConnection, string ParentFolderPath, string TestName)
    {
        try
        {
            TreeManager treeM = (TreeManager)tdConnection.TreeManager;
            ISysTreeNode ParentFolder = (ISysTreeNode)treeM.get_NodeByPath(ParentFolderPath);
            TestFactory TestF = (TestFactory)tdConnection.TestFactory;

            Test TstTest = (Test)TestF.AddItem(System.DBNull.Value);
            TstTest.Name = TestName;
            TstTest.Type = "MANUAL";
            TstTest["TS_SUBJECT"] = ParentFolder.NodeID;
            TstTest.Post();

            HPQC_Status_Test_Plan.Text = "Test " + TestName + " created.";

            tdConnection.Logout();
            tdConnection.Disconnect();
            tdConnection = null;

        }
        catch (Exception ex)
        {
            HPQC_Status_Test_Plan.Text = "Test Creation Failed.";
            Console.WriteLine("[Error] " + ex);

            tdConnection.Logout();
            tdConnection.Disconnect();
            tdConnection = null;

        }
    }
于 2012-08-14T15:03:57.000 に答える