Dim TSetFact, tsList
Dim theTestSet
Dim tsTreeMgr
Dim tsFolder
Dim Scheduler
Dim execStatus
Dim tdc
Dim nPath
Dim TSTestFact, testList
Dim tsFilter
Dim TSTst
Set tdc = CreateObject("TDAPIOLE80.TDConnection")
If (tdc Is Nothing) Then
MSGBOX "Connection is not created"
Else
MSGBOX "Connection is created"
End If
tdc.InitConnectionEx "http://qctest:8080/qcbin"
tdc.Login "Username", ""
tdc.Connect "STD", "Projectname"
Set TSetFact = tdc.TestSetFactory
Set tsTreeMgr = tdc.TestSetTreeManager
nPath = "Root\" & Trim("Bui\testset")
MSGBOX nPath
Set tsFolder = tsTreeMgr.NodeByPath(nPath)
If (tsFolder Is Nothing) Then
MSGBOX "Folder is not found"
Else
MSGBOX "Folder is found"
End If
Set tsList = tsFolder.FindTestSets("Phase")
If tsList.Count > 0 Then
MSGBOX "FindTestSets found more than one test set"
ElseIf tsList.Count < 1 Then
MSGBOX "FindTestSets: test set not found"
End If
If (tdc.connected <> True) Then
MsgBox "qc project failed to connect to " & ProjectName
WScript.Quit
End If
Set tfact = tdc.TestSetFactory
Set tsTreeMgr = tdc.TestSetTreeManager
Set tcTreeMgr = tdc.TreeManager
Set TestSetFolder = tsTreeMgr.NodeByPath(<Test_Set_Folder_Path_QC>)
Set TestSetF = TestSetFolder.TestSetFactory 'Retreive test from given folder in test lab
Set aTestSetArray = TestSetF.NewList("")
tsSet_cnt=aTestSetArray.Count
For p=1 to tsSet_cnt ' Loop through the Test Sets to pick the desired test Set
Set tstests=aTestSetArray.Item(p)
TestSet_Name=tstests.Name
If TestSet_Name=<Test_Set_Name_QC> Then
<do your next step here>
End If
Next
However I have modified the below code ...Yet the test script is not executable.Please advice.
I am trying to select a test from the list of tests in a test set and trying to execute it ,however i am unable to select a particular test and execute.
Code:
Dim tdc
Dim runName
Set tdc = CreateObject("TDAPIOLE80.TDConnection")
If (tdc.connected <> True) Then
MsgBox "qc project failed to connect to " &"Project"
WScript.Quit
End If
Set tfact = tdc.TestSetFactory
Set tsTreeMgr = tdc.TestSetTreeManager
Set tcTreeMgr = tdc.TreeManager
nPath = "Root\" & Trim("Bui\testset")
Set TestSetFolder = tsTreeMgr.NodeByPath(npath)
Set TestSetF = TestSetFolder.TestSetFactory 'Retreive test from given folder in test lab
Set aTestSetArray = TestSetF.NewList("")
tsSet_cnt=aTestSetArray.Count
For i=1 to tsSet_cnt ' Loop through the Test Sets to pick the desired test Set
Set tstests=aTestSetArray.Item(i)
TestSet_Name=tstests.Name
PRINT TestSet_Name
If TestSet_Name= "Creategmailaccount" Then
Set Scheduler = theTestSet.StartExecution("")
Scheduler.RunAllLocally = True
Scheduler.Run
Set execStatus = Scheduler.ExecutionStatus
MSGBOX execStatus
End If
Next
If (tdc.connected <> True) Then
MsgBox "qc project failed to connect to " &"Project"
WScript.Quit
End If
Set tfact = tdc.TestSetFactory
Set tsTreeMgr = tdc.TestSetTreeManager
Set tcTreeMgr = tdc.TreeManager
nPath = "Root\" & Trim("Bui\testset")
Set TestSetFolder = tsTreeMgr.NodeByPath(npath)
Set TestSetF = TestSetFolder.TestSetFactory 'Retreive test from given folder in test lab
Set aTestSetArray = TestSetF.NewList("")
tsSet_cnt=aTestSetArray.Count
For i=1 to tsSet_cnt ' Loop through the Test Sets to pick the desired test Set
Set tstests=aTestSetArray.Item(i)
TestSet_Name=tstests.Name
PRINT TestSet_Name
If TestSet_Name= "Creategmailaccount" Then
Flag=1
Set TestCaseF = tstests.TSTestFactory 'Retreive Test Cases from the test set
Set aTestCaseArray = TestCaseF.NewList("")
test_qc_cnt=aTestCaseArray.count
For n=1 to test_qc_cnt 'Loop through the Test cases in QC to find the same test case as in Excel
Set ts_obj=aTestCaseArray.item(n)
tname_QC=ts_obj.Test.Name
If Flag=1 Then
runName =ts_obj.RunFactory.UniqueRunName
Set RunF = ts_obj.RunFactory ' for managing test runs.
Set theRun = RunF.AddItem(runName)
theRun.Name =runName 'assign a run name
theRun.Status =run_status
theRun.CopyDesignSteps
theRun.Post
Flag=0
End If
Set runStepF = theRun.StepFactory
Set aTestStepArray = runStepF.NewList("")
Set runStepF = theRun.StepFactory
Set aTestStepArray = runStepF.NewList("")
step_cnt=aTestStepArray.Count
For j=1 to step_cnt ' Loop through steps and update in qc
Set runStep=aTestStepArray.item(j)
step_QC=runStep.Name
runStep.Status ="Passed" 'you can parametrize this value as per your need
runStep.Post
Next
End If
Next
Flag=1
Next
I have extracted this code from the one that i used for my scripts and and tried to modify it as per your need. I f you face any issue then let me know.
09-07-2011, 12:01 PM (This post was last modified: 09-07-2011, 12:02 PM by AutomationTester2011.)
Hi,
Thank you for your Response.I modified the below code and tried executing it in QTP.However no luck.It is creating a Unique run name and it is not executing the test.So Need Assistance as i am new to this OTA framework.
Code:
Dim tdc
Dim runName
Set tdc = CreateObject("TDAPIOLE80.TDConnection")
If (tdc.connected <> True) Then
MsgBox "qc project failed to connect to " &"Project"
WScript.Quit
End If
Set tfact = tdc.TestSetFactory
Set tsTreeMgr = tdc.TestSetTreeManager
Set tcTreeMgr = tdc.TreeManager
nPath = "Root\" & Trim("Bui\testset")
Set TestSetFolder = tsTreeMgr.NodeByPath(npath)
Set TestSetF = TestSetFolder.TestSetFactory 'Retreive test from given folder in test lab
Set aTestSetArray = TestSetF.NewList("")
tsSet_cnt=aTestSetArray.Count
For i=1 to tsSet_cnt ' Loop through the Test Sets to pick the desired test Set
Set tstests=aTestSetArray.Item(i)
TestSet_Name=tstests.Name
PRINT TestSet_Name
If TestSet_Name= "Creategmailaccount" Then
Flag=1
Set TestCaseF = tstests.TSTestFactory 'Retreive Test Cases from the test set
Set aTestCaseArray = TestCaseF.NewList("")
test_qc_cnt=aTestCaseArray.count
For n=1 to test_qc_cnt 'Loop through the Test cases in QC to find the same test case as in Excel
Set ts_obj=aTestCaseArray.item(n)
tname_QC=ts_obj.Test.Name
If tname_QC = "CreateLogin" Then
runName =ts_obj.RunFactory.UniqueRunName
Set RunF = ts_obj.RunFactory ' for managing test runs.
Set theRun = RunF.AddItem(runName)
theRun.Name =runName 'assign a run name
theRun.Status =run_status
theRun.CopyDesignSteps
theRun.Post
Flag=0
End If
Next
Set runStepF = theRun.StepFactory
Set aTestStepArray = runStepF.NewList("")
Set runStepF = theRun.StepFactory
Set aTestStepArray = runStepF.NewList("")
step_cnt=aTestStepArray.Count
For j=1 to step_cnt ' Loop through steps and update in qc
Set runStep=aTestStepArray.item(j)
step_QC=runStep.Name
runStep.Status ="Passed" 'you can parametrize this value as per your need
runStep.Post
Next
Flag=1
End If
Next
If (tdc.connected <> True) Then
MsgBox "qc project failed to connect to " &"Project"
WScript.Quit
End If
Set tfact = tdc.TestSetFactory
Set tsTreeMgr = tdc.TestSetTreeManager
Set tcTreeMgr = tdc.TreeManager
nPath = "Root\" & Trim("Bui\testset")
Set TestSetFolder = tsTreeMgr.NodeByPath(npath)
Set TestSetF = TestSetFolder.TestSetFactory 'Retreive test from given folder in test lab
Set aTestSetArray = TestSetF.NewList("")
tsSet_cnt=aTestSetArray.Count
For i=1 to tsSet_cnt ' Loop through the Test Sets to pick the desired test Set
Set tstests=aTestSetArray.Item(i)
TestSet_Name=tstests.Name
PRINT TestSet_Name
If TestSet_Name= "Creategmailaccount" Then
Flag=1
Set TestCaseF = tstests.TSTestFactory 'Retreive Test Cases from the test set
Set aTestCaseArray = TestCaseF.NewList("")
test_qc_cnt=aTestCaseArray.count
For n=1 to test_qc_cnt 'Loop through the Test cases in QC to find the same test case as in Excel
Set ts_obj=aTestCaseArray.item(n)
tname_QC=ts_obj.Test.Name
If tname_QC="CreateLogin" Then
If Flag=1 Then
runName =ts_obj.RunFactory.UniqueRunName
Set RunF = ts_obj.RunFactory ' for managing test runs.
Set theRun = RunF.AddItem(runName)
theRun.Name =runName 'assign a run name
theRun.Status ="Passed" 'you can parametrize this value as per your need
theRun.CopyDesignSteps
theRun.Post
Flag=0
End If
Set runStepF = theRun.StepFactory
Set aTestStepArray = runStepF.NewList("")
Set runStepF = theRun.StepFactory
Set aTestStepArray = runStepF.NewList("")
step_cnt=aTestStepArray.Count
For j=1 to step_cnt ' Loop through steps and update in qc
Set runStep=aTestStepArray.item(j)
step_QC=runStep.Name
runStep.Status ="Passed" 'you can parametrize this value as per your need
runStep.Post
Next
End If
Next
Flag=1
End If
Next
09-07-2011, 03:37 PM (This post was last modified: 09-07-2011, 03:42 PM by AutomationTester2011.)
Hi Parminder,
Thank you once again and the code is working perfectly fine without any errors.However I had a couple of questions.
1. When we execute a test,will it open the test in QTP and execute or it will run in background.(Since the script is not launching the web application)
2. After the execution of the above script,it shows status as "passed" in QC however once i try launching the report,it shows a pop up "cannot download report".- will the report be displayed or not.
1. There is no need of QTP for this script. You can save your script as .vbs file and just double click it when you want to run it. It will run in the background. You can put a message box at the end of the script to know that the script is finished.
2.There will be no report to show as there is no real execution of tests only field values are getting changed. Launch Report is coming as your tests are qtp tests. However if you put manual tests in the test set, then you will see no Launch Report icon after execution.
This OTA approach is useful if you have your test results in an external file e.g. excel and you want to update these results in QC.
Since i saw this piece of code i.e "Running the test instances in a test set locally, remotely, or as planned" in OTA sample codes.So thought there is way to do real execution of a test from QC.
Code:
Public Sub RunTestSet(tsFolderName As String, tSetName As String, _
HostName As String, runWhere As Integer)
' This example show how to run a test set in three different ways:
' * Run all tests on the local machine (where this code runs).
' * Run the tests on a specified remote machine.
' * Run the tests on the hosts as planned in the test set.
Dim TSetFact As TestSetFactory, tsList As List
Dim theTestSet As TestSet
Dim tsTreeMgr As TestSetTreeManager
Dim tsFolder As TestSetFolder
Dim Scheduler As TSScheduler
Dim execStatus As ExecutionStatus
On Error GoTo RunTestSetErr
errmsg = "RunTestSet"
' Get the test set tree manager from the test set factory.
'tdc is the global TDConnection object.
Set TSetFact = tdc.TestSetFactory
Set tsTreeMgr = tdc.TestSetTreeManager
' Get the test set folder passed as an argument to the example code.
Dim nPath$
nPath = "Root\" & Trim(tsFolderName)
On Error Resume Next
Set tsFolder = tsTreeMgr.NodeByPath(nPath)
If tsFolder Is Nothing Then
err.Raise vbObjectError + 1, "RunTestSet", "Could not find folder " & nPath
GoTo RunTestSetErr
End If
On Error GoTo RunTestSetErr
' Search for the test set passed as an argument to the example code.
Set tsList = tsFolder.FindTestSets(tSetName)
If tsList.Count > 1 Then
MsgBox "FindTestSets found more than one test set: refine search"
ElseIf tsList.Count < 1 Then
MsgBox "FindTestSets: test set not found"
End If
Set theTestSet = tsList.Item(1)
Debug.Print theTestSet.ID
' Start the scheduler on the local machine.
Set Scheduler = theTestSet.StartExecution("")
'Set up for the run depending on where the test instances
' are to execute.
Select Case runWhere
Case RUN_LOCAL
' Run all tests on the local machine.
Scheduler.RunAllLocally = True
Case RUN_REMOTE
' Run tests on a specified remote machine.
Scheduler.TdHostName = HostName
' RunAllLocally must not be set for
' remote invocation of tests.
' Do not do this:
' Scheduler.RunAllLocally = False
Case RUN_PLANNED_HOST
' Run on the hosts as planned in the test set.
Dim TSTestFact As TSTestFactory, testList As List
Dim tsFilter As TDFilter
Dim TSTst As TSTest
' Get the test instances from the test set.
Set TSTestFact = theTestSet.TSTestFactory
Set tsFilter = TSTestFact.Filter
tsFilter.Filter("TC_CYCLE_ID") = theTestSet.ID
Set testList = TSTestFact.NewList(tsFilter.Text)
Debug.Print "Test instances and planned hosts:"
'For each test instance, set the host to run depending
' on the planning in the test set.
For Each TSTst In testList
Debug.Print "Name: " & TSTst.Name & " ID: " & TSTst.ID & " Planned Host: " & TSTst.HostName
Scheduler.RunOnHost(TSTst.ID) = TSTst.HostName
Next TSTst
Scheduler.RunAllLocally = False
End Select
' Run the tests.
Scheduler.Run
' Get the execution status object.
Set execStatus = Scheduler.ExecutionStatus
' Track the events and statuses.
Dim RunFinished As Boolean, iter As Integer, i As Integer
Dim ExecEventInfoObj As ExecEventInfo, EventsList As List
Dim TestExecStatusObj As TestExecStatus
While ((RunFinished = False) And (iter < 100))
iter = iter + 1
execStatus.RefreshExecStatusInfo "all", True
RunFinished = execStatus.Finished
Set EventsList = execStatus.EventsList
Debug.Print Tab; execStatus.Count & " exec status"
For i = 1 To execStatus.Count
Set TestExecStatusObj = execStatus.Item(i)
Debug.Print Tab; "Iteration " & iter & " Status: " & _
" Test " & TestExecStatusObj.TestID & _
" ,Test instance " & TestExecStatusObj.TestInstance & _
" ,order " & TestExecStatusObj.TSTestID & " " & _
TestExecStatusObj.Message & ", status=" & _
TestExecStatusObj.Status
Next i
'Sleep() has to be declared before it can be used.
'This is the module level declaration of Sleep():
'Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sleep (5000)
Wend 'Loop While execStatus.Finished = False
Debug.Print "Scheduler finished around " & CStr(Now)
Debug.Print
Exit Sub
RunTestSetErr:
ErrHandler err, err.Description, errmsg, NON_FATAL_ERROR
End Sub
My requirement was to update the result in QC from excel file(this file contained the results from selenium scripts execution). So i implemented that only using OTA. Don't know about the real execution.