Filed under Web Resources.

We wanted to share with everyone how we use Agile methodologies to release new features and get feedback on our release process.
We use 2  weeks sprints, and below are the meetings and details of our process: 
Sprint Planning – 1-2 hours
  • Product Owner presents all the stories for the current sprint (what/why do we have to implement) to all team members (DEV/QA/UX)
  • team asks questions to the Product Owner to clarify all stories
  • team estimates each story based on complexity (risk of the implementation, areas impacted by the change, UX designs, QA manual and automation)
  • each story should have a driver and UX, DEV and QA tasks (see below for a full list of tasks)
  • team commits to a list of stories to deliver in the current sprint
Mid Sprint Demo – 1 hour
  • team meets with product owner to show progress and current implementation
  • gets feedback from product owner on current implementation
  • QA presents status for all stories, confidence and risk
End Sprint Demo – 1 hour
  • team presents to product owner final implementation and gets feedback
  • QA presents status for all stories, confidence and risk
Scenario Testing – 3-4 hours
  • the team tests different user scenarios/workflows (different type of users – edge cases)
Sprint Retrospective – 1 hour
  • Start, Keep, Stop doing
  • what went good/bad in current sprint
  • choose only one thing to improve in the next sprint
  • check during next sprint if the item chosen to improve is going in the right direction
Default Story Tasks (every story should have after planning ends)
  • DEV: (if needed) discuss with other teams potential implications
  • DEV: (if needed) Create documentation
  • DEV: Start implementation based on current documentation and designs
  • DEV: Code review
  • QA: Write test plan (wiki page – choose which tests can and makes sense to be automated)
  • QA: Automation: implement/update tests or test scripts from current test plan – (UI, Performance and Load testing, Security)
  • QA: Manual: test the implementation (after code review) – (UI, Performance and Load testing, Security)
  • DEV: Bug Fixing
  • QA: Bug Regression
Definition of Done (every story is completed after it meets all items in the definition of done)
  • DEV and QA complete
  • Automation
  • i16n/localisation
  • release notes
Please let me know your thoughts, ideas, comments.

Filed under Selenium WebDriver, Test Automation, UI Testing.

Create automated website tests for free with LoadFocus.com.

If you want to take snapshots of the browser while running tests using Selenium Webdriver these are some ways to do it.
Basically the only thing you need to do is use the class below to take snapshots of the urls you want:

package com.webdriver.automation.tests;

import java.io.File;

import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class TestUtils {

private final static Logger log = LoggerFactory.getLogger(TestUtils.class);

public static void takeDriverSnapShot(WebDriver driver, String screenSnapshotName) {
File browserFile = new File(System.getProperty("java.io.tmpdir") + File.separator +screenSnapshotName + ".png");
snapshotBrowser((TakesScreenshot) driver, screenSnapshotName, browserFile);
}

private static void snapshotBrowser(TakesScreenshot driver, String screenSnapshotName, File browserFile) {
try {

File scrFile = driver.getScreenshotAs(OutputType.FILE);
log.info("PNG browser snapshot file name: \"{}\"", browserFile.toURI().toString());

FileUtils.deleteQuietly(browserFile);
FileUtils.moveFile(scrFile, browserFile);
} catch (Exception e) {
log.error("Could not create browser snapshot: " + screenSnapshotName, e);
}
}

public static void main(String[] args){
WebDriver driver = new FirefoxDriver();
driver.get("http://google.com");

TestUtils.takeDriverSnapShot(driver, "google_com");
driver.close();
}
}

Have a look at the main method which uses the code for taking a snapshot.

If your using TestNG as an unit testing framework, it’s even easier to take screen shots.
The code below takes screenshots of failed tests and stores in the Surefire reports directory: “/target/surefire-reports/screenShots/”.

@AfterMethod(alwaysRun = true)
public void afterMethod(ITestResult result) throws Exception {
if (!result.isSuccess())
takeScreenShoot(threadDriver, result.getMethod());

// Quit environment.
getDriver().close();
getDriver().quit();
}

public void takeScreenShoot(ThreadLocal threadDriver, ITestNGMethod testMethod) throws Exception {
WebDriver augmentedDriver = new Augmenter().augment(threadDriver.get());
File screenshot = ((TakesScreenshot) augmentedDriver).getScreenshotAs(OutputType.FILE);
String nameScreenshot = testMethod.getMethodName();
String path = getPath(nameScreenshot);
FileUtils.copyFile(screenshot, new File(path));
Reporter.log("<a href="file://&quot;" target="_blank">" + this.getFileName(nameScreenshot) + "</a>");
}

private String getFileName(String nameTest) throws IOException {
DateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy_hh.mm.ss");
Date date = new Date();
return dateFormat.format(date) + "_" + nameTest + ".png";
}

private String getPath(String nameTest) throws IOException {
File directory = new File(".");
String newFileNamePath = directory.getCanonicalPath() + "/target/surefire-reports/screenShots/" + getFileName(nameTest);
return newFileNamePath;
}

Use Selenium WebDriver to take screenshots of failed tests to have a better understanding of your failures and debug webdriver tests easier.

Also you can take a look on the previous Selenium WebDriver blog post to locate elements in a page.

Filed under Selenium WebDriver, Test Automation, UI Testing.

Create automated website tests for free with LoadFocus.com.

If you need to run Selenium WebDriver UI tests in a browser that sends the traffic through a proxy, here is a code example of a Selenium test.
In this article we will show how easy it is to configure WebDriver to use a proxy by presenting a small code snippet that uses the FireFox driver and for which we set the HTTP, SSL and FTP proxy:

package com.webdriver.automation.tests;

import java.util.ArrayList;
import java.util.List;

import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.Proxy.ProxyType;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;

public class WebdriverUsingProxy {

private List<String> urlList = new ArrayList<String>();

@Before
public void setup() {
urlList.add("http://news.bbc.co.uk");
urlList.add("https://news.google.com");
}

@Test
public void passTraffixThroughProxyTest() {
String httpProxy = "10.10.1.3:8080";
String sslProxy = "10.10.1.3:8080";
String ftpProxy = "10.10.1.3:8080";

DesiredCapabilities capability = new DesiredCapabilities();
addProxyCapabilities(capability, httpProxy, sslProxy, ftpProxy);

for (String url : urlList){
WebDriver driver = new FirefoxDriver(capability);
driver.get(url);
driver.close();
}
}

public static DesiredCapabilities addProxyCapabilities(DesiredCapabilities capability, String httpProxy, String sslProxy,
String ftpProxy) {
Proxy proxy = new Proxy();
proxy.setProxyType(ProxyType.MANUAL);
proxy.setHttpProxy(httpProxy);
proxy.setSslProxy(sslProxy);
proxy.setFtpProxy(ftpProxy);

capability.setCapability(CapabilityType.PROXY, proxy);
capability.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
return capability;
}
}

In the code above we set the proxy type to manual and we’ve set the HTTP, SSL and FTP proxy to 10.10.1.3:8080. This is done using the Proxy object and setting the desired capability, pretty easy 🙂

If you want to see a easy and complete way to locate web elements check our last Selenium WebDriver blog post.

Have fun passing traffic through proxy in your tests. Also check Load Focus, our Cloud Load and Performance Application Testing Service. You can stress your app/website/API with thousands of concurrent users from all over the world.

Filed under General.

We think easier and simpler is better. Discover how your website or app behaves under custom conditions: number of concurrent users, regions all around the world, custom number of requests or delay between users.

We selected the features we think suit the needs of every business owner, developer, quality assurance or operations person. Just let us know if you think something is missing. Thanks in advance.

New release includes

  • takes less than 1 minute to configure your load test
  • load test type: per duration and per number of request
  • multiple locations
  • GET, POST, PUT and DELETE HTTP methods supported
  • we support: request query parameters, cookies, HTTP headers, POST body, Basic HTTP Authentication
  • live load test results
  • new UI and workflows

Click here to signup. Enjoy!

load testing live monitoring

 

 

Filed under Apache JMeter, Load Testing, Test Automation, Uncategorized.

HTTP POST request is used for sending data to a server. You can use POST requests for upload a file or submitting a web form, make sure that the receiving application agrees on the format.
Additional headers are sent with the POST request: Content-Type: header which is usually application/x-www-form-urlencoded and the Content-Length: header gives the length of the URL-encoded form data. These additional headers are used to describe the message body.

The POST body is the block of data sent with the request and the request URI is not a resource to retrieve; it’s usually an application to handle the data you’re sending.
The HTTP response is normally application response to your file upload request or form submission, not a static file.

You can check related posts, what is HTTP, and what is HTTP GET request.

Use LoadFocus.com for load testing your application with thousands of concurrent connections. You can create GET, POST, PUT and DELETE requests to you website. API endpoints or web application.

Filed under Page Load Time, Test Automation, Web Resources.

The HTTP “GET” method is used just for retrieving data and should have no other effect.

When you enter a URI in the browser or you click on a link you are executing a GET request. Here are some characteristics of GET requests: can be cached, bookmarked, appear in browser history.

You can easily find details about all the requests made, when accessing an URI, by opening the Developer Tools in the browser and inspecting the network traffic.

GET requests don’t necessarily have to be made from the browser, you can make AJAX GET requests and use other tools in this purpose.

Filed under Test Automation, Web Testing Books.

The HTTP (Hypertext Transfer Protocol) is an application protocol designed to enable communications between clients and servers, and the foundation of data communication for the World Wide Web.
HTTP provide a standard way of communication between client (browsers) and web servers.

HTTP works as a request-response protocol, the web browser may be the client, and an application on a computer that hosts a web site may be the server.
For example when the client (browser) submits an HTTP request to the server, the server returns a response to the client with additional information.

HTTP is a stateless protocol because each command is executed independently of the previous commands.

From the browser, in order to access a URL you have to add the http:// command before the URL address (http://www.example.com). These days you can skip it, and the browsers will add it for you automatically when you enter an address in the URL bar.
If you want to access from the browser a HTTPS URL (Hypertext Transfer Protocol over Secure) you have to specify it manually.