Description
The WaitFor
method tries to synchronize the test execution flow of the current project with test execution flows of other projects by using a particular synchronization point (synchpoint).
When the WaitFor
method is used, the execution of the current project is suspended until any of the following events occurs:
-
Other projects, which have a synchpoint with the same name, execute their tests up to the operation or script line that calls the
WaitFor
method for the same synchpoint (this line is executed as well); -
The specified time limit is reached.
If at least one of the projects subscribed to the synchpoint is not synchronized within the specified period, synchronization will not be made.
Declaration
SynchPointObj.WaitFor(Timeout)
SynchPointObj | An expression, variable or parameter that specifies a reference to a SynchPoint object | |||
Timeout | [in] | Optional | Integer | Default value: 0 |
Result | Boolean |
Applies To
The method is applied to the following object:
Parameters
The method has the following parameter:
Timeout
Sets the time limit in milliseconds. 0 (the default value) means the waiting time is infinite.
Result Value
True if synchronization is made, and False otherwise.
Remarks
-
Regardless of the method result value (True or False), the test engine considers the project has gone through the synchronization point.
We will illustrate this by citing an example. Suppose you have two projects, Project A and Project B, that need to be synchronized. Suppose that in Project A you call the
WaitFor
method with some timeout specified. Also, suppose that this method call returns False for some reason (this may happen, for example, if Project B was unable to reach the synchronization point within the expected time period).Though the method returned False, the test engine will consider Project A has gone through the synchronization point. Now, if you call the
WaitFor
method in Project B, this method call will return True as if both projects reached the synchronization point at the same time. -
To synchronize execution of projects via synchpoints, you can also use the
NetworkSuite.Synchronize
method. -
If a slave project has the specified synchpoint, but does not call for the
SynchPoint.WaitFor
(orNetworkSuite.Synchronize
) method for this synchpoint, while the other projects are waiting for the synchronization by that synchpoint, the synchronization will never be reached. In order to prevent synchronization from hanging, either keep track of all your projects’ synchpoints and synchronization methods, or use the Timeout parameter of theWaitFor
orSynchronize
methods to set the synchronization timeout for your projects. -
If a project that has a synchpoint stops running before calling
WaitFor
for this synchpoint, TestComplete considers the project does not have this synchpoint and theWaitFor
method called by other projects does not wait for that project.
Example
The following example demonstrates how you can access the synchpoint collection from script and synchronize tests execution by using the desired synchpoint from this collection. The example uses the SynchPoint.WaitFor
method to simultaneously start creating new files on different computers. Remember that this code must be added to all the projects that will create files.
JavaScript, JScript
// Obtain the collection of synchronization points defined in the current project
MySynchPointCollection = NetworkSuite.SynchPoints;
// Obtain the synchpoint named Synchpoint1 from the collection
MySynchPoint = MySynchPointCollection.Synchpoint1;
// Synchronize the script execution flow of the current project with script execution flows of other projects
MySynchPoint.WaitFor();
// Call the routine that creates files
CreateFiles(0);
...
Python
# ...
# Obtain the collection of synchronization points defined in the current project
MySynchPointCollection = NetworkSuite.SynchPoints
# Obtain the synchpoint named Synchpoint1 from the collection
MySynchPoint = MySynchPointCollection.Synchpoint1
# Synchronize the script execution flow of the current project with script execution flows of other projects
MySynchPoint.WaitFor()
# Call the routine that creates files
CreateFiles(0)
VBScript
' Obtain the collection of synchronization points defined in the current project
Set MySynchPointCollection = NetworkSuite.SynchPoints
' Obtain the synchpoint named Synchpoint1 from the collection
Set MySynchPoint = MySynchPointCollection.Synchpoint1
' Synchronize the script execution flow of the current project with script execution flows of other projects
Call MySynchPoint.WaitFor
' Call the routine that creates files
Call CreateFiles(0)
...
DelphiScript
// Obtain the collection of synchronization points defined in the current project
MySynchPointCollection := NetworkSuite.SynchPoints;
// Obtain the synchpoint named Synchpoint1 from the collection
MySynchPoint := MySynchPointCollection.Synchpoint1;
// Synchronize the script execution flow of the current project with script execution flows of other projects
MySynchPoint.WaitFor;
// Call the routine that creates files
CreateFiles(0);
...
C++Script, C#Script
// Obtain the collection of synchronization points defined in the current project
MySynchPointCollection = NetworkSuite["SynchPoints"];
// Obtain the synchpoint named Synchpoint1 from the collection
MySynchPoint = MySynchPointCollection["Synchpoint1"];
// Synchronize the script execution flow of the current project with script execution flows of other projects
MySynchPoint["WaitFor"]();
// Call the routine that creates files
CreateFiles(0);
...
For more information on using the WaitFor
method and for sample code, see Synchronization Points.
See Also
Distributed Testing
Synchronization Points
Synchronizing Projects in Network Suites