In concurrent testing, Silk Test Classic executes one function on two or more clients at the same time. This topic demonstrates one way to perform the same tests concurrently on multiple clients.
testcase TestConcurrently ()
Connect ("server")
Connect ("client1")
Connect ("client2")
DoSomeSetup ("server") // initialize server first
Disconnect ("server") // testcase is thru with server
spawn // start thread for client1
UpdateDatabase ("client1")
spawn // start thread for client2
UpdateDatabase ("client2")
rendezvous // synchronize
Disconnect ("client1")
Disconnect ("client2")
DoSomeSetup (STRING sMachine) // define server setup
HTIMER hTimer
hTimer = TimerCreate ()
TimerStart (hTimer)
SetMachine (sMachine)
// code to do server setup goes here
TimerStop (hTimer)
Print ("Time on {sMachine} is: {TimerStr (hTimer)}")
TimerDestroy (hTimer)
UpdateDatabase (STRING sMachine) // define update test
HTIMER hTimer
hTimer = TimerCreate ()
TimerStart (hTimer)
SetMachine (sMachine)
// code to update database goes here
TimerStop (hTimer)
Print ("Time on {sMachine} is: {TimerStr (hTimer)}")
TimerDestroy (hTimer)
An alternative but equivalent approach is to use the parallel statement in place of the spawn and rendezvous:
testcase TestConcurrently2 ()
Connect ("server")
Connect ("client1")
Connect ("client2")
DoSomeSetup ("server")
Disconnect ("server")
parallel // automatic synchronization
UpdateDatabase ("client1") // thread for client1
UpdateDatabase ("client2") // thread for client2
Disconnect ("client1")
Disconnect ("client2")
DoSomeSetup (STRING sMachine)
HTIMER hTimer
hTimer = TimerCreate ()
TimerStart (hTimer)
SetMachine (sMachine)
// code to do server setup goes here
TimerStop (hTimer)
Print ("Time on {sMachine} is: {TimerStr (hTimer)}")
TimerDestroy (hTimer)
UpdateDatabase (STRING sMachine)
HTIMER hTimer
hTimer = TimerCreate ()
TimerStart (hTimer)
SetMachine (sMachine)
// code to update database goes here
TimerStop (hTimer)
Print ("Time on {sMachine} is: {TimerStr (hTimer)}")
TimerDestroy (hTimer)
If you use variables to specify different database records for each client’s database transactions, you can use the above techniques to guarantee parallel execution without concurrent database accesses.