Wednesday, February 28, 2018

Selenium Webdriver Scripts Using Jmeter

1.     Introduction

Modern day websites and the web applications are using and a lot of advanced features to make the client experience better and AJAX and JavaScript based logic plays a vital role in developing such features. Companies are also trying to make the websites prettier by using some cool graphics. However, this demands an increased level of processing at the browser end and using some rich graphic content that could make the application performing slowly if the enhanced features are not handled properly.

Most of the leading performance testing tools capture the response time on the protocol level which doesn’t include the client side rendering time. In addition, it requires advanced level of scripting skills in simulating AJAX calls using conventional load testing tool. Selenium webdriver scripts are a good choice to test the E2E performance of the web applications and to capture the response time inclusive of client-side rendering time.

To use Selenium Webdriver with Jmeter simply install the Webdriver set of plugins using the Plugins Manager which is available at https://jmeter-plugins.org/wiki/PluginsManager/

Simply follow the given steps:
-       Download the Plugins Manager JAR file
-       Put the file in the lib/ext directory
-       Restart JMeter
-       Click “Options” and then “Plugins Manager”



2.     Download Webdriver Plugins

Once you have “Plugins Manager” installed, you can simply go to available Plugins section and down download “Selenium/Webdriver Support” plugin. This will require a restart of Jmeter.

In the following diagram “Selenium/Webdriver Support” plugin is already downloaded and available under Available Plugins section.


After the Jmeter restart, you can find the “Webdriver Sampler” under the sampler section

 
 Webdriver set of plugins support Firefox browser out of the box. However, if you like to use Chrome or Internet Explorer then it will require some additional setup.

To use Chrome or Internet Explorer browser, simply download Chrome or IE driver using the below link and provide the path if the driver under the driver Config Element



Chrome driver config can be download from https://jmeter-plugins.org/wiki/ChromeDriverConfig/ and place the .exe file under the Bin folder of Jmeter or set the path of the EXE file under driver config.



We are ready to begin with the scripting now. All you need to add in your test plan is the Chrome Driver Config Element, Web Driver Sampler (Number of samplers depends on the testing needs), Cookie Manager, Cache Manager and View Results Tree.


3.     Webdriver Sampler Scripting

In this example, we are going to script a simple flow of opening the duckduckgo.com website, Searching Load testing Keyword and clicking on one the results link.
Here is the code you will require to do this:

//Common Code in all the Samplers

var pkg = JavaImporter(org.openqa.selenium); //Import Java Selenium Pacage
var support_ui = JavaImporter(org.openqa.selenium.support.ui.WebDriverWait); //WebDriver wait package classes
var wait = new support_ui.WebDriverWait(WDS.browser, 5000); //Wait 5 seconds until page loads

WDS.sampleResult.sampleStart(); //Sampler starting point
WDS.log.info("Sample started"); // This will log the information for us

// Transaction related code

WDS.sampleResult.sampleEnd();

//Transaction-1 Launch Website

WDS.browser.get('http://duckduckgo.com'); //opens website specified in 'http://duckduckgo.com'
WDS.log.info("navigated to duckduckgo.com");

//Transaction-2 Search Keyword

var searchField = WDS.browser.findElement(pkg.By.id('search_form_input_homepage')); //saves search field into searchField
searchField.click(); //clicks search field
searchField.sendKeys(['Load testing']); //types word "blazemeter" in field
WDS.log.info("Searched for Load testing");

var button = WDS.browser.findElement(pkg.By.id('search_button_homepage')); //Find Search button
button.click(); //Click Search Button
WDS.log.info("Clicked on the search button");

//Transaction-3 Open Link

var link = WDS.browser.findElement(pkg.By.id('r1-0')); // Clicks on the first link.
link.click(); //Click the search result's Link

var link = WDS.browser.findElement(pkg.By.id('firstHeading')); // wait for the page to be loaded

The script would look like this:



4.     Selenium IDE Chrome Extension Plugin

To use the selectors we can use the “Selenium IDE” Add-on, which is available at https://docs.seleniumhq.org/download/ . Selenium IDE is a Firefox add-on with a recording option for actions in the browser. To get similar selectors for other browsers, download and install the add-on.

In this example, I have downloaded the Selenium IDE extension for Chrome. Once it is successfully installed, you can see the icon in the browser



Open Duck Duck Go and Selenium IDE. Set the Selenium IDE’s base URL https://duckduckgo.com/ and start recording. Type “Load testing” and click Search open the link after that. If you open Selenium IDE, you see the captured actions and selectors.



All the captured actions can be manually converted to the webdriver format


Action and Command
Webdriver Code
Launch Website
Open
WDS.browser.get('http://duckduckgo.com');
Click at Search Box
Click at id= id=search_form_input_homepage
var searchField = WDS.browser.findElement(pkg.By.id('search_form_input_homepage'));
searchField.click();
Type Keyword
Type id=search_form_input_homepage
searchField.sendKeys(['Load testing']);
Click Search Button
Click at id= search_button_homepage
var button = WDS.browser.findElement(pkg.By.id('search_button_homepage'));
button.click();

Friday, February 23, 2018

Jmeter Results Visualisation Using InfluxDB Grafana


1.     Introduction

This article provides the details of setting up InflxDB and Grafana for performance test monitoring using Jmeter. Running Jmeter tests in command line mode provides a benefit of running the performance tests without consuming much system resources, also, provide the ability to scale the user load on any machine. However, one has to wait until the end of the test to view the results. InfluxDB and Grafana provide a feature to store and analyse time-series data respectively and could be used to real-time monitoring of the.

Installing InfluxDB and Grafana is a bit tedious task, but Blazemeter recently provided a white paper to install the InfluxDB and Grafana using Docker.

Blazemeter provides all the necessary setup files, which could be downloaded straight to your computer and can be used with Docker.

Setting up InfluxDB and Grafana involves the following steps
·        Installation of Docker
·        Installation of InfluxDB and Grafana
·        Setting up Grafana and Datasource
·        Setting up Jmeter Dashboard

2.     Installation of Docker

Download the Docker community edition from https://www.docker.com/community-edition and follow the installation instructions.

Open the PowerShell or command prompt and type “docker --version” to verify the successful installation of Docker. Given command returns the installed version details of Docker.

3.     Installation of InfluxDB and Grafana using Docker

Once you have Docker and Docker Compose successfully installed and up and running. Next step would be to download the Docker file created by Blazemeter using following link

Place the downloaded unzipped files to a folder and then follow the following steps
1.      Open the console
2.      Navigate to “DockerGrafanaInfluxKit-master” folder
3.      Run the command: > docker-compose up
If you see the following screen then the installation is successful

if you open http://localhost:3000 after the installation you should see your Grafana:


You can login using the default user ‘admin’ and ‘admin’ password. Also, if you go to the Grafana data sources configuration (Left top menu button -> Data Sources) you will see that the installed Grafana already has an inbuilt configuration with an InfluxDB instance that we are running in a separate docker container:


To be 100% sure that the integration works correctly, you can click on the ‘InfluxDB’ data source, scroll down to the end of the page and click on ‘Save and Test’. If you got ‘Data source is working’ which means your lightweight monitoring environment is ready and verified!


Following details will be required to set up the performance test monitoring using Jmeter
·        Host address: localhost or 127.0.0.1
·        Database port: 8086
·        Database name: influx
·        Database username: admin
·        Database password: admin

4.     Setting up Jmeter

To setup the Jmeter to push the data to Influx DB you will require the Backend Listener in you test plan, however to use the Jmeter dashboard provided by Grafana you will require to include the “JMeter-InfluxDB-Writer 1.2” jar file into the /lib/ext directory of your JMeter installation. Jar file can be downloaded using following link. https://github.com/NovaTecConsulting/JMeter-InfluxDB-Writer/releases/tag/v-1.2  
Restart your Jmeter and include the backend listener with the following values.

5.     Setting up Jmeter Dashboard

Next step is to setup the Jmeter dashboard. Simplest way to do this is to use the Jmeter Dashboard and you can download this Grafana template in json format using link https://grafana.com/dashboards/1152


After that, open Grafana and instead of the new dashboard creation go to:

Menu -> Dashboards -> Import and choose “Download JSON”, specifying the data source that we have just created for that example:


After that, by clicking on “Import” we will automatically create outstanding JMeter monitoring dashboard


Sunday, January 24, 2016

JavaScript: String And Math Functions

Introduction of JAVAScript as an alternate scripting languages in Loadrunner version 12.50  gives the flexibility to the Performance Test Engineers to leverage the capabilities of existing JAVAScript functions to code various custom logics. 

I am going to describe couple of pre built JAVAScript String and Math functions which will make your life bit easier. 
Date.js
Working with dates are always tricky. So many dots, slashes and formats. Datejs is a stunning library for simple to complex date functions. It can parse dates like: “Next thursday”, “+2 years” and all formats like 2009.01.08, 12/6/2001 etc.
Sylvester
This is a JavaScript library for doing vector and matrix math easily, without using a lot of loops and getting lost between arrays. It includes classes for modelling vectors and matrices in any number of dimensions and for modelling infinite lines and planes in 3D space.
Pretty Date 
A smart JavaScript solution for displaying dates within the past month in a prettier and more user-friendly way. It displays dates relative to the current time; for example, “Yesterday,” “3 hours ago,” etc.
Pretty Date
XRegExp
Regular expressions can be already used in JavaScript with the RegExp object.XRegExp adds more power to RegExp with features that will be part of the browsers of tomorrow (according to proposals for ECMAScript 4 – ES4). Using the library, RegExp objects can be cached and reused, modifiers can be added to existing RegExp objects and more.
JavaScript URL Library
A library for handling and manipulating URLs more easily. It is possible to reach every part of a URL as a string and modify it when needed. This URL library is very new but already works as mentioned.