Forum Discussion

Kateryna's avatar
Kateryna
Contributor
11 years ago
Solved

Count keyword tests in script

Hello, does anybody know how to count the number of keyword tests in suite from the one script?
  • AlexKaras's avatar
    11 years ago
    OK then...



    I used the following code to get the list of ManualTests. Basically, the code scans the current project file for the items that end with '.tcMT' which is the extension of the files with Manual Tests.



    I believe that you can adopt this to iterate through all project files within your test suite and search not for Manual but for Keyword tests.


    '-------------------------------------------------------------------------------



    Function GetManualTestsCollection

      Const cProcName = "GetManualTestsCollection"

      Dim cProcNameMsgPrefix

      cProcNameMsgPrefix = cUnitNameMsgPrefix & cProcName & "(): "



      Const cExt = ".tcMT"



      Dim Doc

      Dim ManualTestCollection

      Dim Nodes

      Dim Node

      Dim strManTCName

      Dim i



      Set ManualTestCollection = CreateObject("Scripting.Dictionary")

      Set GetManualTestsCollection = ManualTestCollection



      If ("" = BuiltIn.GetCOMServerPath("Msxml2.DOMDocument.4.0")) Then InstallMSXML



      ' Create COM object

      Set Doc = Sys.OleObject("Msxml2.DOMDocument.4.0")

      Doc.async = False



      ' Load data from the current project file

      Call Doc.load(Project.FileName)



      ' Report an error, if, for instance, the markup or file structure is invalid

      If (Doc.parseError.errorCode <> 0) Then

        s = "Reason:" & vbTab & Doc.parseError.reason & vbCrLf & _

            "Line:"   & vbTab & CStr(Doc.parseError.line) & vbCrLf & _

            "Pos:"    & vbTab & CStr(Doc.parseError.linePos) & vbCrLf & _

            "Source:" & vbTab & Doc.parseError.srcText

        ' Post an error to the log and exit

        Call Log.Error(cProcNameMsgPrefix & "Error when parsing the project file.", _

            Project.FileName & vbCrLf & s)

        Set Doc = Nothing

        Exit Function

      End If



      ' Use an XPath expression to obtain the list of Manual tests nodes

    '/Nodes/Node[@name="root"]/Node[@name="child list"]/Node/Node[@name="item data"]/Prp[@name="storage"]

    '/Nodes/Node//*/Prp[@name="storage"]

    '//Prp[@name="storage"]

    '  Set Nodes = Doc.selectNodes("//Prp[@name=""storage""]")

    '  Set Nodes = Doc.selectNodes("//Node[contains(@name,"".tcmt"")]")

      ' Case insensitive search for the 'name' nodes that contain the cExt ('.tcMT') extension

      ' Based on:

      ' http://stackoverflow.com/questions/614797/xpath-find-a-node-that-has-a-given-attribute-whose-value-contains-a-string

      ' http://www.dotnetspider.com/resources/470-Doing-case-InSensitve-comparisons-using-XPa-X.aspx

      'Set Nodes = Doc.selectNodes("//Node[contains(translate(@name, ""abcdefghijklmnopqrstuvwxyz"", ""ABCDEFGHIJKLMNOPQRSTUVWXYZ""),translate(""" & cExt & """, ""abcdefghijklmnopqrstuvwxyz"",""ABCDEFGHIJKLMNOPQRSTUVWXYZ""))]")



      ' Return 'name' nodes that ends on cExt value (case insensitive compare)

      ' Case insensitive search for the 'name' nodes that end on the cExt ('.tcMT') extension

      ' Based on:

      ' http://stackoverflow.com/questions/614797/xpath-find-a-node-that-has-a-given-attribute-whose-value-contains-a-string

      ' http://www.dotnetspider.com/resources/470-Doing-case-InSensitve-comparisons-using-XPa-X.aspx

      ' http://bytes.com/topic/xml/answers/726552-xpath-query-ends

      Set Nodes = Doc.selectNodes("//Node[substring(translate(@name, ""abcdefghijklmnopqrstuvwxyz"", ""ABCDEFGHIJKLMNOPQRSTUVWXYZ""), string-length(@name) - string-length(""" & cExt & """) + 1, string-length(@name)) = translate(""" & cExt & """, ""abcdefghijklmnopqrstuvwxyz"",""ABCDEFGHIJKLMNOPQRSTUVWXYZ"")]")



      ' Process the nodes

      For Each Node In Nodes

        For i = 0 To Node.attributes.length-1

    '      If ("value" = Node.attributes(i).name) Then

          If ("name" = Node.attributes(i).name) Then

            strManTCName = Node.attributes(i).text 'e.g. ManualTests\ManualTest1\ManualTest1.tcMT

    '        If (0 = aqString.Compare(aqFileSystem.GetFileExtension(cExt), _

    '            aqFileSystem.GetFileExtension(strManTCName), False)) Then ' case insensitive compare

              ' get file name (without path and ext.)

              strManTCName = Utilities.ChangeFileExt(aqFileSystem.GetFileName(strManTCName), "")

              If ("" <> strManTCName) Then ManualTestCollection.Add strManTCName, Eval(strManTCName)

    '        End If

          End If

        Next

      Next



      Set Doc = Nothing

    End Function

    '-------------------------------------------------------------------------------