॥ स्वक्ष ॥

To content | To menu | To search

Tag - QA-TDD

Entries feed - Comments feed

2010 July 25 [Sunday]

Selenium RC and Python client

Selenium is quite a famous testing tool and has a lot of documentation so I wont bother to repeat stuff from there, rather just focus on the bits where I feel the documentation could improve.

STEP#0.  After downloading selenium remote-control change to the directory where you extracted it. {Btw, to install selenium on your local machine, download selenium from here.}

~$ cd selenium-remote-control-1.0.3/
~/selenium-remote-control-1.0.3/selenium-server-1.0.3$ sudo java -jar selenium-server.jar
09:03:05.618 INFO - Java: Sun Microsystems Inc. 1.6.0_0-b11
09:03:05.638 INFO - OS: Linux 2.6.24-28-generic i386
09:03:05.722 INFO - v2.0 [a2], with Core v2.0 [a2]
09:03:06.304 INFO - RemoteWebDriver instances should connect to: http://192.168.1.5:4444/wd/hub
09:03:06.307 INFO - Version Jetty/5.1.x
09:03:06.311 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver]
09:03:06.324 INFO - Started HttpContext[/selenium-server,/selenium-server]
09:03:06.324 INFO - Started HttpContext[/,/]
09:03:06.381 INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@12d15a9
09:03:06.382 INFO - Started HttpContext[/wd,/wd]
09:03:06.399 INFO - Started SocketListener on 0.0.0.0:4444
09:03:06.400 INFO - Started org.openqa.jetty.jetty.Server@228a02

I wanted to run the python script from the console and each time it would stop here and I'd be waiting and nothing would happen.....How do I run the script without a command prompt. So then, I'd interrupt it with 'ctrl C' to get a  "09:03:17.439 INFO - Shutting down...12:39:08.573 INFO - Stopping Acceptor ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=4444]

That "shutting down" message was odd -- how would you run a process if it was shutting down? What the logs above dont say is "The selenium server must be running so keep that process open. Open ANOTHER terminal window and run your python script there". The documentation didnt explicitly mention that localhost must keep the server running in the background-- Its one of the most basic client-server concepts but when you are running stuff on localhost, your client and server are one and the same. Being explicit with this trivia in the documentation would have helped me not waste hundreds of hours searching the selenium website and reading irrelevant blogs which google threw up, irc, emails, etc... So, in TerminalOne,


:~/selenium-remote-control-1.0.3/selenium-server-1.0.3$ sudo java -jar selenium-server.jar
09:03:05.618 INFO - Java: Sun Microsystems Inc. 1.6.0_0-b11
09:03:05.638 INFO - OS: Linux 2.6.24-28-generic i386
09:03:05.722 INFO - v2.0 [a2], with Core v2.0 [a2]
09:03:06.304 INFO - RemoteWebDriver instances should connect to: http://192.168.1.5:4444/wd/hub
09:03:06.307 INFO - Version Jetty/5.1.x
09:03:06.311 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver]
09:03:06.324 INFO - Started HttpContext[/selenium-server,/selenium-server]
09:03:06.324 INFO - Started HttpContext[/,/]
09:03:06.381 INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@12d15a9
09:03:06.382 INFO - Started HttpContext[/wd,/wd]
09:03:06.399 INFO - Started SocketListener on 0.0.0.0:4444
09:03:06.400 INFO - Started org.openqa.jetty.jetty.Server@228a02
09:03:17.439 INFO - Shutting down...
mom@drga:~/selenium-remote-control-1.0.3/selenium-server-1.0.3$ sudo java -jar selenium-server.jar
09:03:36.248 INFO - Java: Sun Microsystems Inc. 1.6.0_0-b11
09:03:36.252 INFO - OS: Linux 2.6.24-28-generic i386
09:03:36.270 INFO - v2.0 [a2], with Core v2.0 [a2]
09:03:36.486 INFO - RemoteWebDriver instances should connect to: http://192.168.1.5:4444/wd/hub
09:03:36.489 INFO - Version Jetty/5.1.x
09:03:36.491 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver]
09:03:36.493 INFO - Started HttpContext[/selenium-server,/selenium-server]
09:03:36.493 INFO - Started HttpContext[/,/]
09:03:36.523 INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@12d15a9
09:03:36.523 INFO - Started HttpContext[/wd,/wd]
09:03:36.533 INFO - Started SocketListener on 0.0.0.0:4444
09:03:36.533 INFO - Started org.openqa.jetty.jetty.Server@228a02
09:04:30.236 INFO - Checking Resource aliases
09:04:30.260 INFO - Command request: getNewBrowserSession[*firefox, http://localhost:4444, ] on session null
09:04:30.283 INFO - creating new remote session
09:04:30.614 INFO - Allocated session 7cba6a7dadb243618c046ee7fb6c6bc9 for http://localhost:4444, launching...
09:04:30.778 INFO - Preparing Firefox profile...
09:04:34.676 INFO - Launching Firefox...
09:04:38.697 INFO - Got result: OK,7cba6a7dadb243618c046ee7fb6c6bc9 on session 7cba6a7dadb243618c046ee7fb6c6bc9
09:04:38.715 INFO - Command request: open[/selenium-server/tests/html/test_click_page1.html, ] on session 7cba6a7dadb243618c046ee7fb6c6bc9
09:04:38.854 INFO - Got result: XHR ERROR: URL = http://localhost:4444/selenium-server/tests/html/test_click_page1.html Response_Code = 404 Error_Message = Not+found on session 7cba6a7dadb243618c046ee7fb6c6bc9
09:04:38.863 INFO - Command request: testComplete[, ] on session 7cba6a7dadb243618c046ee7fb6c6bc9
09:04:38.863 INFO - Killing Firefox...
09:04:38.933 INFO - Got result: OK on session 7cba6a7dadb243618c046ee7fb6c6bc9
09:09:28.085 INFO - Command request: getNewBrowserSession[*firefox, http://www.irian.at, ] on session null
09:09:28.086 INFO - creating new remote session
09:09:28.088 INFO - Allocated session 97dec9f0b53545acbc9ca3624fc6cbd4 for http://www.irian.at, launching...
09:09:28.165 INFO - Preparing Firefox profile...
09:09:31.873 INFO - Launching Firefox...
09:09:35.599 INFO - Got result: OK,97dec9f0b53545acbc9ca3624fc6cbd4 on session 97dec9f0b53545acbc9ca3624fc6cbd4
09:09:35.604 INFO - Command request: open[http://www.irian.at/selenium-server/tests/html/ajax/ajax_autocompleter2_test.html, ] on session 97dec9f0b53545acbc9ca3624fc6cbd4
09:09:41.698 INFO - Got result: XHR ERROR: URL = http://www.irian.at/selenium-server/tests/html/ajax/ajax_autocompleter2_test.html Response_Code = 404 Error_Message = Not Found on session 97dec9f0b53545acbc9ca3624fc6cbd4
09:09:41.707 INFO - Command request: testComplete[, ] on session 97dec9f0b53545acbc9ca3624fc6cbd4
09:09:41.707 INFO - Killing Firefox...
09:09:41.740 INFO - Got result: OK on session 97dec9f0b53545acbc9ca3624fc6cbd4
10:18:38.252 INFO - Command request: getNewBrowserSession[*firefox, http://www.google.com/, ] on session null
10:18:38.253 INFO - creating new remote session
10:18:38.254 INFO - Allocated session c4b9c7f35ea34d428b50f2f31a6181c2 for http://www.google.com/, launching...
10:18:38.322 INFO - Preparing Firefox profile...
10:18:41.921 INFO - Launching Firefox...
10:18:45.741 INFO - Got result: OK,c4b9c7f35ea34d428b50f2f31a6181c2 on session c4b9c7f35ea34d428b50f2f31a6181c2
10:18:45.800 INFO - Command request: open[http://www.google.com/, ] on session c4b9c7f35ea34d428b50f2f31a6181c2
10:18:47.204 INFO - Got result: OK on session c4b9c7f35ea34d428b50f2f31a6181c2
10:18:47.211 INFO - Command request: type[q, hello world] on session c4b9c7f35ea34d428b50f2f31a6181c2
10:18:47.277 INFO - Got result: OK on session c4b9c7f35ea34d428b50f2f31a6181c2
10:18:47.282 INFO - Command request: click[btnG, ] on session c4b9c7f35ea34d428b50f2f31a6181c2
10:18:47.334 INFO - Got result: OK on session c4b9c7f35ea34d428b50f2f31a6181c2
10:18:47.340 INFO - Command request: waitForPageToLoad[5000, ] on session c4b9c7f35ea34d428b50f2f31a6181c2
10:18:48.359 INFO - Got result: OK on session c4b9c7f35ea34d428b50f2f31a6181c2
10:18:48.365 INFO - Command request: getTitle[, ] on session c4b9c7f35ea34d428b50f2f31a6181c2
10:18:48.411 INFO - Got result: OK,hello world - Google Search on session c4b9c7f35ea34d428b50f2f31a6181c2
10:18:48.416 INFO - Command request: testComplete[, ] on session c4b9c7f35ea34d428b50f2f31a6181c2
10:18:48.417 INFO - Killing Firefox...
10:18:48.434 INFO - Got result: OK on session c4b9c7f35ea34d428b50f2f31a6181c2


ALL this happens on TerminalOne, so keep that window open to check for the above while you are doing steps below.

STEP#1. In TerminalTwo, Change directory to the 'python-client' to run your scripts. Lets test the selenium.py script first. Btw, note that your bash file must contain the PYTHONPATH for all the directories that you run .py scripts from.

:~/selenium-remote-control-1.0.3$ ls
README.txt  selenium-php-client-driver-1.0.1  selenium-dotnet-client-driver-1.0.1  selenium-python-client-driver-1.0.1
selenium-java-client-driver-1.0.1  selenium-ruby-client-driver-1.0.1  selenium-perl-client-driver-1.0.1    selenium-server-1.0.3

:~/selenium-remote-control-1.0.3/selenium-python-client-driver-1.0.1$ python selenium.py

If it returns silently (read, No errors), it means your selenium server is working.

STEP#2
. Try testing another script, test_google.py or test_default_server.py

:~/selenium-remote-control-1.0.3/selenium-python-client-driver-1.0.1$ ls
doc    test_ajax_jsf.py  test_google.py~    selenium.py  test_ajax_jsf.pyc  test_google.pyc selenium.pyc                     test_default_server.py   test_i18n.py  selenium_test_suite_headless.py  test_default_server.pyc  test_i18n.pyc
selenium_test_suite.py  test_google.py

:~/selenium-remote-control-1.0.3/selenium-python-client-driver-1.0.1$ python test_default_server.py
Using selenium server at localhost:4444
E
======================================================================
ERROR: testLinks (__main__.TestDefaultServer)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_default_server.py", line 36, in testLinks
    selenium.open("/selenium-server/tests/html/test_click_page1.html")
  File "/home/me/selenium-remote-control-1.0.3/selenium-python-client-driver-1.0.1/selenium.py", line 764, in open
    self.do_command("open", [url,])
  File "/home/me/selenium-remote-control-1.0.3/selenium-python-client-driver-1.0.1/selenium.py", line 215, in do_command
    raise Exception, data
Exception: XHR ERROR: URL = http://localhost:4444/selenium-server/tests/html/test_click_page1.html Response_Code = 404 Error_Message = Not+found

----------------------------------------------------------------------
Ran 1 test in 8.852s

FAILED (errors=1)

:~/selenium-remote-control-1.0.3/selenium-python-client-driver-1.0.1$ python test_ajax_jsf.py
Using selenium server at localhost:4444
E
======================================================================
ERROR: testKeyPress (__main__.TestAjaxJSF)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_ajax_jsf.py", line 39, in testKeyPress
    selenium.open("http://www.irian.at/selenium-server/tests/html/ajax/ajax_autocompleter2_test.html")
  File "/home/me/selenium-remote-control-1.0.3/selenium-python-client-driver-1.0.1/selenium.py", line 764, in open
    self.do_command("open", [url,])
  File "/home/me/selenium-remote-control-1.0.3/selenium-python-client-driver-1.0.1/selenium.py", line 215, in do_command
    raise Exception, data
Exception: XHR ERROR: URL = http://www.irian.at/selenium-server/tests/html/ajax/ajax_autocompleter2_test.html Response_Code = 404 Error_Message = Not Found

----------------------------------------------------------------------
Ran 1 test in 13.663s

FAILED (errors=1)

:~/selenium-remote-control-1.0.3/selenium-python-client-driver-1.0.1$ python test_google.py
.
----------------------------------------------------------------------
Ran 1 test in 10.190s

OK

When you are running the above scripts you would see Selenium throw a browser with messages but this is too fast and disappears. In the second terminal,   run your scripts from the directory you've stored them in.

 

2010 July 18 [Sunday]

Installing Sahi on Ubuntu 8.04 hardy

I was referred to sahi by ex-selenium users, so I decided to try it out.

To install sahi on ubuntu 8.04 hardy::

STEP#0.

I downloaded sahi from http://sourceforge.net/projects/sahi/files/

STEP#1.

Extracted the zip folder and changed directory. Ran the start_sahi shell script.

:~/sahi/userdata/bin$ sudo ./start_sahi.sh (The ./ is necessary because its not in the PATH as yet)
--------
SAHI_HOME: ../..
SAHI_USERDATA_DIR: ../../userdata
SAHI_EXT_CLASS_PATH:
--------
../../bin/sahi.sh: line 19: java: command not found

Since Sahi requires java installed on your ubuntu system, do "sudo apt-get install sun-java6-jd" and run the shell script again.

~/sahi/userdata/bin$ sudo ./start_sahi.sh
[sudo] password for mom:
--------
SAHI_HOME: ../..
SAHI_USERDATA_DIR: ../../userdata
SAHI_EXT_CLASS_PATH:
--------
Sahi properties file = /home/moi/sahi/config/sahi.properties
Sahi user properties file = /home/moi/sahi/userdata/config/userdata.properties
Copying profile to /home/moi/sahi/userdata/browser/ff/profiles/sahi0
Copying profile to /home/moi/sahi/userdata/browser/ff/profiles/sahi1
Copying profile to /home/moi/sahi/userdata/browser/ff/profiles/sahi2
Copying profile to /home/moi/sahi/userdata/browser/ff/profiles/sahi3
Copying profile to /home/moi/sahi/userdata/browser/ff/profiles/sahi4
Copying profile to /home/moi/sahi/userdata/browser/ff/profiles/sahi5
Copying profile to /home/moi/sahi/userdata/browser/ff/profiles/sahi6
Copying profile to /home/moi/sahi/userdata/browser/ff/profiles/sahi7
Copying profile to /home/moi/sahi/userdata/browser/ff/profiles/sahi8
Copying profile to /home/moi/sahi/userdata/browser/ff/profiles/sahi9
>>>> Sahi started. Listening on port: 9999
>>>> Configure your browser to use this server and port as its proxy
>>>> Browse any page and CTRL-ALT-DblClick on the page to bring up the Sahi Controller

STEP2:
Now visit http://sahi.co.in/w/using-sahi for the "Configure the browser" section and follow those instructions.
For FF, its "Edit > Preferences > Advanced > Network > Settings" and then you can continue with the remaining instructions for Manual Proxy Configuration.

Since “No Proxy for..” should not have localhost in it I removed it but sahi controller was not being activated. I would get the message "the proxy server is refusing connections" which results in FF browsing failing completely. Not nice.

Apparently the installation is fine and proxy has started on 9999 -- this port number is not used for any other process so technically Sahi should run. It doesnt. The second reason I didnt venture further with this is because it lacks a python client driver. Even if ruby is easy to learn, selenium scores when it provides a language driver for all the scripting languages.

2010 June 20 [Sunday]

funkload builder load testing

After installing funkload on hardy, it was time for testing a few web-sites with it. I downloaded the build script and tested it. It worked like a charm but would only store results for google.com. All other sites, including blogs drew a blank which is strange. You can see the errors in the steps3 and 4, listed below:

Step0:

Test your funkload installation as below. It should run and give an OK result.
i@ubu804:~/funkload-demo/simple$ fl-run-test -v test_Simple.py
test_simple (test_Simple.Simple) ... Ok

----------------------------------------------------------------------
Ran 1 test in 36.425s

OK

Step0.1: Test the sample file.

i@ubu804:~/funkload-demo/simple$ fl-run-test -l 4 -n 100 test_Simple.py
End of loop: 100 pages rendered in 246.905s, avg of 2.469s per page, 0.405 SPPS without concurrency.
.
----------------------------------------------------------------------
Ran 1 test in 477.608s

OK

The log files for this test are located in "simple-test.log"

Step0.2: Bench it

i@ubu804:~/funkload-demo/simple$ fl-monitor-ctl monitor.conf start
Starting monitor server at http://localhost:8008/ as daemon.


Step1:

Next, download funkload Builder v0.2 - funkloadBuilder02.tar.gz.
Extract it into your home folder directory. Then just follow the installation instructions on that page which I did as below:

i@ubu804:~$ tar -xzvf funkloadBuilder02.tar.gz

funkload/
funkload/tmp/
funkload/tmp/wget/
funkload/builder/
funkload/builder/ResourceBundle.py
funkload/builder/build.py
funkload/builder/builder.conf
funkload/builder/util.py
funkload/builder/default/
funkload/builder/default/monitor.conf
funkload/builder/default/test-results/
funkload/builder/default/test_Load.py
funkload/builder/default/Load.conf

i@ubu804:~$ cd funkload/builder

i@ubu804:~/funkload/builder$ vi builder.conf


Here, you must edit the following lines in builder.conf:

wsb_root=/home/esw/funkload-results/ {hint: set your directory path correctly}
test_repository=/home/esw/funkload/ {hint: set your directory path correctly}
test_sites=[www.test1.co.uk, www.test2.co.uk] {hint: add the URI of sites you want to test}

and if required, setup parameters for wget {Ex. your /home/i/funkload/tmp/wget/www.google.co.in/index.html is the folder which will store the .html files for viewing}.

Save and exit builder.conf file.

Step2:

Next, we will run the build file.

i@ubu804:~/funkload/builder$ python build.py -b 50
{'-b': '50'}
Performing sampling of site login.launchpad.net, this may take a while!
Sampling complete
Performing sampling of site svaksha.com, this may take a while!
Sampling complete
Performing sampling of site google.com, this may take a while!
Sampling complete
find: /home/i/funkload/tmp/wget/google.com: No such file or directory

If you change directory to the funkload folder, you will see three new folders for each of the sites you ran the tests on: "login.launchpad.net", "svaksha.com", and "google.com"

Step3:

Now we are running the load tests:

i@ubu804:~/funkload/builder$ python build.py --run
{'--run': ''}
/home/i/funkload/builder/.. login.launchpad.net
Traceback (most recent call last):
File "/usr/bin/fl-run-bench", line 8, in <module>
load_entry_point('funkload==1.12.0', 'console_scripts', 'fl-run-bench')()
File "build/bdist.linux-x86_64/egg/funkload/BenchRunner.py", line 606, in main
File "build/bdist.linux-x86_64/egg/funkload/BenchRunner.py", line 220, in __init__
File "build/bdist.linux-x86_64/egg/funkload/BenchRunner.py", line 123, in load_unittest
File "/home/i/funkload/login.launchpad.net/test_Load.py", line 9, in <module>
from MembersTestCase import MembersTestCase
ImportError: No module named MembersTestCase
Traceback (most recent call last):
File "build.py", line 271, in <module>
main(sys.argv[1:])
File "build.py", line 261, in main
funkloadBuilder.runLoadTesting()
File "build.py", line 240, in runLoadTesting
shutil.copyfile("%s/%s"%(copyDir,FunkloadBuilder.LOAD_TESTING_RESULTS_FILE),"%s/%s/%s"%(copyDir,FunkloadBuilder.LOAD_TESTING_RESULTS_FOLDER,FunkloadBuilder.LOAD_TESTING_RESULTS_FILE))
File "/usr/lib/python2.5/shutil.py", line 46, in copyfile
fsrc = open(src, 'rb')
IOError: [Errno 2] No such file or directory: '/home/i/funkload/login.launchpad.net/load-bench.xml'

This is where the test fails because it only stores results for google.com in the folder /home/i/funkload/tmp/wget/www.google.co.in/index.html , where I can reproduce the google.in website as is. The other two domains that were tested, login.launchpad.net and svaksha.com dont have any results. Strange. The error above shows that /usr/bin/fl-run-bench, is not being called from the funkload==1.12.0 folder  which is where the build fails.

Step4:

Next, we will have to generate HTML reports for each tested website but before giving the following command, create a funkload-results directory in your home folder, then :

i@ubu804:~/funkload/builder$ python build.py -s output-report-name
{'-s': 'output-report-name'}
load-bench.xml not found in: /home/i/funkload/login.launchpad.net/test-results/
load-bench.xml not found in: /home/i/funkload/svaksha.com/test-results/
load-bench.xml not found in: /home/i/funkload/google.com/test-results/


The above command only creates a directory "output-report-name" within the funkload-results directory but cd'ing into one of them, like /funkload-results/output-report-name/svaksha.com, shows an empty directory. Test #fail.

- page 1 of 2