## Load Testing web application with Selenium and TestNG

I’ve used Selenium for while to do verification tests of web applications, recently I discovered a very simple way to use it with TestNG and Maven to do some performance testing. TestNG allows for the use of annotations to allow multi-threading and iterations.

pom.xml:
 <dependencies> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.8.7</version> <scope>test</scope> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.44.0</version> <scope>test</scope> </dependency> <dependencies> 

And as for a simple test to get started with… scripting of steps is available online or could be in a future blog post.
 /* * COPYRIGHT. none */ package com.example.selenium;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
/**
* Simple test example for Selenium
*/
public class SeleniumTest {

private static final Logger LOGGER = LoggerFactory.getLogger(SeleniumTest.class);
/**
* TODO Un-comment or change if needed to set your local path!
*/
@BeforeClass
public void oneTimeSetUp() {
System.out.println(“————————————– init —————————————-“);
//System.setProperty(“webdriver.firefox.bin”,”C:\\path\\to\\firefox.exe”);
}
/**
* NOTE: uses TestNG – behaves differently than JUnit
*/
@Test(invocationCount = 1, threadPoolSize = 5)

final String baseUrl = “http://www.giantgeek.com/index.php”;

WebDriver driver = null;
final long start = System.currentTimeMillis();
try{
driver = (WebDriver)new FirefoxDriver();
driver.get(baseUrl);

final String actual = driver.getTitle();
LOGGER.debug(“Page Title is {}”, actual);
final String expected = “GIANTGEEK.COM”;
Assert.assertEquals(actual,expected);

 

 }catch(final WebDriverException ex){ LOGGER.warn(fn+":WebDriverException:{}",ex); }catch(final Exception ex){ LOGGER.warn(fn+":Exception:{}",ex); } finally { final long elapsed = System.currentTimeMillis() - start; LOGGER.debug("[END] Thread Id: {}, elapsed={}", Thread.currentThread().getId(),elapsed); if(driver != null){ driver.quit(); } } } } 

WARNING: Selenium Tests MAY fail if the browser used for testing is updated in the Operating System. Updating the pom.xml to a newer release usually helps!

REFERENCES:

## Yandex Search Engine

While “Google” may be ubiquitous with “search” for most users in the United States and much of the world, there are still several other strong contenders that many people know nothing about. One such example, from Russia, is Yandex.

Getting your website indexed by this search engine is easy.

1. Visit the webmaster website at https://webmaster.yandex.com/addurl.xml
2. Register for an account, you can use single-sign-on from many social media websites such as Facebook, Google or Twitter.
4. Enter your domain name and submit
5. There are several methods provided, easiest to implement is usually ‘txt’ file, as you can execute a Linux/Unix command line “touch” to create the empty file on the server as needed.
7. Site indexing can take a while, if it is not already indexed, in the meantime you can now modify some information about your domain(s).

REFERENCES:

## Ubuntu grub timeout warning on update

Shortly updating to Ubuntu Trusty (14.04), I noticed the following warning on my console during updates. I finally got around to looking into it deeper and found that many users have seen this too.

Warning: Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is no longer supported.

If you edit the ‘grub’ file, you can comment out the GRUB_HIDDEN_TIMEOUT line by adding a hash in front of it.
 sudo vi /etc/default/grub 

Verify that the error is fixed by executing the following:
 sudo update-grub 

If you are interested, you can also go and look at the updated ‘grub’ file at
 /boot/grub/grub.cfg 

NOTE: I’d also seen that the following command could be used, but it was of no use in my testing.
 /usr/share/grub/default/grub 

REFERENCES:

## Poodle.. or rather, what’s all the fuss with SSLv3

The “Poodle” attack on websites and browsers was all over the media a few weeks ago, following in the shadow of Heartbleed.

Here’s what most users need to know… This is an vulnerability that exists in secure internet communication because…

1. While most newer systems rely on TLS security, they still support older protocols (SSLv3 in particular for this issue)
2. As secure communications generally attempt to find a “common” method, they will often “drop down” to older supported versions (even if they are now often considered insecure!)
3. Most browser and server software (unless recently patched) will allow for this “drop down” in security.
4. Most software provides a mechanism to disable this by the user or in configuration.

Simply put… for a consumer, it’s best to upgrade to a newer browser or find the appropriate configuration to disable SSLv3 if you are unable to upgrade. Server administrators generally should update their sofware on a regular basis for security items such as this one!

NOTE: Many CDN’s such as CloudFlare are proactive and block this vulnerability.

Technical details on the Poodle vulnerability (if you’re into that sort of thing!):

Instructions here are for Apache HTTPd 2.2.23 and newer, other servers will require a similar change:

1.  sudo vi /etc/apache2/mods-enabled/ssl.conf 
2. Change the following line from:
SSLProtocol All -SSLv2
to:
SSLProtocol All -SSLv2 -SSLv3
3. sudo service apache2 reload
4. sudo service apache2 restart

Can be tested at the following websites:

REFERENCES:

## UML tooling

Love it, or hate it, eventually every software developer has to create some documentation. UML (Unified Modeling Language) diagrams are a common, but sometimes neccesary evil, in this line of work. While there are many commercial packages (Rational Rose, for example) available for enterprise use, it’s often easier to use one of the many free offerings available.