PMC:QA:Sahi integrate with Ant

From ADempiere
Revision as of 19:56, 18 March 2010 by Sunny (Talk)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
This Wiki is read-only for reference purposes to avoid broken links.

Sahi integrate with Ant

Let's research how to integrate Sahi with ant first before hudson with Sahi.

test Environment:

  • firefox-3.0 broswer
  • jdk-1.6.11
  • ant-1.7.1

Ant Integration

Start and stop Sahi via Ant

Example:

Start Sahi via Ant

Template:Code language=xml <target name="startsahi" description="start sahi proxy">

              <java classname="net.sf.sahi.Proxy" fork="true" spawn="true" dir="${sahi.home}">
                       <classpath location="${sahi.home}/lib/sahi.jar">
                               <fileset dir="${sahi.home}/extlib" includes="**/*.jar"/>
                       </classpath>
                       <arg value="${sahi.home}" id="basePath"/>
                       <arg value="${user.data}" id="userdataPath"/>
               </java>
       </target>

Template:/code

Stop Sahi via Ant

Template:Code language=xml <target name="stopsahi" description="stop sahi server">

               <sahi stop="true" sahihost="localhost" sahiport="9999"/>
       </target>

Template:/code

run them by:

Template:Code language=none sahi # ant -f zkdemo.xml startsahi/stopsahi Template:/code

Running tests in batch mode

  • **Description**

Runs a suite of sahi files. This opens multiple browser windows , executes sahi scripts, and logs the results. The build can be made to fail based on a failureproperty.

  • **Parameters**

|=Attribute |=Description |=Required |suite path to |suite file | |browser |Path to browser |executable |baseurl |url relative to which all urls to be tested will be resolved | |sahihost |IP or hostname of server where sahi is running | |sahiport |port where sahi is running | |failureproperty |Name of property which will be set to false in case build fails. | |haltonfailure |Takes "true" or "false". Specifies if build should stop executing other tests if one test fails.| |threads |Number of simultaneous browser instances where sahi tests will be run. Do not use this property if using firefox. |optional |logdir |Directory to output this suite's results. If absent, uses the default playback logs dir. |optional


suites

Once a few scripts have been recorded, scripted and refactored, they need to be run in a batch mode. Sahi does this via suites.

A suite file is a normal text file with an extension of .suite. For example you may have myapp.suite.

Each line of myapp.suite will have this syntax:

><testName.sah> <absolute url or url relative to the baseurl>

eg.

>test1.sah /startPageForTest1.jsp >test2.sah http://www.d2.com/startPageForTest2.htm

In the above example, note that the first and third lines use relative urls and the second line uses an absolute url.

The suite can be executed through the command line or through ant.

    • Example**:

in directory:/mnt/sda4/Sahi/sahi/userdata/scripts

create suit "my.suit",the content of it as follow:

>test_forums.sah

and test_forums.sah

>_setValue(_textbox("q"), "sahi forums"); >_click(_submit("Google Search")); >_assertExists(_link("Sahi - Web Automation and Test Tool")); >_click(_link("Sahi - Web Automation and Test Tool")); >_assertExists(_span("Customer Stories and Testimonials"));

Using the commandline

The java class net.sf.sahi.test.TestRunner is used to run suites from the command line.

Usage:

>java TestRunner <suite_name> <browser_executable> <start_url> <log_dir> <sahi_host> <sahi_port> <number_of_threads> ><browser_process_name> [<browser_option>]

Set log_dir to “default” if you want to log to the default log dir."default" is sahi/userdata/logs/playback directory

browser_process_name is used to find and kill browser process. On windows set it to the exe; eg. firefox.exe or iexplore.exe; Note that this attribute was added in Sahi V2 and may not be needed for older Sahi versions.

Set browser_option to “-profile /browser/ff/profiles/sahi$threadNo” for Firefox.

For Firefox:

Template:Code language=none java -cp ..\lib\ant-sahi.jar net.sf.sahi.test.TestRunner D:/sahi/scripts/demo/demo.suite "C:\Program Files\Mozilla Firefox\firefox.exe" http://machine_name:10000/demo/ default localhost 9999 3 firefox.exe "-profile D:\sahi\browser\ff\profiles \sahi$threadNo -no-remote" Template:/code


=test example

  • **first start Sahi**

you can start sahi by the follow way or run ant script.

>bin # ./sahi.sh

  • **Configuring the browser**

you can configure:

 Firefox:
   * Go to Tools > Options > General > Connection Settings >
   * Set to "Manual Proxy Configuration"
   * Set "HTTP Proxy" to "localhost"
   * Set "Port" to "9999". (This setting can be modified through <sahi_root>/config/sahi.properties)
   * Do the same for "SSL Proxy" too, if you wish to record and playbacl https sites
   * Keep "Use the same proxy for all protocol" unchecked as Sahi does not understand protocols other than HTTP
   * NOTE: "No Proxy for" should NOT have localhost in it.

or configure via firefox plugin FoxyProxy,how to you can refer to **"Configuring Firefox to use Sahi's proxy" part in doc Sahi**

  • **run test suit**

Template:Code language=none workbox sahi # java -cp lib/ant-sahi.jar net.sf.sahi.test.TestRunner /mnt/sda4/Sahi/sahi/userdata/scripts/my.suite "/usr/bin /firefox" http://www.google.com /mnt/sda4/Sahi/sahi/default localhost 9999 3 firefox Template:/code

or

Template:Codejava -cp lib/ant-sahi.jar net.sf.sahi.test.TestRunner /mnt/sda4/Sahi/sahi/userdata/scripts/my.suite "/usr/bin/firefox" http://www.google.com /mnt/sda4/Sahi/sahi/default localhost 9999 3 firefox "-profile /mnt/sda4/Sahi/sahi/userdata/browser/ff/profiles/sahi0 -no-remote"Template:/code

then if will output follows in console:

Template:Code language=none suiteName = /mnt/sda4/Sahi/sahi/userdata/scripts/my.suite browser = /usr/bin/firefox base = http://www.google.com sahiHost = localhost port = 9999 threads = 3 browserOption = browserProcessName = firefox Added shutdown hook. http://localhost:9999/_s_/dyn/Suite_start?suite=%2Fmnt%2Fsda4%2FSahi%2Fsahi%2Fuserdata%2Fscripts%2Fmy.suite&base=http%3A%2F %2Fwww.google.com&browser=%2Fusr%2Fbin%2Ffirefox&threads=3&browserProcessName=firefox& sahisid=sahi_ac3e412802a05045b6085240682325b647cc&html=%2Fmnt%2Fsda4%2FSahi%2Fsahi%2Fdefault&browserOption= Template:/code

and during this process,it will run my.suite(the script test_forums.sah).

base on http://www.google.com,search "sahi forums",then submit,click "Sahi - Web Automation and Test Tool" to link page sahi forums

    • the result**:

>Status:SUCCESS >Shutting down ...

and in the console of start sahi show as follow:

Template:Code language=none workbox bin # ./sahi.sh ... >>>>>> Tests size = 1

        1. Running Script: /mnt/sda4/Sahi/sahi/userdata/scripts/test_forums.sah

/usr/bin/firefox http://sahi.example.com/_s_/dyn /Player_auto?file=%2Fmnt%2Fsda4%2FSahi%2Fsahi%2Fuserdata%2Fscripts%2Ftest_forums.sah__SahiAmpersandSahi__startUrl=http%3A%2F %2Fwww.google.com__SahiAmpersandSahi__sahisid=sahi_7af7ae8204768046850be3d00ef937196099sahix5df00e7b0e2b304b6d0b1bc00c0eed060ac8x PIDs: [10616, 10653, 10655]; 10098 ms Killing /mnt/sda4/Sahi/sahi/userdata/scripts/test_forums.sah Kill: [10616, 10653, 10655] Shutting down ... Template:/code

    • log**

we set log dir "/mnt/sda4/Sahi/sahi/default",you can goto it and view the log

Saan.png

Using ant

    • The above command can be written as ant script.**

Ant target for firefox:

Template:Code language=xml <taskdef name="sahi" classname="net.sf.sahi.ant.RunSahiTask" classpath="lib/ant-sahi.jar"/> <target name="runfftests"> <sahi suite="../scripts/demo/demo.suite" browser="C:\Program Files\Mozilla Firefox\firefox.exe" baseurl="http://machine_name/path/" sahihost="localhost" sahiport="9999" failureproperty="sahi.failed" haltonfailure="false" browseroption="-profile ${basedir}/browser/ff/profiles/sahi$threadNo -no-remote" browserprocessname="firefox.exe" threads="3" > </sahi> <antcall target="failsahi"/> </target> Template:/code

    • Example**:

Template:Code language=xml <target name="runfftests">

               <sahi suite="${user.data}/scripts/my.suite"
                     browser="/usr/bin/firefox"
                     baseurl="${urlbase}"
                     sahihost="localhost"
                     sahiport="9999"
                     failureproperty="sahi.failed" 
                     haltonfailure="false"
                     browserProcessName="firefox"
                     threads="3">
               </sahi>
             <antcall target="failsahi"/> 
       </target>

Template:/code

    • Test**

put the above code to zkdemo.xml file.

Template:Code language=none workbox sahi # ant -f zkdemo.xml Buildfile: zkdemo.xml runfftests:

    [sahi]
    [sahi] suiteName = /mnt/sda4/Sahi/sahi/userdata/scripts/my.suite
    [sahi] browser = /usr/bin/firefox
    [sahi] base = http://www.google.com/
    [sahi] sahiHost = localhost
    [sahi] port = 9999
    [sahi] threads = 3
    [sahi] browserOption = null
    [sahi] browserProcessName = firefox
    [sahi] Added shutdown hook.
    [sahi] http://localhost:9999/_s_/dyn/Suite_start?suite=%2Fmnt%2Fsda4%2FSahi%2Fsahi%2Fuserdata%2Fscripts%2Fmy.suite&base=http

%3A%2F%2Fwww.google.com%2F&browser=%2Fusr%2Fbin%2Ffirefox&threads=3&browserProcessName=firefox& sahisid=sahi_81b7eada0ec06040580a2bf0075755660811&html=

    [sahi] STATUS:SUCCESS

failsahi: BUILD SUCCESSFUL Total time: 20 seconds Shutting down ... Template:/code

zkdemo.xml

whole scipts of zkdemo.xml

Template:Code language=xml <?xml version="1.0" encoding="ISO-8859-1"?> <project name="bids" default="runfftests">

       <property environment="env"/>
       <property name="sahi.home" value="${env.SAHI_HOME}" location="/mnt/sda4/Sahi/sahi/" />
       <property name="user.data" value="${env.SAHI_USERDATA_DIR}" location="/mnt/sda4/Sahi/sahi/userdata"  />
       <property name="urlbase" value="http://www.google.com/"/>
       <taskdef name="sahi" classname="net.sf.sahi.ant.RunSahiTask" classpath="${sahi.home}/lib/ant-sahi.jar"/>
       <target name="runfftests">
       <antcall target="startsahi"/>
       <sleep seconds="4"/>
               <sahi suite="${user.data}/scripts/my.suite"
                     browser="/usr/bin/firefox"
                     baseurl="${urlbase}"
                     sahihost="localhost"
                     sahiport="9999"
                     failureproperty="sahi.failed"
                     haltonfailure="false"
                     browserProcessName="firefox"
                     threads="3">
               </sahi>
               <sleep seconds="4"/>
               <antcall target="stopsahi"/>
               <sleep seconds="4"/>
               <antcall target="failsahi"/>
       </target>
               <target name="failsahi" if="sahi.failed">
               <fail message="Sahi tests failed!"/>
       </target>
               <target name="startsahi" description="start sahi proxy">
               <java classname="net.sf.sahi.Proxy" fork="true" spawn="true" dir="${sahi.home}">
                       <classpath location="${sahi.home}/lib/sahi.jar">
                               <fileset dir="${sahi.home}/extlib" includes="**/*.jar"/>
                       </classpath>
                       <arg value="${sahi.home}" id="basePath"/>
                       <arg value="${user.data}" id="userdataPath"/>
               </java>
       </target>
       <target name="stopsahi" description="stop sahi server">
               <sahi stop="true" sahihost="localhost" sahiport="9999"/>
       </target>

</project>


Template:/code


Referrence