Sahi Pro - Playback on Desktop

abstract This section describes various ways of playing back Sahi scripts.

Playback via Editor (new in 6.0.0)

The enhanced Editor (available from v6.0.0) allows the user to playback scripts, suites, data driven suites and scenarios from a web interface.

The user can choose to playback on a single machine or distribute across machines. All command line scenarios (testrunner, drun, drun_different_master) can be tested from the Editor Playback UI.

One can also generate ANT xml content for various scenarios from the Playback UI. The xml content needs to be copied and saved in an xml file. The XML file can then be run through ANT.
Example: If we copy the generated ANT xml content to demo.xml, one can launch the ANT target as ant -f demo.xml

Please refer to the Playback section of the Editor documentation for more details on the Playback UI.

Playback via Sahi Controller

To playback via Controller, go to the Playback tab, choose the script to play and click "Play".
As the script executes, Sahi will display the steps executed and also log them into a database.
You can view the logs by clicking on "Logs" link at the bottom of the Controller.

Sahi can also create offline logs in xml, html, junit, tm6 and excel formats.
By default offline logs are not created for playback via Controller.
If needed, offline logs for playback via Controller can be specified in userdata.properties
by setting controller.offline_logs.type property
# Sets the type of offline logs created when script is run from Controller. Set to blank to disable offline logs
controller.offline_logs.type=html

Playback via testrunner


testrunner.bat and testrunner.sh files allow running scripts from the command line.
  1. Open a command prompt and cd to sahi/userdata/bin
    (or click on the "Bin" link on the Sahi Dashboard)
  2. Run testrunner.bat to see the syntax
    D:\sahi_pro\userdata\bin>testrunner.bat
    --
    Usage: testrunner <sah file|suite file> <startURL> <browserType> <tags>
    File path is relative to userdata/scripts
    Multiple browsers can be specified using +. Eg. ie+firefox
    tags are used only if the input file is a .csv file, .s.csv file or a .dd.csv file
    --
    Example:
    testrunner demo/demo.suite http://sahitest.com/demo/ firefox
    testrunner demo/sahi_demo.sah http://sahitest.com/demo/ ie
    testrunner demo/sahi_demo.sah http://sahitest.com/demo/ ie+firefox
    testrunner demo/demo.dd.csv http://sahitest.com/demo/ firefox "win||all"
    testrunner demo/testcases/testcases_sample.csv http://sahitest.com/demo/ ie "(user||admin)&&medium"
    testrunner demo/ddcsv/test.dd.csv http://sahitest.com/demo/ ie "(user||admin)&&medium"
    testrunner demo/framework/sample.xls http://sahitest.com/demo/training/ ie
    testrunner demo/framework/scenario_new.s.csv http://sahitest.com/demo/training/ ie "all"

    D:\sahi_pro\userdata\bin>
  3. To run your suite, use,
    C:\sahi\userdata\bin>testrunner.bat myapp.suite http://myappdomain/startpage.jsp firefox
    You can specify the browser you want to run it on.
  4. Parameters other than suite, startURL and browserType can be modified by editing testrunner.bat
    1. To set the number of parallel browsers to execute the script in, modify
      SET THREADS=5
      To run in one thread only, ie. to run scripts one after the other sequentially, use
      SET THREADS=1
    2. Sahi normally opens and closes the browser for each script.
      To execute all scripts sequentially without closing and reopening browsers, use
      SET THREADS=1
      SET SINGLE_SESSION=true
    3. Sahi, by default, writes logs to the database only.
      To force it to write logs to the filesystem, use
      SET LOGS_INFO=html,xml
      html and xml logs will be created in the sahi/userdata/logs/playback folder

      To force it to write logs to specific file locations, use,
      SET LOGS_INFO=html:D:/reports/htmllogs/,xml:D:/reports/xmllogs/

      Output formats available are html,xml,junit,excel

      The format to specify LOGS_INFO is
      reportType1:filePath1,reportType2,reportType3:filePath3,...
    4. When a Sahi suite is run, some scripts may fail because of environment reasons or due to browser crashes.
      A natural next step for testers is to verify the failure by running the script again.
      Sahi now automatically creates a suite of all failed scripts. The name of the failed suite has _failed_<browsertype> appended to the filename.
      For example if you ran a suite admin/admin.suite on Firefox, failed suite will be created as admin/admin_failed_firefox.suite
      For admin/admin.dd.csv, it will be admin/admin_failed_firefox.dd.csv

      This failed suite file can then be run to verify only the failed testcases.
    5. Sahi can send out emails at the end of a suite run.
      Set the following properties in testrunner.bat file.
      SET SEND_EMAIL_REPORT=true
      SET EMAIL_TRIGGER=success,failure
      SET EMAIL_PROPERTIES=email.properties
      SET EMAIL_PASSWORD_HIDDEN=true
      Email specific parameters like username, password etc. are defined in sahi/userdata/bin/email.properties file.
    6. For a long running suite, Sahi can send periodic emails indicating progress.
      To enable periodic emails, set the following property in testrunner.bat file.

      SET SEND_EMAIL_REPORT_PERIODICALLY=true

      To set time interval (in minutes), set the following property in testrunner.bat file.

      SET SEND_EMAIL_REPORT_PERIODICALLY_TIME=30

info Browser names are defined in sahi/userdata/browser-types-xml
testrunner.bat and testrunner.sh use the TestRunner java class internally.

Distributed playback via drun


Sahi Pro can distribute and run tests on multiple machines (nodes).
The machine which distributes the scripts and manages the distributed run is referred to as the Master. All Dashboard logs are visible from the Master. The other machines are called Slaves. Any machine in the distributed environment can serve as the Master. The machine which launches the distributed run is referred to as the Initiator.
Sahi provides a couple of batch files - drun.bat and drun_different_master.bat (and equivalent shell scripts). They allow running test scripts on multiple machines from the command line.
danger Please ensure that the same SahiPro version has been installed on all the machines participating in the distributed run.

drun

  1. Sahi distributes the scripts to different machines based on their capacity and availability of browsers. Please note that Sahi should be running on each of the nodes. Also, on each machine, the browser paths must be correctly specified.
  2. Open sahi_pro/userdata/bin/drun.bat (drun.sh on linux) using any editor.
  3. SOURCE_SCRIPTS_PATH points to the folder that contains ALL the scripts to be run. It should be relative to sahi_pro/userdata folder OR it should be an absolute path.

    For Windows:
    SET SOURCE_SCRIPTS_PATH=scripts
    For Linux:
    export SOURCE_SCRIPTS_PATH=scripts
  4. Configure the NODES variable to contain all the machines on which the tests should run. The command to set the nodes in Windows and Linux respectively are:
    For Windows:
    SET NODES=localhost:9999,othermachine:9999,thirdmachine:9999
    For Linux:
    export NODES=localhost:9999,othermachine:9999,thirdmachine:9999
    info The nodes may or may not include the Master machine (localhost). If the Master machine is not included, scripts will not be run on the Master.
    warning "othermachine" and "thirdmachine" are placeholders to illustrate usage. Replace them with actual machine names. The nodes can contain 1 or more machines.
  5. From SahiPro 6.1.0 onwards, it is possible to specify the number of threads that the scripts of the suite would run in.
    The number of maximum parallel browsers would be the minimum of two values - threads, and capacity of the browser specified in browser_types.xml.

    To set the number of parallel browsers to execute the script in, modify
    SET THREADS=5
    To run in one thread only, ie. to run scripts one after the other sequentially, use
    SET THREADS=1

    Please note that this would affect the number of parallel browsers on each Node.
  6. When a Sahi suite is run, some scripts may fail because of environment reasons or due to browser crashes.
    A natural next step for testers is to verify the failure by running the script again.
    Sahi now automatically creates a suite of all failed scripts. The name of the failed suite has _failed_<browsertype> appended to the filename.
    For example if you ran a suite admin/admin.suite in Chrome, failed suite will be created as admin/admin_failed_chrome.suite
    For admin/admin.dd.csv, it will be admin/admin_failed_chrome.dd.csv

    This failed suite file can then be run to verify only the failed scripts.
  7. Sahi can send a mail summarizing the playback. The variable SEND_EMAIL_REPORT can be set as true or false. If true, Sahi sends the mail.

    For Windows:
    SET SEND_EMAIL_REPORT=true
    For Linux:
    export SEND_EMAIL_REPORT=true
  8. Sahi can send a mail based on success or failure or in both the cases. This condition can be set using the EMAIL_TRIGGER variable.

    For Windows:
    SET EMAIL_TRIGGER=success,failure
    For Linux:
    export EMAIL_TRIGGER=success,failure

  9. For a long running suite, Sahi can send periodic emails indicating progress.
    To enable periodic emails, set the following property.

    For Windows:
    SET SEND_EMAIL_REPORT_PERIODICALLY=true
    For Linux:
    export SEND_EMAIL_REPORT_PERIODICALLY=true

    To set time interval (in minutes), use SET SEND_EMAIL_REPORT_PERIODICALLY_TIME variable.

    For Windows:
    SET SEND_EMAIL_REPORT_PERIODICALLY_TIME=30
    For Linux:
    export SEND_EMAIL_REPORT_PERIODICALLY_TIME=30

  10. The relative path to the properties file containing information about the mail such as sender, recipient, host, port etc. can be set using the EMAIL_PROPERTIES variable.
  11. Passwords can be hidden or shown from the console and logs by toggling the EMAIL_PASSWORD_HIDDEN variable.
    It can be set as true or false. If true, Sahi hides the password from Sahi console and logs.
  12. Custom fields can be passed to the scripts using the CUSTOM_FIELDS variable. More than one custom field can be passed. Replace the custom field keys and values as appropriate.

    For Windows:
    SET CUSTOM_FIELDS=-customField customValue -anotherCustomField "another value"
    For Linux:
    export CUSTOM_FIELDS=-customField customValue -anotherCustomField "another value"

    info Specifying custom fields is not mandatory.
  13. The end user can pass a specific id for each suite/script run using the USER_DEFINED_ID variable.

    For Windows:
    SET USER_DEFINED_ID=-userDefinedId  "Some Id"
    For Linux:
    export USER_DEFINED_ID=-userDefinedId  "Some Id"

    Replace the value "Some Id" as appropriate.
    warning The key should remain as userDefinedId.
    info Specifying user defined id is not mandatory.
  14. Sahi can set offline logs to be generated in xml, html, junit, tm6 and excel types. The default type is html.

    For Windows:
    SET LOGS_INFO=xml,html
    For Linux:
    export LOGS_INFO=xml,html
  15. To execute the scripts using drun.bat, open a command window and go to the <sahi_home>/userdata/bin directory. This can also be done easily by clicking the bin link on the dashboard.
  16. Run drun.bat to see the syntax.
    D:\sahi_pro\userdata\bin>drun.bat
    --
    NOTE: Use this batch file only if you are running it on the Master machine. If you wish to use a different Master, use drun_different_master.bat instead.
    --
    Usage: drun <sah file|suite file> <startURL> <browserType> <tags>
    File path is relative to userdata/scripts
    Multiple browsers can be specified using +. Eg. ie+firefox
    tags are used only if the input file is a .csv file, .s.csv file or a .dd.csv file
    --
    Example:
    drun demo/demo.suite http://sahitest.com/demo/ firefox
    drun demo/sahi_demo.sah http://sahitest.com/demo/ ie
    drun demo/sahi_demo.sah http://sahitest.com/demo/ ie+firefox
    drun demo/demo.dd.csv http://sahitest.com/demo/ firefox "win||all"
    drun demo/testcases/testcases_sample.csv http://sahitest.com/demo/ ie "(user||admin)&&medium"
    drun demo/ddcsv/test.dd.csv http://sahitest.com/demo/ ie "(user||admin)&&medium"

    drun demo/framework/sample.xls http://sahitest.com/demo/training/ ie
    drun demo/framework/scenario_new.s.csv http://sahitest.com/demo/training/ ie "all"
    --

    D:\sahi_pro\userdata\bin>

    In the usage above,
    • The first argument is the suite or script path. This path can be relative to the path set in SOURCE_SCRIPTS_PATH, or it can be an absolute path contained in SOURCE_SCRIPTS_PATH.
    • The second argument is the Start URL.
    • The third argument is the Browser Type.
    • Tags (the fourth argument) will be used only when running a scenario file, a data driven suite (.dd.csv) or a CSV as suite with tags.
      Tags are specified to run specific scripts/testcases from the suite/scenario.
      eg. If tags are specified as "(user||admin)&&medium", all the scripts which have 'medium' tag and 'admin' or 'user' (or both) tag will be run

drun_different_master

This should be used when the Master is different from the Initiator.
A typical case where you would use this or the ANT equivalent, is when you have a continuous integration build server that is not capable of launching any UI.
The build server will contain all the scripts but since it cannot launch any UI, it cannot run Sahi tests. In such a case, Sahi can be run on other machines and drun_different_master can be used on the integration build server to trigger the Sahi tests on these machines.

drun_different_master does the following.
Let us look at drun_different_master in more detail.
  1. Sahi (running on the Master) distributes the scripts to different machines based on their capacity and availability of browsers. Please note that Sahi should be running on each of the nodes. Also, on each machine, the browser paths must be correctly specified.
    info Sahi does not need to be installed on the Initiator machine.
  2. The following directory structure is assumed on the Initiator machine. The requisite files like ant-sahi.jar should be copied over from a SahiPro installation. The directory structure of the files is the same in the SahiPro installation.
    <TOP_LEVEL_FOLDER>
    	lib
    		ant-sahi.jar
    	logs
    	userdata
    		bin
    			drun_different_master.bat
    			setjava.bat
    		config
    			email.properties
    		scripts
    			<ALL YOUR SCRIPT FOLDERS AND SCRIPTS>
  3. Open <sahi_home>/userdata/bin/drun_different_master.bat (drun_different_master.sh on linux) using any Editor.
  4. MASTER_HOST should point to the Master machine.
    For Windows:
    SET MASTER_HOST=machine2
    For Linux:
    export MASTER_HOST=machine2
    danger Make sure you change "machine2" to the actual machine name
  5. INITIATOR_ORIGIN_FOLDER is the path to the base folder containing the various scripts. With the above assumed directory structure, it would point to <TOP_LEVEL_FOLDER>/userdata/scripts.
    info The default value need not be changed.
  6. MASTER_STAGING_PATH refers to the Staging folder on the Master machine to which the contents of INITIATOR_ORIGIN_FOLDER will be first synced to. Distribution of scripts will happen from MASTER_STAGING_PATH.
    info The default value need not be changed.
  7. Configure the NODES variable to contain all the machines on which the tests should run. The command to set the nodes in Windows and Linux respectively are:
    For Windows:
    SET NODES=machine2:9999,machine3:9999,machine4:9999
    For Linux:
    export NODES=machine2:9999,machine3:9999,machine4:9999
    info The nodes may or may not include the Master machine. If the Master machine is not included, scripts will not be run on the Master.
    danger Do not include localhost (the Initiator) here since Sahi may not be installed on the Initiator. If you want localhost as one of the nodes, run drun instead.
    warning "machine2", "machine3" and "machine4" are placeholders to illustrate usage. Replace them with actual machine names. The nodes can contain 1 or more machines.
  8. From SahiPro 6.1.0 onwards, it is possible to specify the number of threads that the scripts of the suite would run in.
    The number of maximum parallel browsers would be the minimum of two values - threads, and capacity of the browser specified in browser_types.xml.

    To set the number of parallel browsers to execute the script in, modify
    SET THREADS=5
    To run in one thread only, ie. to run scripts one after the other sequentially, use
    SET THREADS=1

    Please note that this would affect the number of parallel browsers on each Node.
  9. When a Sahi suite is run, some scripts may fail because of environment reasons or due to browser crashes.
    A natural next step for testers is to verify the failure by running the script again.
    Sahi now automatically creates a suite of all failed scripts. The name of the failed suite has _failed_<browsertype> appended to the filename.
    For example if you ran a suite admin/admin.suite in Chrome, failed suite will be created as admin/admin_failed_chrome.suite
    For admin/admin.dd.csv, it will be admin/admin_failed_chrome.dd.csv

    This failed suite file can then be run to verify only the failed scripts.
  10. Sahi can send a mail summarizing the playback. The variable SEND_EMAIL_REPORT can be set as true or false. If true, Sahi sends the mail.
    For Windows:
    SET SEND_EMAIL_REPORT=true
    For Linux:
    export SEND_EMAIL_REPORT=true
  11. Sahi can send a mail based on success or failure or in both the cases. This condition can be set using the EMAIL_TRIGGER variable.
    For Windows:
    SET EMAIL_TRIGGER=success,failure
    For Linux:
    export EMAIL_TRIGGER=success,failure

  12. For a long running suite, Sahi can send periodic emails indicating progress.
    To enable periodic emails, set the following property.

    For Windows:
    SET SEND_EMAIL_REPORT_PERIODICALLY=true
    For Linux:
    export SEND_EMAIL_REPORT_PERIODICALLY=true

    To set time interval (in minutes), use SET SEND_EMAIL_REPORT_PERIODICALLY_TIME variable.

    For Windows:
    SET SEND_EMAIL_REPORT_PERIODICALLY_TIME=30
    For Linux:
    export SEND_EMAIL_REPORT_PERIODICALLY_TIME=30

  13. The relative path to the properties file containing information about the mail such as sender, recipient, host, port etc. can be set using the EMAIL_PROPERTIES variable.
  14. Passwords can be hidden or shown from the console and logs by toggling the EMAIL_PASSWORD_HIDDEN variable.
    It can be set as true or false. If true, Sahi hides the password from Sahi console and logs.
  15. Custom fields can be passed to the scripts using the CUSTOM_FIELDS variable. More than one custom field can be passed. Replace the custom field keys and values as appropriate.
    For Windows:
    SET CUSTOM_FIELDS=-customField customValue -anotherCustomField "another value"
    For Linux:
    export CUSTOM_FIELDS=-customField customValue -anotherCustomField "another value"

    info Specifying custom fields is not mandatory.
  16. The end user can pass a specific id for each suite/script run using the USER_DEFINED_ID variable.
    For Windows:
    SET USER_DEFINED_ID=-userDefinedId  "Some Id"
    For Linux:
    export USER_DEFINED_ID=-userDefinedId  "Some Id"

    Replace the value "Some Id" as appropriate.
    warning The key should remain as userDefinedId.
    info Specifying user defined id is not mandatory.
  17. Sahi can set offline logs to be generated in xml, html, junit, tm6 and excel types. The default type is html. These logs will be generated on the Master and pulled back to the Initiator, since the user would want to see the logs on the Initiator.
    The following set of commands illustrate how HTML and XML logs can be generated.

    For Windows:
    SET UNIQUE_ID=%DATE%__%TIME%
    SET UNIQUE_ID=%UNIQUE_ID: =_%
    SET UNIQUE_ID=%UNIQUE_ID::=_%
    SET UNIQUE_ID=%UNIQUE_ID:/=_%
    
    SET MASTER_HTMLLOGS_DIR=logs/temp/html/%UNIQUE_ID%
    SET MASTER_XMLLOGS_DIR=logs/temp/xml/%UNIQUE_ID%
    
    SET LOGS_INFO=html:%MASTER_HTMLLOGS_DIR%,xml::%MASTER_XMLLOGS_DIR%
    
    SET INITIATOR_OUTPUT_HTMLLOGS_DIR=%TOP_LEVEL_FOLDER%/logs/html/%UNIQUE_ID%
    SET INITIATOR_OUTPUT_XMLLOGS_DIR=%TOP_LEVEL_FOLDER%/logs/xml/%UNIQUE_ID%
    For Linux:
    export UNIQUE_ID=$(date +"%m_%d_%Y")__$(date +"%I_%M_%S")
    
    export MASTER_HTMLLOGS_DIR=logs/temp/html/$UNIQUE_ID
    export MASTER_XMLLOGS_DIR=logs/temp/xml/$UNIQUE_ID
    
    export LOGS_INFO=html:$MASTER_HTMLLOGS_DIR,xml:$MASTER_XMLLOGS_DIR
    
    export INITIATOR_OUTPUT_HTMLLOGS_DIR=$TOP_LEVEL_FOLDER/logs/html/$UNIQUE_ID
    export INITIATOR_OUTPUT_XMLLOGS_DIR=$TOP_LEVEL_FOLDER/logs/xml/$UNIQUE_ID
    info The default values can be left as is.
  18. To execute the scripts using drun_different_master.bat, open a command window and go to the <sahi_home>/userdata/bin directory. This can also be done easily by clicking the bin link on the dashboard.
  19. Run drun_different_master.bat to see the syntax.
    D:\sahi_pro\userdata\bin>drun_different_master.bat
    --
    NOTE: Use this batch file only if you plan to use a different Master machine. Else, use drun.bat instead.
    --
    Usage: drun_different_master.bat <sah file|suite file> <startURL> <browserType> <tags>
    File path is relative to userdata/scripts
    Multiple browsers can be specified using +. Eg. ie+firefox
    tags are used only if the input file is a .csv file, .s.csv file or a .dd.csv file
    --
    Example:
    drun_different_master.bat demo/demo.suite http://sahitest.com/demo/ firefox
    drun_different_master.bat demo/sahi_demo.sah http://sahitest.com/demo/ ie
    drun_different_master.bat demo/sahi_demo.sah http://sahitest.com/demo/ ie+firefox
    drun_different_master.bat demo/testcases/testcases_sample.csv http://sahitest.com/demo/ ie "(user||admin)&&medium"
    drun_different_master.bat demo/ddcsv/test.dd.csv http://sahitest.com/demo/ ie "(user||admin)&&medium"
    drun_different_master.bat demo/framework/sample.xls http://sahitest.com/demo/training/ ie
    drun_different_master.bat demo/framework/scenario_new.s.csv http://sahitest.com/demo/training/ ie "all"
    --

    D:\sahi_pro\userdata\bin>

    In the usage above,
    • The first argument is the suite or script path. This path can be relative to the path set in INITIATOR_ORIGIN_FOLDER, or it can be an absolute path contained in INITIATOR_ORIGIN_FOLDER.
    • The second argument is the Start URL.
    • The third argument is the Browser Type.
    • Tags (the fourth argument) will be used only when running a data driven suite (.dd.csv) or a CSV as suite with tags.
      Tags are specified to run specific scripts/testcases from the suite.
      eg. If tags are specified as "(user||admin)&&medium", all the scripts which have 'medium' tag and 'admin' or 'user' (or both) tag will be run.

Playback via ANT

warning demo.xml has been removed from the Sahi installation. Use the Editor Playback UI to generate the ANT xml content and create an xml with that content in your <SAHI_INSTALLATION_FOLDER>.

ANT xmls have changed in SahiPro 6.1.0. Please regenerate your ANT xmls.

Playback on a single machine

One can now use the Editor Playback UI to generate the ANT xml automatically. Refer here for details on the UI.


This will generate the contents of an ANT xml file. If you wish to add a Retry target as well, click on the Show Retry Target button on the next window.

Once the ANT xml content is generated, copy the content to an empty file and save the file as an xml, say demo.xml in your <SAHI_INSTALLATION_FOLDER>.
You can now run the default ANT target in the xml file as
ant -f demo.xml

NOTE: The main target is the default target, so you do not need to specify the target when running the xml.

The above UI would generate an ANT xml that looks like the following.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
/**
 * Copyright Tyto Software Pvt. Ltd.
 */
-->
<project name="demo" default="runtestsie">
	<taskdef name="sahi" classname="net.sf.sahi.ant.RunSahiTask"  classpath="lib/ant-sahi.jar"/>

	<target name="set_timestamp">
        <tstamp>
            <format property="ts" pattern="yyyy_MM_dd__HH_mm_ss" locale="en, IN"/>
        </tstamp>
	</target>


	<target name="set_properties_ie" depends="set_timestamp">
    		<property name="scriptDir" value="D:/sahi/userdata/scripts/"/>
    		<property name="scriptName" value="demo/ddcsv/test.dd.csv"/>
		<property name="browser" value="ie"/>
		<property name="sendemail" value="true"/>
		<property name="emailtrigger" value="success,failure"/>
		<property name="emailproperties" value="D:\sahi\userdata\config\email.properties"/>
		<property name="sendemailperiodically" value="true"/>
		<property name="sendemailperiodicallytime" value="30"/>
		<property name="emailPasswordHidden" value="true"/>
		<property name="baseURL" value="http://sahitest.com/demo/"/>
		<property name="host" value="localhost"/>
		<property name="port" value="9999"/>
		<property name="singlesession" value="false"/>
		<property name="threads" value="5"/>
		<property name="failedSuiteName" value="test_failed_${browser}.dd.csv"/>
		<property name="failedSuite" value="demo/ddcsv/${failedSuiteName}"/>
	</target>

	<target name="runtestsie" depends="set_properties_ie">
		<sahi suite="${scriptName}"
			browsertype="${browser}"
			sendemail="${sendemail}"
	        	emailtrigger="${emailtrigger}"
	        	emailproperties="${emailproperties}"
	       		sendEmailPeriodically="${sendemailperiodically}"
			sendEmailPeriodicallyTime="${sendemailperiodicallytime}"
			emailPasswordHidden="${emailPasswordHidden}"
			baseurl="${baseURL}"
			sahihost="${host}"
			sahiport="${port}"
			scriptsPathMaster="${scriptDir}"
			failureproperty="sahi.failed.${browser}"
			failedSuiteName="${failedSuiteName}"
			haltonfailure="false"
			singlesession="${singlesession}"
			threads="${threads}"
			tags="(user||admin)&&medium"
			userDefinedId="IETestRun1">
			
			<!-- Custom fields - add, edit or remove as required -->
			<customfield key="user" value="test"/>
			<customfield key="mask_password" value="secret"/>
			<!-- Offline reports -->
			<report type="xml"/>
			<report type="html" logdir="d:/temp/html"/>
			
		</sahi>
		<antcall target="failsahiie"/>
	</target>

    <target name="failsahiie" depends="set_properties_ie" if="sahi.failed.${browser}">
        <fail message="Sahi tests failed on browser ${browser}!"/>
    </target>
</project>

info If you choose the Run sequentially in single browser session option, singlesession attribute would be set to true. Everything else remains the same.

danger Please NOTE:
The above XML content is for illustration purposes only. Use the Editor UI to generate the ANT xml content and create an xml with that content in your <SAHI_INSTALLATION_FOLDER>.

Let us look at the important attributes used in the ANT xml target (specified in bold above).

Attributes and their description

info taskdef classpath is relative to where ant is run from.
scriptDirSpecifies the path to the scripts folder. Can be the absolute path or a path relative to the userdata folder
scriptNameRelative path to the script/suite/data driven suite. It is relative to scriptDir.
browserThe browser on which the suite file plays back
baseurlSpecifies URL which is the starting URL for all the scripts in the suite
hostHostname of the server where Sahi is running (Can be IP as well)
portPort on which Sahi is running
threadsNumber of simultaneous browser instances on which sahi tests will be run.
singlesessionSince this is a parallel run, it will be "false". If "true", runs all scripts in a single browser without closing it between scripts.
sendemailTakes "true" or "false". If "true", Sahi sends an email summarizing the playback.
emailtriggerTakes "success" or "failure" or "success,failure". Triggers email in case of SUCCESS, FAILURE and both cases respectively.
emailpropertiesPath to the properties file that contains details about the mail viz. information about the sender, receiver, host, port, subject, content etc. Path can be the absolute path or relative to where this ant target is run from.
sendemailperiodicallyTakes "true" or "false". If "true", Sahi will send emails periodically till the suite run is complete.
sendemailperiodicallytimeSpecifies the interval in minutes at which periodic emails are to be sent.
failedSuiteNameName of the failed suite. It is of the form <suitename>_failed_<browser>.suite.
failedsuiteRelative path to the failed suite. It is relative to scriptDir.
tagsTags should be specified only for dd.csv and .csv suites. Tags are specified so that it is easy to choose which scripts/testcases to run.
eg. in the target above, all the scripts which have 'medium' tag and 'admin' or 'user' (or both) tag will be run.
userdefinedidThe unique id that the user can pass to differentiate a suite from others. This is an optional attribute.
customfieldCustom fields can be passed to the scripts using the customfield attribute. More than one custom field can be passed, by specifying additional customfield entries. Replace the custom field keys and values as appropriate.
This is an optional attribute.
reportSahi can set offline logs to be generated in xml, html, junit, tm6 and excel types. The default type is html. Add separate entries for each report type as required. This is an optional attribute.

Command to execute the above ANT target

ant -f demo.xml

Distributed playback via ANT

Distributed playback can be achieved through ANT targets as well.

These targets can be used from Jenkins to distribute the scripts of a suite on multiple machines.

The machine which distributes the scripts and manages the distributed run is referred to as the Master. All logs are visible from the Master. The other machines are called Slaves. Any machine in the distributed environment can serve as the Master. The machine which launches the distributed run is referred to as the Initiator.

Distributed run on the same Master

Use the Editor Playback UI to generate the ANT xml content.

In the Editor Playback UI,

This will generate the contents of an ANT xml file. If you wish to add a Retry target as well, click on the Show Retry Target button on the next window.

Once the ANT xml content is generated, copy the content to an empty file and save the file as an xml, say demo.xml in your <SAHI_INSTALLATION_FOLDER>.
You can now run the default ANT target in the xml file as
ant -f demo.xml

NOTE: The main target is the default target, so you do not need to specify the target when running the xml.

The above UI would generate an ANT xml that looks like the following.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
/**
 * Copyright Tyto Software Pvt. Ltd.
 */
-->
<project name="demo" default="drunie">
    <taskdef name="sahid" classname="in.co.sahi.ant.DAntRunner" classpath="lib/ant-sahi.jar"/>

	<target name="set_timestamp">
        <tstamp>
            <format property="ts" pattern="yyyy_MM_dd_HH_mm_ss" locale="en, IN"/>
        </tstamp>
	</target>

	<target name="set_properties_common" depends="set_timestamp">
    		<property name="scriptDir" value="D:/sahi/userdata/scripts/"/>
		<property name="host" value="localhost"/>
		<property name="port" value="9999"/>
	</target>



	<target name="set_properties_ie" depends="set_properties_common">
    		<property name="scriptName" value="demo/ddcsv/test.dd.csv"/>
		<property name="browser" value="ie"/>
		<property name="sendemail" value="true"/>
		<property name="emailtrigger" value="success,failure"/>
		<property name="emailproperties" value="D:\sahi\userdata\config\email.properties"/>
		<property name="sendemailperiodically" value="true"/>
		<property name="sendemailperiodicallytime" value="30"/>
		<property name="emailPasswordHidden" value="true"/>
		<property name="baseURL" value="http://sahitest.com/demo/"/>
		<property name="failedSuiteName" value="test_failed_${browser}.dd.csv"/>
		<property name="failedSuite" value="demo/ddcsv/${failedSuiteName}"/>
		<property name="threads" value="5"/>
	</target>

    <target name="drunie" depends="set_properties_ie, set_timestamp">
    	<sahid suite="${scriptName}"
			sendEmail="${sendemail}"
			emailtrigger="${emailtrigger}"
			emailProperties="${emailproperties}"
			sendEmailPeriodically="${sendemailperiodically}"
			sendEmailPeriodicallyTime="${sendemailperiodicallytime}"
			emailPasswordHidden="${emailPasswordHidden}"
			baseurl="${baseURL}"
			sahihost="${host}"
			sahiport="${port}"
			failureproperty="sahi.failed.${browser}"
			failedSuiteName="${failedSuiteName}"
			haltonfailure="false"
			browsertype="${browser}"
			scriptsPathMaster="${scriptDir}"
			threads="${threads}"
			ignorePattern=".*(svn|copied).*"
			tags="(user||admin)&&medium"
			userDefinedId="IETestRun1">
			
			<!-- Custom fields - add, edit or remove as required -->
			<customfield key="user" value="test"/>
			<customfield key="mask_password" value="secret"/>
			<!-- Scripts will be distributed across all the nodes. The nodes may or may not include the Master machine -->
			<node host="localhost" port="9999"/>
			<node host="192.168.1.29" port="9999"/>
			<!-- Offline reports -->
			<report type="xml"/>
			<report type="html" logdir="d:/temp/html"/>
			
    	</sahid>
	<antcall target="failsahiie"/>
    </target>

    <target name="failsahiie" depends="set_properties_ie" if="sahi.failed.${browser}">
        <fail message="Sahi tests failed on browser ${browser}!"/>
    </target>
</project>

danger Please NOTE:
The above XML content is for illustration purposes only. Use the Editor UI to generate the ANT xml content and create an xml with that content in your <SAHI_INSTALLATION_FOLDER>.

Let us look at the important attributes used in the ANT xml target (specified in bold above).

Attributes and their description

info taskdef classpath is relative to where ant is run from.
scriptDirSpecifies the path to the scripts folder. Can be the absolute path or a path relative to the userdata folder
hostHostname of the server where Sahi is running (Can be IP as well). Leave this as localhost
portPort on which Sahi is running
scriptNameRelative path to the script/suite/data driven suite. It is relative to scriptDir.
browserThe browser on which the suite file plays back
threadsNumber of simultaneous browser instances on which sahi tests will be run.
baseurlSpecifies URL which is the starting URL for all the scripts in the suite
sendemailTakes "true" or "false". If "true", Sahi sends an email summarizing the playback.
emailtriggerTakes "success" or "failure" or "success,failure". Triggers email in case of SUCCESS, FAILURE and both cases respectively.
emailpropertiesPath to the properties file that contains details about the mail viz. information about the sender, receiver, host, port, subject, content etc. Path can be the absolute path or relative to where this ant target is run from.
sendemailperiodicallyTakes "true" or "false". If "true", Sahi will send emails periodically till the suite run is complete.
sendemailperiodicallytimeSpecifies the interval in minutes at which periodic emails are to be sent.
failedSuiteNameName of the failed suite. It is of the form <suitename>_failed_<browser>.suite.
failedsuiteRelative path to the failed suite. It is relative to scriptDir.
tagsTags should be specified only for dd.csv and .csv suites. Tags are specified so that it is easy to choose which scripts/testcases to run.
eg. in the target above, all the scripts which have 'medium' tag and 'admin' or 'user' (or both) tag will be run.
userdefinedidThe unique id that the user can pass to differentiate a suite from others. This is an optional attribute.
nodeEach node attribute specifies a machine on which the tests should run. Add as many node entries as there are machines to run. The nodes may or may not include the Master machine (localhost). If the Master machine is not included, scripts will not be run on the Master. There can be 1 or more nodes.
customfieldCustom fields can be passed to the scripts using the customfield attribute. More than one custom field can be passed, by specifying additional customfield entries. Replace the custom field keys and values as appropriate.
This is an optional attribute.
reportSahi can set offline logs to be generated in xml, html, junit, tm6 and excel types. The default type is html. Add separate entries for each report type as required. This is an optional attribute.

Command to execute the above ANT target

ant -f demo.xml

Distributed run on a different Master

Use the Editor Playback UI to generate the ANT xml content.

In the Editor Playback UI,

This will generate the contents of an ANT xml file. If you wish to add a Retry target as well, click on the Show Retry Target button on the next window.

Once the ANT xml content is generated, copy the content to an empty file and save the file as an xml, say demo.xml in your <SAHI_INSTALLATION_FOLDER>.
You can now run the default ANT target in the xml file as
ant -f demo.xml

NOTE: The main target is the default target, so you do not need to specify the target when running the xml.

The above UI would generate an ANT xml that looks like the following.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
/**
 * Copyright Tyto Software Pvt. Ltd.
 */
-->
<project name="demo" default="drundiffmasterie">
    <taskdef name="sahid" classname="in.co.sahi.ant.DAntRunner" classpath="lib/ant-sahi.jar"/>
    <taskdef name="sahisync" classname="in.co.sahi.ant.DAntSync" classpath="lib/ant-sahi.jar"/>
	<taskdef name="sahipull" classname="in.co.sahi.ant.DAntPull" classpath="lib/ant-sahi.jar"/>
	<taskdef name="sahidelete" classname="in.co.sahi.ant.DAntDelete" classpath="lib/ant-sahi.jar"/>

	<target name="set_timestamp">
        	<tstamp>
            	<format property="ts" pattern="yyyy_MM_dd__HH_mm_ss" locale="en, IN"/>
        	</tstamp>
	</target>

	<target name="set_properties_common" depends="set_timestamp">
    		<property name="scriptDir" value="D:/sahi/userdata/scripts/"/>
		<property name="masterhost" value="192.168.1.30"/>
		<property name="masterport" value="9999"/>
	</target>



	<target name="set_properties_ie" depends="set_properties_common">
		<property name="scriptName" value="demo/ddcsv/test.dd.csv"/>
		<property name="browser" value="ie"/>
		<property name="sendemail" value="true"/>
		<property name="emailtrigger" value="success,failure"/>
		<property name="emailproperties" value="D:\sahi\userdata\config\email.properties"/>
		<property name="sendemailperiodically" value="true"/>
		<property name="sendemailperiodicallytime" value="30"/>
		<property name="emailPasswordHidden" value="true"/>
		<property name="baseURL" value="http://sahitest.com/demo/"/>
		<property name="failedSuiteName" value="test_failed_${browser}.dd.csv"/>
		<property name="failedSuite" value="demo/ddcsv/${failedSuiteName}"/>
		<property name="threads" value="5"/>
	</target>

    <target name="drundiffmasterie" depends="set_properties_ie, set_timestamp">
    	<!-- Sync suite to Master staging folder -->
		<sahisync originFolder="${scriptDir}" destFolder="temp/scripts/staging/${ts}_${browser}" ignorePattern=".*(svn|copied).*" suitePath="${scriptDir}${scriptName}" csvSeparator="," scriptExtensions="sah;sahi;js" scenarioExtensions=".s.csv;xls;xlsx">
	    	<node host="${masterhost}" port="${masterport}"/>
		</sahisync>

    	<sahid suite="${scriptName}"
			sendEmail="${sendemail}"
			emailtrigger="${emailtrigger}"
			emailProperties="${emailproperties}"
			sendEmailPeriodically="${sendemailperiodically}"
			sendEmailPeriodicallyTime="${sendemailperiodicallytime}"
			emailPasswordHidden="${emailPasswordHidden}"
			baseurl="${baseURL}"
			sahihost="${masterhost}"
			sahiport="${masterport}"
			failureproperty="sahi.failed.${browser}"
			failedSuiteName="${failedSuiteName}"
			haltonfailure="false"
			browsertype="${browser}"
			scriptsPathMaster="temp/scripts/staging/${ts}_${browser}/"
			scriptsPathInitiator="${scriptDir}"
			threads="${threads}"
			isDifferentMaster="true"
			ignorePattern=".*(svn|copied).*"
			tags="(user||admin)&&medium"
			userDefinedId="IETestRun1">
			
			<!-- Custom fields - add, edit or remove as required -->
			<customfield key="user" value="test"/>
			<customfield key="mask_password" value="secret"/>
			<!-- Scripts will be distributed across all the nodes. The nodes may or may not include the Master machine -->
			<node host="192.168.1.28" port="9999"/>
			<node host="192.168.1.29" port="9999"/>
			
			<!-- Offline reports -->
			<report type="xml" logdir="logs/temp/xml/${ts}"/>
			<report type="html" logdir="logs/temp/html/${ts}"/>
    	</sahid>

    	<!-- Delete suite from Master staging folder -->
		<sahidelete host="${masterhost}"
    			port="${masterport}"
    			filePath="temp/scripts/staging/${ts}_${browser}">
    		</sahidelete>
		<!-- Pull the logs from the Master onto the Initiator machine -->
		<sahipull sourceHost="192.168.1.30" sourcePort="9999" originFolder="logs/temp/xml/${ts}" destFolder="logs/xml" ignorePattern=".*(svn|copied).*"/>
		<sahipull sourceHost="192.168.1.30" sourcePort="9999" originFolder="logs/temp/html/${ts}" destFolder="d:/temp/html" ignorePattern=".*(svn|copied).*"/>
		<antcall target="failsahiie"/>
    </target>

    <target name="failsahiie" depends="set_properties_ie" if="sahi.failed.${browser}">
        <fail message="Sahi tests failed on browser ${browser}!"/>
    </target>

</project>

danger Please NOTE:
The above XML content is for illustration purposes only. Use the Editor UI to generate the ANT xml content and create an xml with that content.

Let us look at the important attributes used in the ANT xml target (specified in bold above).

Attributes and their description

info taskdef classpath is relative to where ant is run from.
scriptDirSpecifies the path to the scripts folder on the Initiator machine. This can be an absolute path or a path relative to where Ant is run from
masterhostHostname of the different Master server where Sahi is running (Can be IP as well)
masterportPort on which Sahi is running
scriptNameRelative path to the script/suite/data driven suite. It is relative to scriptDir.
browserThe browser on which the suite file plays back
baseurlSpecifies URL which is the starting URL for all the scripts in the suite
threadsNumber of simultaneous browser instances on which sahi tests will be run.
sendemailTakes "true" or "false". If "true", Sahi sends an email summarizing the playback.
emailtriggerTakes "success" or "failure" or "success,failure". Triggers email in case of SUCCESS, FAILURE and both cases respectively.
emailpropertiesPath to the properties file that contains details about the mail viz. information about the sender, receiver, host, port, subject, content etc. Path can be the absolute path or relative to where this ant target is run from.
sendemailperiodicallyTakes "true" or "false". If "true", Sahi will send emails periodically till the suite run is complete.
sendemailperiodicallytimeSpecifies the interval in minutes at which periodic emails are to be sent.
failedSuiteNameName of the failed suite. It is of the form <suitename>_failed_<browser>.suite.
failedsuiteRelative path to the failed suite. It is relative to scriptDir.
tagsTags should be specified only for dd.csv and .csv suites. Tags are specified so that it is easy to choose which scripts/testcases to run.
eg. in the target above, all the scripts which have 'medium' tag and 'admin' or 'user' (or both) tag will be run.
userdefinedidThe unique id that the user can pass to differentiate a suite from others. This is an optional attribute.
nodeEach node attribute specifies a machine on which the tests should run. Add as many node entries as there are machines to run. The nodes may or may not include the Master machine. If the Master machine is not included, scripts will not be run on the Master. There can be 1 or more nodes.
customfieldCustom fields can be passed to the scripts using the customfield attribute. More than one custom field can be passed, by specifying additional customfield entries. Replace the custom field keys and values as appropriate.
This is an optional attribute.

Command to execute the above ANT target

ant -f demo.xml

Email.properties file explained

Configuration file for javax.mail

If a value for an item is not provided, then system defaults will be used.

mail.smtp.starttls.enablebooleanIf true, enables the use of the STARTTLS command (if supported by the server) to switch the connection to a TLS-protected connection before issuing any login commands. Note that an appropriate trust store must configured so that the client will trust the server's certificate.
mail.hostStringThe server to connect to.
mail.portintThe server port to connect to.
mail.userStringDefault user name.
mail.passwordStringPassword
mail.smtp.authbooleanIf true, attempt to authenticate the user using the AUTH command.
mail.isSSLbooleanIf true, uses SSL to connect and use the SSL port by default.
mail.fromStringEmail address of the sender
mail.toStringEmail address of the sender's To field. For multiple address separate by comma(,).
mail.ccStringEmail address of the sender's CC field, for multiple address separate by comma(,).
mail.bccStringEmail address of the sender's BCC field. for multiple address separate by comma(,).
mail.subject.prefixStringThe subject for the email.
mail.content.prefixStringThe body content for the email.

Sample properties file

mail.smtp.starttls.enable=true
mail.host=smtp.gmail.com
mail.port=25
mail.user=your_email@gmail.com
mail.password=your_password
mail.smtp.auth=true
mail.isSSL=false
mail.from=your_email@gmail.com
mail.to=recepient1@gmail.com,recepient2@gmail.com,recepient3@gmail.com
mail.cc=recepient4@gmail.com,recepient5@gmail.com
mail.bcc=recepient6@gmail.com,recepient7@gmail.com
mail.subject.prefix=my subject
mail.content.prefix=my body

Email template

Emails that get sent out at the end of a suite run, use a template. This template can be viewed from email_template.txt in the Configure UI.

The layout, format and content can be modified.

With regard to content, the following information can be added.

Distributed Runs - More Information

The following information is applicable for distributed runs on the same Master as well as on a different Master. It is applicable irrespective of how the run was executed - Editor, ANT xml, batch file or shell script, etc.

Smart zip (from SahiPro 6.1.0)

In versions prior to SahiPro 6.1.0, the entire scripts folder would get synced to different nodes. If the scripts folder was huge, this would take time and also cause memory issues at times.
As of SahiPro 6.1.0, we only sync the scripts necessary to execute a run. Please refer to _resource API on how to include resources used in your scripts.

Distribute scripts in rotation (from SahiPro 6.1.0)

Prior to SahiPro 6.1.0, if there were multiple nodes, priority would always be given to the first node in the Nodes list, and would decrease as we go to the end of the nodes list. Thus you would always find that more scripts were run on the initial nodes than on the nodes at the end of the list.
As of this release, scripts are assigned to nodes one by one so long as capacity is available on the node. So scripts get rotated and the distribution becomes more even across Nodes.

For example, assume that there are 4 nodes, the capacity of Chrome browser on each node is 5, and that there are 50 scripts to distribute.
Prior to SahiPro 6.1.0 - The first 5 scripts will go to Node 1. If at the time of assigning the 6th script, any of the earlier 5 scripts gets completed, the 6th script would also go to Node 1 since it has free capacity.
As of SahiPro 6.1.0 - The first script will go to Node 1, the second to Node 2, and so on.

Scripts rotation can be switched off by setting the flag drun.run_scripts_in_rotation to false in userdata.properties. By default, this value is true.

Nodes monitoring (from SahiPro 6.1.0)

From SahiPro 6.1.0, the nodes participating in a distributed run are now monitored internally.
Node monitoring can be turned off by setting the flag drun.nodes_monitoring_enabled to false in userdata.properties. By default, this value is true.

Ability to register Nodes externally (from SahiPro 6.1.0)

It is now possible to register a new Node for a currently running distributed run.

Using registerNodes.bat/registerNodes.sh
  1. Open a command prompt and cd to sahi/userdata/bin
    (or click on the "Bin" link on the Sahi Dashboard)
  2. Run register_nodes.bat to see the syntax
    D:\sahi_pro\userdata\bin>register_nodes.bat
    --
    Usage: register_nodes.bat <extnodes> <userDefinedId> <suiteId>
    - extnodes is a comma separated string of host:port combos, example: "machine1:9999,machine2:9999".
    If multiple nodes are specified, enclose them in double quotes.
    - userDefinedId is the User defined Id specified while running the original suite
    - suiteId is the SuiteId of the running suite, and can be found from Suite Info section in the Suite Report log
    - NOTE: Only one of suiteId or userDefinedId is required. If both suiteId and userDefinedId are passed, suiteId will be used to identify the running suite.
    --
    Example:
    1. Registering one machine using userDefinedId (say abc1234).

    register_nodes.bat machine1:9999 abc1234

    2. Registering more than one machine using userDefinedId.

    register_nodes.bat "machine1:9999,machine2:9999" abc1234

    3. Registering one machine using suiteId (say sahi_a0ba301605a8f04cb10881e0ddcd96f9dfbd). NOTE: Some value HAS to be passed for the second parameter - userDefinedId. Pass "".

    register_nodes.bat machine1:9999 "" sahi_a0ba301605a8f04cb10881e0ddcd96f9dfbd

    4. Registering more than one machine using suiteId. NOTE: Some value HAS to be passed for the second parameter - userDefinedId. Pass "".

    register_nodes.bat "machine1:9999,machine2:9999" "" sahi_a0ba301605a8f04cb10881e0ddcd96f9dfbd
    --

    D:\sahi_pro\userdata\bin>
  3. Nodes can be registered for a currently running suite. The suite can be specified either using userDefinedId or suiteId. If both are specified, suiteId will be used. suiteId for the current run can be found from the Suite Info section of the Suite report logs.
    • To register using userDefinedId, use something like the following
      register_nodes.bat "192.168.1.100:9999,192.168.1.101:9999" myUserDefinedId
      info Multiple nodes can be specified using comma separator. If more than one node is specified, use double quotes for the nodes.
      Note that these values are indicative. Please use your own values.
    • To register using suiteId, use something like the following
      register_nodes.bat "192.168.1.100:9999,192.168.1.101:9999" "" sahi_a0ba301605a8f04cb10881e0ddcd96f9dfbd
      info
      • Pass "" as the second parameter for userDefinedId.
      • Multiple nodes can be specified using comma separator. If more than one node is specified, use double quotes for the nodes.
      Note that these values are indicative. Please use your own values.
Using an ANT target
Copy the following content to an empty file and save the file as an xml, say registernodes.xml in your <SAHI_INSTALLATION_FOLDER>.
You can now run the default ANT target in the xml file as
ant -f registernodes.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
/**
 * Copyright Tyto Software Pvt. Ltd.
 */
-->
<project name="demo" default="register">
    <taskdef name="sahinodeclient" classname="in.co.sahi.ant.DAntNodeClient" classpath="lib/ant-sahi.jar"/>

	<!-- Use suiteId or userDefinedId. If both are specified, suiteId would be used. -->
	<target name="register">
		<sahinodeclient
			sahihost="localhost"
			sahiport="9999"
			userDefinedId="myUserDefinedId">
			<node host="192.168.1.100" port="9999"/>
			<node host="192.168.1.101" port="9999"/>
		</sahinodeclient>
	</target>
</project>

Please note all these values are indicative.

Attributes and their description
info taskdef classpath is relative to where ant is run from.

sahihostHostname of the Master where Sahi is running (Can be IP as well).
sahiportPort on which Sahi is running
userDefinedIdUserDefinedId specified while running the original suite
suiteIdSuiteId of the running suite. Get this value from the Suite Info section of the Suite Report logs
nodeSpecify one entry each for every node that you want to register.

info Specify either userDefinedId or suiteId. If both are specified, suiteId will be used.

Command to execute the above ANT target
ant -f registernodes.xml

Killing a running script/suite

warning WARNING: Killing a suite (or all running suites) in the middle of a run is not a routine task. You would kill a suite only if something went wrong and you wish to stop the suite execution.

Stop All from the Editor can be used to kill all running scripts/suites.

This is now possible through an ANT target as well.

The ANT target gives the ability to kill a specific running suite or kill all the running suites.

Copy the following content to an empty file and save the file as an xml, say killall.xml in your <SAHI_INSTALLATION_FOLDER>.
You can now run the default ANT target in the xml file as
ant -f killall.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
/**
 * Copyright Tyto Software Pvt. Ltd.
 */
-->
<project name="demo" default="kill">
    <taskdef name="sahikill" classname="in.co.sahi.ant.DKillTask" classpath="lib/ant-sahi.jar"/>

	<!-- This target will kill the running suite(s) on sahihost. sahihost can be other than localhost as well. -->
	<!-- If neither suiteId nor userDefinedId is specified, all running suites on this Master will be killed. -->
	<!-- If you wish to kill a specific suite, use suiteId or userDefinedId. If both are specified, suiteId would be used. -->
	<target name="kill">
		<sahikill
			sahihost="localhost"
			sahiport="9999">
		</sahikill>
    </target>
</project>

Attributes and their description
info taskdef classpath is relative to where ant is run from.
sahihostHostname of the Master where Sahi is running (Can be IP as well).
sahiportPort on which Sahi is running
userDefinedIdUserDefinedId specified while running the original suite
suiteIdSuiteId of the running suite. Get this value from the Suite Info section of the Suite Report logs

info
  • If neither suiteId nor userDefinedId is specified, all running suites on this Master will be killed.
  • If you wish to kill a specific suite, use suiteId or userDefinedId. If both are specified, suiteId would be used.

Command to execute the above ANT target
ant -f killall.xml

Changes in staging and copied folders behaviour (from SahiPro 6.1.0)

In a distributed run, scripts get copied to Nodes in temp/scripts/copied directory, under timestamped folders. At the end of the run, these timestamped folders get deleted. Likewise, in a distributed run on a different Master, scripts first get synced to a timestamped folder inside temp/scripts/staging directory of the Master. At the end of the run, these timestamped folders get deleted.

These changes have been done to support sharing of a Master or Node between different distributed runs at the same time.

If for debugging purposes, one wants the staging and copied folders to remain undeleted, one can set the flag drun.debugging_enabled to true in userdata.properties. Please refer to instructions in sahi.properties. Use with extreme caution. By default, this value is false.

Experimental feature: Ability to share Master and Nodes between different distributed runs (from SahiPro 6.1.0)

It is possible now to use a machine as Master for different distributed runs in parallel. The same applies for Nodes as well. This could be useful in a Test Lab kind of environment where a powerful machine can serve as the Master for multiple distributed runs.