Favourite Quote

Every artist was first an amateur. - Ralph Waldo Emerson The more difficulties one has to encounter, within and without, the more significant and the higher in inspiration his life will be. - Horace Bushnell

Thursday, February 16, 2012

How to add user defined variables in JMeter at Test Plan level

User defined variables with JMeter can be defined at various levels.

1.At a Test Plan level adding here will result in using the variables across the thread groups it could range from variables to passing the csv file.

Here's the screen shot :



2.At a Thread Group level by adding a pre processor > User parameters.
This is usually used when you want to iterate through 'n' users it is preferred to read from a external file if the data is massive.

However let me show you details on how to add a user,delete a user ,add variable & delete a variable.

When we add at a thread group level it acts global to that thread group & all those samplers within that thread group.




3.Sampler Level by adding a pre processor > User Parameters.

Adding user parameter at sampler level is more like a local variable to that sampler.

It is accessed by right clicking on the sampler >> pre processor >> user parameters automationwithselenium.blogspot.com-Google pagerank and Worth

Monday, February 13, 2012

Using XPATH Extrcator

Xpath plays a vital role when you want to extract value of an object present in one request and pass fetched value on to a next request.

This is more often true when you never know what would be the id in simple terms if the value is dynamic & changes for every request.

Let's take a shopping cart example:


1. When we add items to the cart we never know what forms a cartId,if we have to pass that cartId to the basket.

So let's extract the value of Id by passing a xpath query to search for the name "cartId" - This can be determined either by firebug if you are on firefox or debugbar if you are on Internet explorer.


2.Add a debug sampler so that you will know what is returned in the variable you stored.

3.How do we add a XPATH Extractor to our HTTP request.

3.a Right Click the HTTP request

3.b Click on Add >> Post Processors > Xpath Extractor



4. Let's have a closer look at the XPATH Extractor.



4.a Give a name to the xpath extractor.

4.b Check the Use Tidy and the Quiet

4.c Add Reference name - It is like a variable name

4.d Pass the Xpath query

4.e Pass the default value it will displayed if there is no value being fetched from the query.

GUI View - System / JMeter Properties.

JMeter Properties let's us have a look at the Jmeter.Properties file that is placed within the bin folder of the jmeter installation directory you.

It gives a nice GUI view as against the files being edited.



To have a look at the Property file.

1.Right Click on the work bench.
2.Add Non- Test Elements.
3.Property Display.

Will result in displaying all properties of the JMeter.You can select to view the system properties or the JMeter Properties. automationwithselenium.blogspot.com-Google pagerank and Worth

Sunday, January 29, 2012

JMeter proxy

Most of those who fancy with commercial tools & those feel its cool to have a record & playback functionality so that they don't have to bother to the nitty gritty details of organising which parameters to send with a request,how an object is identified and so forth.

Here are steps to record :

Pre requisite :
---------------
1.Download jmeter from the jmeter.org website am on jakarta-jmeter-2.5

Download :http://jmeter.apache.org/download_jmeter.cgi

User manual : http://jmeter.apache.org/usermanual/index.html

2.Ensure that you are on a jdk version higher than 1.5.

3.Ensure that you set the classpath to bin for both jdk & jmeter.

4.Verify that you have set the classpath correctly.

All right now let's get started recording.

1.Right click on workbench navigate all the way upto HTTP Proxy server as shown in the fig -1




2.Now that we have added proxy server to work bench before we start recording let's make a few tweaks to the proxy server controller follow fig -2.



2.a : Add a name to Proxy - It is not mandatory to add a name, Also it is to be remembered that proxy settings will not get saved once you close your test.

2.b : Configure to a port number of your choice or leave to the default 8080.

2.c : Check boxes for Add Assertions,Regex Matching.

2.d : Check boxes for follow Redirects (This helps us capture the redirection).

2.e : URL patterns to include add the resources that you want to include by clicking the add button.

2.f : URL patterns to exclude add the resources that you want to exclude by clicking the add button most often it is the css,js,png,gif(we don't want to get most these load tested).

3.Now that we have configured to a Proxy server,let's move on to Test Plan give a name to Test Plan as shown in fig - 3.


4.Add a Thread group give a name to thread group




5.Now that we have a our test plan ,thread group,proxy settings in place.
Let's move on to setting up the browser.

5.a. Go to Tools > Internet options > Change the proxy settings.



6.You can have a look at how the recorded script looks like


6.a Give a name to the http request.

6.b Server name will be grabbed here.

6.c Path will be recorded.

6.d By Default Follow Redirects will be checked,uncheck that & check the Redirect Automatically so that can help you in understanding how your request was redirected.

6.e Send Parameters will let you know what are the parameters that were passed on. automationwithselenium.blogspot.com-Google pagerank and Worth

Wednesday, November 23, 2011

JMeter - Superb Performance Test Tool

I have been working with JMeter from early days of JMeter 1.9 to date which is JMeter 2.5
Seen the tool evolve from just 4 samplers to a few listeners & much more flexbility now.

Apache JMeter is open source software, a 100% pure Java desktop application designed to (load) test functional behavior and measure performance. It was originally designed for testing Web Applications but has since expanded to other test functions.

Web Site: http://jakarta.apache.org/jmeter/index.html

License & Pricing: Open Source

Support: User mailing list (jmeter-user@jakarta.apache.org)

What can I do with it?
Apache JMeter may be used to test functional and performance both on static and dynamic resources (files, Servlets, Perl scripts, Java Objects, Data Bases and Queries, FTP Servers and more). It can be used to simulate a heavy load on a server, network or object to test its strength or to analyze overall performance under different load types. You can also use it perform a functional test on websites, databases, LDAPs, webservices etc.

JMeter is not a browser. As far as web-services and remote services are concerned, JMeter looks like a browser (or rather, multiple browsers); however JMeter does not perform all the actions supported by browsers. In particular, JMeter does not execute the Javascript found in HTML pages. Nor does it render the HTML pages as a browser does (it's possible to view the response as HTML etc, but the timings are not included in any samples, and only one sample in one thread is ever viewed at a time).

Installation

The installation of JMeter (if you would call it an installation) is pretty straight forward. On the website is a link to the download area of stable versions. You also have the possibility to use nightly builds, but this is at your own risk. No guarantee that they work properly. So the advice is always to start with a stable version.

Download the latest version (zip or tgz) and unpack the archive to a local folder. Before starting JMeter it is wise to have a look at the configuration. The jmeter.properties file (located in the bin folder) contains a lot of settings. Most of those settings should be fine for the average user. The file is well documented and easy to read (and change where needed).

Also pay attention to needed additional jars. If you are going to use for example JDBC, JMS or JavaMail additional jars are not included in the JMeter installation. The user guide on the website explains how to use it and where to get it.

Starting JMeter is just a matter of double clicking jmeter.bat in the bin folder.

Documentation

There is an extensive documentation on the web site. In all kinds of ways. User manual, Wikis, docs and user experiences. The user manual describes how to create specific testplans (Web, Database, JMS, Webservice, etc) including step by step instructions, examples, bitmaps and tips. Also additional information is described in the user manual like best practices, information about regular expressions and how to use the variables and predefined functions. And last but not least: the component reference describes in detail how every component can be used.

The principle of JMeter

The principle of JMeter is very simple. If you want to test e.g. a SOAP interface layer, all you basically need is the URL and SOAP request. Starting with that you can build your test plan. And this can be as fancy as you want. Using variables, counters, parameters, CSV files, loops, logs, etc. There are almost no limits in designing your test and making it as maintainable as possible. automationwithselenium.blogspot.com-Google pagerank and Worth

Monday, February 28, 2011

How to configure/change running other than on default port

Pogrammatically changing the default port.

RemoteControlConfiguration class which is contained in selenium-server.jar:

import org.openqa.selenium.server.RemoteControlConfiguration;

@Test

public void remoteControlConfigExample()
{
final int SELENIUM_PORT = 8888;
RemoteControlConfiguration rcc = new RemoteControlConfiguration();
rcc.setPort(SELENIUM_PORT);
SeleniumServer seleniumServer=null;
try
{
seleniumServer = new SeleniumServer(rcConfig);
seleniumServer.start();
} catch (Exception e)
{
e.printStackTrace();
}
Selenium selenium=null;
selenium = new DefaultSelenium("localhost", SELENIUM_PORT, "*firefox","http://www.google.com");
selenium.start();
//Add your piece of actions here & then followed by
selenium.close();
selenium.stop();
if(seleniumServer!=null)
{
seleniumServer.stop();
}
} automationwithselenium.blogspot.com-Google pagerank and Worth

Saturday, February 26, 2011

Selenium RC UI Mapping

Why should we map the Elements or identifiers or locators in UI?

Imagine that if you have a case with hundreds of input in login field. Now the login text box has been changed to drop down list or the name of the identifier has been changed from Textbox_Login to txt_login.

If we execute our existing test scripts they will fail as they cannot find the locator and making changes in all scripts that involve would be hard.

Hence we map the UI objects & store them in a centralized location for making the script more efficient and maintainable.

So we create a Properties file where we store all the UI objects identifiers & for any further changes we can just tweak this properties file as against all testscripts.

Create the properties file :

Create a file like resLogin.properties and we can assign the UI element as follows:

resuser.firstname = "ctl00_txtFirstName";
resuser.middlename = "ctl00_txtMiddleName";
resuser.lastname = "ctl00_txtLastName";
resuser.loginname = "ctl00_txtLoginName";
resuser.password = "ctl00_txtPassword";


All you have to do now is make a call in your selenium scripts.

For ex :

selenium.type("resuser.firstname","Shabana");
selenium.type("resuser.middlename"," ");
selenium.type("resuser.lastname","K");
selenium.type("resuser.loginname","autouser1");
selenium.type("resuser.password","welcome");

In the above example for any identifiers being changed you have to make changes in the properties file & replace the one highlighted. automationwithselenium.blogspot.com-Google pagerank and Worth

Types of Framework

Any framework is made up of a number of reusable modules & function libraries that are developed with the following characteristics in mind:

Maintainable
Reusable
Manageable
Accessible
Robust
Flexibility
Measurable


Frame work has several types and most popular are the below :

a.Keyword driven frame work
b.Data driven driven frame work
c.Hybrid framework

Key word Driven Frame work :

Keyword driven framework is an action based test method used in planing and implementation of automation.

Data Driven Framework :

Data driven is the design of possible inputs what may be given by the end user.
This would cover maximum probabilities of an input data.
It can either be Spread sheet(excel)/sql/CSV.
We have to connect and pass the values to the respective field or element.
The data should be designed by the experienced person on the project. It may be a client or even non technical person but should be more familiar from an end users prospective.
We have to map the file path properly.

Hybrid Framework:

The Hybrid Automation Framework is otherwise referred to in the industry as a "Hybrid Keyword Data Driven Automation Framework". automationwithselenium.blogspot.com-Google pagerank and Worth

Strategy to setup Selenium Framework Design

Its alwayz important to set the ground rules straight & think through these factors for designing a framework:

These are my views which has worked well in my past experience.

1. We need to create UI Map.

2. Libraries for UI objects.

3. Design classes based on application under test.

4. Plan for test execution approach to minimize the time.

5. Design report generation.

6. Prepare a Step table and step suite.

7. Prepare a Data set where ever needed.

8. Design Keyword Driven action fixtures this is purely on the approach we follow if its data driven framework ignore this step.

9. Design and develop the psudo code. automationwithselenium.blogspot.com-Google pagerank and Worth

Generate JUnit report with Ant & Eclipse IDE


Reports are crucial for any tests carried out.

Steps to configure and generate the test result from java eclipse using Ant:

this post is for users who have already familiar with java and eclipse.

Generating the ANT build:
Right click on the project and
select Export --> Ant Buildfiles.-->Next-->Select the project-->Finish.

Configuring jar:

Select Windows menu-->Preference -->Global Entries -->Add External JARs-->Select the folder where the eclipse is installed. eclipse -->Plugin -->Currently its located in "org.junit_4.8.1.v4_8_1_v20100427-1100"-->"junit.jar"-->OK.

Run the Ant Build:


Create a folder "junit" in side the project folder.

Right click on the AntBuildfile-->RunAs -->AntBuild

Return to java project and run as junit test.

End of test run you will find the test result in a html file named as index.html it will be stored inside the junit folder.
automationwithselenium.blogspot.com-Google pagerank and Worth

How to does selenium work with Tabbing

Key Press and Fire Event
Imagine that if you have a function in your application that can be invoked by pressing the "Tab" key.

Eg. Values being populated on focus out.

We can use keyPress with ASCII value for the key which you want to trigger the function.

Eg:
Command Target Value
keyPress Txt_Login \9


here "\9" is ascii value of horizontal tab.

Some functions may be used Onblur. It will trigger the function when the field looses the key focus.

We can use fireEvent with "blur" or "focus" command as follows:


Command Target Value
fireEvent Txt_Login blur automationwithselenium.blogspot.com-Google pagerank and Worth

Tuesday, February 22, 2011

Xpath tips !!!

Get All elements :

// Get all elements where pet equals cat
String xpath = "//*[@pet='cat']";

// Get all elements where pet contains the string dog
xpath = "//*[contains(@pet,'dog')]";
// Get all elements that have the age attribute
xpath = "//*[@age]"; 



Absolute path (would break if the HTML was changed only slightly) - xpath=/html/body/form[1]

First form element in the HTML - //form[1]

The form element with attribute named ‘id’ and the value ‘loginForm’ - xpath=//form[@id='loginForm']

First input element with attribute named ‘name’ and the value ‘username’ - //input[@name='username']

First input child element of the form element with attribute named ‘id’ and the value ‘loginForm’ - //form[@id='loginForm']/input[1]

Input with attribute named ‘name’ and the value ‘continue’ and attribute named ‘type’ and the value ‘button’ - //input[@name='continue'][@type='button']

Fourth input child element of the form element with attribute named ‘id’ and value ‘loginForm’ - //form[@id='loginForm']/input[4]
automationwithselenium.blogspot.com-Google pagerank and Worth

Monday, February 21, 2011

How to do a DDT having a Db connection in selenium

import com.thoughtworks.selenium.*;
import java.util.regex.Pattern;
import java.sql.*;
import javax.sql.*;
import java.io.*;
public class contact extends SeleneseTestCase
{


public void setUp() throws Exception
{
// add details of browser & other details
}

public void testContact() throws Exception {
System.out.println("Connecting to the database");
String url="jdbc:mysql://localhost:/main.jsp";
Class driverClass = Class.forName("com.mysql.jdbc.Driver");
Connection con =
DriverManager.getConnection(url,"", "");
System.out.println("Connected to the database");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("select * from emp_account");
ResultSetMetaData rsmd = rs.getMetaData();
int columns = rsmd.getColumnCount
while (rs.next())
for (int i = 1; i < columns; i++)
{
System.out.print(rs.getObject(i + 1)+" |");
}
System.out.println(" ");
}
}}
automationwithselenium.blogspot.com-Google pagerank and Worth

Wednesday, November 17, 2010

ProxyInjection Mode

1.How to set the browser to Proxy Injection Mode ?

*pi(browsername);

2.How to avoid using waitForpageload() ,wait(),pause(),thread.sleep()?

Add selenium.setSpeed(Constants.DEFAULT_TIMEOUT); at the start of the script.

3.How to check for dynamic ids in the object string using xpath

for example if dynamic ids have the format text-12345
where 12345 is a dynamic number you could use the following

XPath: //input[starts-with(@id, 'text-')]

4.How to Capture selenium server side logs if you don't start the server through code ?

java -jar selenium-server.jar -log selenium.log

5.How to Capture Browserside logs?

java -jar selenium-server.jar -log browserSideLog

6.How to use contains function in xpath ?
"//a[contains(text(),'Add New')]"

If there are multiple Add New on page its better to nail down to the one we are looking to click with index subscript.

//a[contains(text(),'Posts')]/following::a[contains(text(),'Add New')][1]

So we are using xpath axis which is following & an index[1]

Axis are used to work with node sets automationwithselenium.blogspot.com-Google pagerank and Worth

How to Capture Network Traffic using Selenium

CapturingNetwork Traffic - It could be used to know details such as the browser information.

public class Epc extends SeleneseTestCase
{
public static SeleniumServer selServer;
public static DefaultSelenium selenium;
final String URL = "http://10.10.7.48:38080/";
int port = Constants.PORT;
String browser = Constants.BROWSER;

public void setUp() throws Exception
{
if(selServer == null)
{
try
{
RemoteControlConfiguration rc = new RemoteControlConfiguration();
rc.trustAllSSLCertificates();
selServer = new SeleniumServer(rc);
selServer.start();
}catch(Exception e)
{
e.printStackTrace();
}
}
}



public void testWebservices() throws Exception
{
selenium = new DefaultSelenium("localhost",Constants.PORT,Constants.BROWSER,URL);
selenium.start("captureNetworkTraffic=true");
selenium.open("/epc-client");
String trafficOutput = selenium.captureNetworkTraffic("plain");
System.out.println("\nNetwork Traffic captured in plain format !!!!"+trafficOutput);
pause(Constants.MAX_WAIT_TIME_MS);
selenium.windowFocus();
selenium.windowMaximize();
selenium.useXpathLibrary("javascript-xpath");
pause(Constants.MAX_WAIT_TIME_MS);
selenium.click("link=Search UPRN by Address Web Service");

}
}

public void tearDown()
{
selenium.stop();
selServer.stop();
}

} automationwithselenium.blogspot.com-Google pagerank and Worth

Wednesday, November 10, 2010

DataDriven Testing using Selenium - java

I am using excel for data driven testing.

public void login()
{
String uName = username;
String pWord = password;
try
{
FileInputStream fi = new FileInputStream ("C:\\Selenium\\datainput\\webservices.xls");
Workbook wbk = Workbook.getWorkbook(fi);
Sheet sht = wbk.getSheet("Credentials");
for(int rowCount=1;rowCount<=sht.getRows();rowCount++)
{
uName = sht.getCell(1,rowCount).getContents();
pWord = sht.getCell(2, rowCount).getContents();
objSelenium.type("xpath=//input[@id='j_username']", uName);
selenium.wait(Constants.MAX_WAIT_TIME_MS);
objSelenium.type("xpath=//input[@id='j_password']", pWord);
selenium.wait(Constants.MAX_WAIT_TIME_MS);
}
}catch(Exception e)
{
e.printStackTrace();
}
} automationwithselenium.blogspot.com-Google pagerank and Worth

Generating HTML reports at granularity

Generating detailed reports with logs & screenshots.

Using the LoggingSelenium Interface.

1.Must have Selenium-client.jar for java
2.Junit4.jar
3.Commons-lang.jar
4.loggingselenium.jar

Include all the above jars in your classpath.

package com.est.org;



// import static com.unitedinternet.portal.selenium.utils.logging.LoggingAssert.assertEquals;
// import static com.unitedinternet.portal.selenium.utils.logging.LoggingAssert.assertTrue;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.text.ParseException;
import jxl.Sheet;
import jxl.Workbook;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.thoughtworks.selenium.HttpCommandProcessor;
import com.unitedinternet.portal.selenium.utils.logging.HtmlResultFormatter;
import com.unitedinternet.portal.selenium.utils.logging.LoggingCommandProcessor;
import com.unitedinternet.portal.selenium.utils.logging.LoggingDefaultSelenium;
import com.unitedinternet.portal.selenium.utils.logging.LoggingResultsFormatter;
import com.unitedinternet.portal.selenium.utils.logging.LoggingSelenium;
import com.unitedinternet.portal.selenium.utils.logging.LoggingUtils;
import org.openqa.selenium.server.*;

public class Loggingselenium
{

protected LoggingSelenium selenium;

private BufferedWriter loggingWriter;

private static final String RESULT_FILE_ENCODING = "UTF-8";

private static final String DEFAULT_TIMEOUT = "30000";

private static final String OPENQA_URL = "http://192.168.9.104:8080/";

private static final String SCREENSHOT_PATH = "screenshots";

private final String RESULTS_BASE_PATH = "C:/" + File.separator+ "loggingResults" + System.currentTimeMillis();

private String resultsPath = new File(RESULTS_BASE_PATH).getAbsolutePath();

private String screenshotsResultsPath = new File(RESULTS_BASE_PATH+ File.separator + SCREENSHOT_PATH).getAbsolutePath();

private SeleniumServer selServer;

@Before
public void setUp() {
if (!new File(screenshotsResultsPath).exists()) {
new File(screenshotsResultsPath).mkdirs();
}
final String resultHtmlFileName = resultsPath + File.separator+ "sampleResultSuccess.html";
loggingWriter = LoggingUtils.createWriter(resultHtmlFileName,Loggingselenium.RESULT_FILE_ENCODING, true);
LoggingResultsFormatter htmlFormatter = new HtmlResultFormatter(loggingWriter,Loggingselenium.RESULT_FILE_ENCODING);
htmlFormatter.setScreenShotBaseUri(Loggingselenium.SCREENSHOT_PATH+ "/");
htmlFormatter.setAutomaticScreenshotPath(screenshotsResultsPath);
if(selServer == null)
{
try
{
SeleniumServer selServer = new SeleniumServer();
selServer.start();
}catch(Exception e){}
}
LoggingCommandProcessor myProcessor = new LoggingCommandProcessor(new HttpCommandProcessor("localhost", 4444, "*firefox",OPENQA_URL), htmlFormatter);
myProcessor.setExcludedCommands(new String[]{});
selenium = new LoggingDefaultSelenium(myProcessor);
selenium.start();
}

@After
public void tearDown() {
selenium.stop();
try {
if (null != loggingWriter) {
loggingWriter.close();
}
} catch (IOException e) {}
}

@Test
public void loggingSelenium() throws InterruptedException,ParseException
{

selenium.setContext("loggingSelenium()");
selenium.open("/epc-client");
selenium.windowFocus();
selenium.windowMaximize();
selenium.captureScreenshot(screenshotsResultsPath + File.separator+ "openQaHomePage_" + LoggingUtils.timeStampForFileName()+ ".png");
try {

selenium.click("link=Search UPRN by Address Web Service");
selenium.waitForPageToLoad(DEFAULT_TIMEOUT);
selenium.click("//input[@type='radio'][6]");
FileInputStream fi = new FileInputStream("C:\\Selenium\\datainput\\webservices.xls");
Workbook wBk = Workbook.getWorkbook(fi);
Sheet sht = wBk.getSheet("webService");
selenium.type("request",sht.getCell(3,0).getContents());
selenium.waitForPageToLoad(DEFAULT_TIMEOUT);
selenium.wait(30000);
selenium.click("//input[@name='Submit' and @value='submit']");
selenium.waitForPageToLoad(DEFAULT_TIMEOUT);
String textArea = selenium.getValue("//textarea[@name='header']");
if(textArea.contains("null"))
{
System.out.println("\n Invalid request XML submitted!!!!");

}
} catch (Exception e) {}
}
} automationwithselenium.blogspot.com-Google pagerank and Worth

Friday, October 22, 2010

Get All link Names ... using xpath

Here's an example of how to get all links & iterate through it.

package com.est.org;

import org.openqa.selenium.server.*;
import com.thoughtworks.selenium.*;
import com.thoughtworks.selenium.DefaultSelenium;


public class epcClient extends SeleneseTestCase
{
public static SeleniumServer selServer;
public static DefaultSelenium selenium = null;
final String browser = "*firefox";
final int MAX_TIME_TO_WAIT = 3000;
final int PORT = 4444;
final String URL = "http://abc.com/";

public void setUp() throws Exception
{
if(selServer == null)
{
try
{
RemoteControlConfiguration rc = new RemoteControlConfiguration();
rc.trustAllSSLCertificates();
selServer = new SeleniumServer(rc);
selServer.start();
}catch(Exception e)
{
e.printStackTrace();
}
}
}

public void testWebservices()
{
selenium = new DefaultSelenium("localhost",PORT,browser,URL);
selenium.start();
selenium.open("/open");
pause(MAX_TIME_TO_WAIT);
selenium.windowFocus();
selenium.windowMaximize();
pause(MAX_TIME_TO_WAIT);
int count = selenium.getXpathCount("//a").intValue();
for(int i=1;i<=count;i++)
{
//Iterate the received links through getText
String getlink = selenium.getText("xpath=(//a)["+i+"]");
System.out.println("\n Here's the link that you have got !!! "+getlink);
selenium.click("link="+getlink);
pause(MAX_TIME_TO_WAIT);
selenium.click("//input[@type='radio'][5]");
pause(MAX_TIME_TO_WAIT);
selenium.click("//input[@name='Submit' and @value='submit']");
selenium.waitForPageToLoad("30000");
assertEquals(selenium.getTitle(),true);
selenium.open("/open");
pause(MAX_TIME_TO_WAIT);
selenium.windowFocus();
selenium.windowMaximize();
}

}


public void tearDown()
{
selenium.stop();
selServer.stop();
}

} automationwithselenium.blogspot.com-Google pagerank and Worth

Friday, October 15, 2010

Continue ... Scrum


Starting Scrum
The first step in Scrum is for the Product Owner to articulate the product vision. Eventually,this evolves into a refined and prioritized list of features called the Product Backlog.

The subset of the Product Backlog that is intended for the current release is known as the Release Backlog, and in general, this portion is the primary focus of the Product Owner.

Scrum does not define techniques for expressing or prioritizing items in the Product Backlog and it does not define an estimation technique. A common technique is to estimate in terms of relative size (factoring in effort, complexity, and uncertainty) using a unit of “story points”
or simply “points”.

The Product Backlog items for the upcoming next several Sprints should be small and fine-grained enough that they are understood by the Team, enabling commitments made in the Sprint Planning meeting to be meaningful; this is called an “actionable” size. automationwithselenium.blogspot.com-Google pagerank and Worth automationwithselenium.blogspot.com-Google pagerank and Worth

Popular Agile Method - Scrum


  • Scrum is an iterative, incremental framework for projects and product or application
    development. It structures development in cycles of work called Sprints. These iterations are no more than one month each, and take place one after the other without pause. The Sprints are timeboxed – they end on a specific date whether the work has been completed or not, and
    are never extended.

Scrum Roles
In Scrum, there are three roles:

  • The Product Owner
  • The Team
  • The ScrumMaster.

Together these are known as The Scrum Team.

The Product Owner is responsible :
For maximizing return on investment (ROI) by identifying product features, translating these into a prioritized list.
Deciding which should be at the top of the list for the next Sprint, and continually re-prioritizing and refining the list.
The Product Owner has profit and loss responsibility for the product, assuming it is a commercial product.
In case of an internal application, the Product Owner is not responsible for ROI in the sense of a commercial product (that will generate revenue), but they are still responsible for maximizing ROI in the sense of choosing – each Sprint – the highest-business-value lowest-cost items.

The Team builds the product that the Product Owner indicates
The Team in Scrum is “cross-functional” – it includes all the expertise necessary
to deliver the potentially shippable product each Sprint – and it is “self-organizing” (selfmanaging).
With a very high degree of autonomy and accountability. The Team decides what to
commit to, and how best to accomplish that commitment
The Team in Scrum is seven plus or minus two people, and for a software product the Team might include people with skills in analysis, development, testing, interface design, database design, architecture, documentation, and so on

The ScrumMaster helps the product group learn and apply Scrum to achieve business value.
The ScrumMaster does whatever is in their power to help the Team and Product Owner be
successful.
The ScrumMaster is not the manager of the Team or a project manager; instead, the
ScrumMaster serves the Team, protects them from outside interference, and educates and guides the Product Owner and the Team in the skillful use of Scrum.

In addition to these three roles, there are other contributors to the success of the product, including functional managers (for example, an engineering manager).

While their role changes in Scrum, they remain valuable. For example:

• they support the Team by respecting the rules and spirit of Scrum
• they help remove impediments that the Team and Product Owner identify
• they make their expertise and experience available

automationwithselenium.blogspot.com-Google pagerank and Worth