It is not recommended that you place SapGuiOpenConnection calls in main transactions, otherwise each user opens a new connection with each transaction iteration. Because the SAPGUI scripting API performs connection closes asynchronously, this leads to the problem that your load test agents will open too many connections to the SAP server simultaneously. Errors will then result if you exceed the maximum connection limit.
Unless you are interested in load testing the establishment of new connections, it is recommended that you move logon procedures to INIT transactions. Furthermore, main transactions should always end at the same location where they begin, which is likely to be the screen after a successful logon.
Likewise, logout sequences should be moved out of main transactions and into end transactions.
dcluser user VUser transactions TInit : begin; TMain : 1; TEnd : end; var gsConnID : string; dcltrans transaction TInit begin // Connecting to SAP gsConnID := SapGuiOpenConnection("CONNECTSTRING"); SapGuiSetActiveConnection(gsConnID); SapGuiSetActiveSession("ses[0]"); SapGuiSetActiveWindow("wnd[0]"); // Logon to SAP System // Before running a test you have to customize the password parameter! SapGuiIgnoreError(SAPENGINE_STATUSBAR_CHANGED, SEVERITY_SUCCESS); SapGuiLogon("username", "password", "000", "", "SapGuiLogon"); end TInit; transaction TMain var begin SapGuiSetActiveWindow("wnd[0]", "SAP Easy Access", SAP GUI_MATCH_ ExactNoCase); ... ... ... // The VUser should now be again back on the window after a successful logon end TMain; transaction TEnd; begin SapGuiPressButton("tbar[0]/btn[15]", "SapGuiPressButton\\btn[15]"); // Log Off SapGuiSetActiveWindow("wnd[1]", "Log Off", SAP GUI_MATCH_ ExactNoCase); // Yes SapGuiPressButton("usr/btnSPOP-OPTION1", "SapGuiPressButton\\Yes"); end TEnd;