From the previous post, it should be possible to see that the next_tick function which counts the time is our trigger for execution.
Specifically this loop and if combination:
For i = 0 To UBound(ArrTimes)
If [A1].Value = ArrTimes(i) Then
Application.StatusBar = "Running test id: " & Range("A" & i + 6).Value
End If
Next i
Since I first wrote that last week, I’ve added a field to state that a run has been “done”. And I’ve built in a little tolerance by checking if the current time is greater than the execution start time – stored as ArrTime(n).
I’ve also borrowed some code from VBA Express to terminate a running process. Now I’m not terminating the process, I’m just checking if WLRun.exe aka the controller is running.
So the latest code looks like this:
For i = 0 To UBound(ArrTimes)
If [A1].Value >= ArrTimes(i) And Range("F" & i + 6) <> "DONE" Then
'Check if LR is already running
strTerminateThis = "wlrun.exe" 'Process to terminate,
Set objWMIcimv2 = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\.\root\cimv2") 'Connect to CIMV2 Namespace
Set objList = objWMIcimv2.ExecQuery _
("select * from win32_process where name='" & strTerminateThis & "'") 'Find the process to terminate
If objList.Count = 0 Then 'If 0 then process isn't running
Application.StatusBar = "Running test id: " & Range("A" & i + 6).Value
Range("F" & i + 6) = "DONE"
Call StartTest(Range("B" & i + 6).Value, Range("C" & i + 6).Value)
Else
Application.StatusBar = "Loadrunner Controller is still running"
End If
End If
Next i
I’ve just replaced the existing section with that, but I’ll post the full deliverable at some point (when it’s finished 🙂 )
I’ve also defined the module to call the controller.
Sub StartTest(Scenario_Path, Results_Path)
'Wlrun.exe -Run -TestPath scenario.lrs -ResultName res_folder
strCommand1 = Range("D1").Value 'Path to WLRun.exe
strCommand2 = Scenario_Path
strCommand3 = Results_Path
strCommand = strCommand1 & " -Run - TestPath " & strCommand2 & " -ResultName " & strCommand3
MsgBox (strCommand)
'Shell (strCommand)
End Sub
At the moment it just message_boxes the command string for testing purposes.
So now, we have:
A time-based system within Excel which will run a defined scenario at the appropriate time. I haven’t figured out yet what I’d like to do if WLRun is still running, but it’s coming together and I think that’s the last thing. I think I’ll add a minute on to all future runs to delay the system.
I also added an autoschedule function, mostly for testing purposes. I’ll document that in a future post, it’s not really important.