We had seen the QTP/UFT integration & triggering QTP test scripts remotely using Jenkins in this article. (If you have not read that, I recommend you to read the article first).
In this article we will see how to display the QTP/UFT results in the Jenkins console.
I have more than 5000 automated test scripts which need to be executed very often remotely which takes more than 8 hours to execute. When I first used Jenkins to run my QTP test scripts in the remote slave machines, I had to wait for several hours to see the results. It was very annoying.
The setup was given below.
Solution:
- Runner.vbs uses QTP’s Automation Object Model (COM API) to launch, open the test & run..etc.
- Runner.vbs once launches QTP, QTP runs as a separate process -information is not exchanged between Runner.vbs & QTP.
- As Runner.vbs uses QTP’s COM API, it can access QTP’s Environment object using which the information can be exchanged.
Updated Runner.vbs:
We will modify the Runner.vbs slightly to display the results in the console.
'Create QTP object
Set QTP = CreateObject("QuickTest.Application")
QTP.Launch
QTP.Visible = TRUE
'Open QTP Test
QTP.Open "QTP Test Path", TRUE 'Set the QTP test path
'Create Environment Variables to pass the results from QTP to runner.vbs
QTP.Test.Environment.Value("JenkinsFlag") = "N"
QTP.Test.Environment.Value("JenkinsTestCaseDescription") = ""
QTP.Test.Environment.Value("JenkinsTestCaseResult") = ""
'Set Result location
Set qtpResultsOpt = CreateObject("QuickTest.RunResultsOptions")
qtpResultsOpt.ResultsLocation = "Result path" 'Set the results location
'Run QTP test
QTP.Test.Run qtpResultsOpt, FALSE
'Write the result in the console
While QTP.Test.isRunning
If QTP.Test.Environment.Value("JenkinsFlag") = "Y" Then
QTP.Test.Environment.Value("JenkinsFlag") = "N"
' Show TC ID and Description
WScript.StdOut.WriteLine QTP.Test.Environment.Value("JenkinsTestCaseNumber") & " : " & QTP.Test.Environment.Value("JenkinsTestCaseDescription") & " : "
'Wait till the test is executed & result is updated
While (QTP.Test.Environment.Value("JenkinsTestCaseResult") = "" AND QTP.Test.isRunning)
WScript.Sleep 1000
Wend
'Show the Result
WScript.StdOut.Write QTP.Test.Environment.Value("JenkinsTestCaseResult")
End If
WScript.Sleep 1000
Wend
'Close QTP
QTP.Test.Close
QTP.Quit
Changes to be done in QTP:
We will also need to do some changes in QTP’s test to set those Environment variables.
Whenever the test starts – set these variables.
JenkinsFlag is used to tell jenkins that a new testcase starts.
JenkinsTestCaseDescription is used for the test case description.
Environment.Value("JenkinsFlag") = "Y"
Environment.Value("JenkinsTestCaseDescription") = "Verify Google search results"
Runner.vbs will look for these variables continuously. As soon as JenkinsFlag is set to Y, it will display the testcase description in the console which user can see in Jenkins.
At the end of the test, update the result as given below.
Environment.Value("JenkinsTestCaseResult") = "PASS"I am just giving you an idea here – I do not update this for each & every testcase. It is all part of my framework.
Jenkins Console:
Our Runner.vbs is modified to show the results & as given below – I do not have to wait to see the results anymore – as and when it executes, i will get the results immediately by accessing Jenkins job’s console.
Summary:
This post gives only a very high level idea about the implementation. Check the below article for more details and the scripts to download.
Github / SVN integration for UFT scripts
Happy Testing 🙂

