CI/CD Testing with JMeter

In this post, we’ll talk about how to do a performance test in CI/CD environment with the use of JMeter.

Usually, JMeter can run in two different modes: GUI, and non-GUI. The importance of the non-GUI mode is it will allow running the test with minimum resources. For CI/CD test we use this non-GUI mode. For this example, I’m using Jenkins as the CI tool.

First of all, you need to install and start Jenkins in your CI environment.

Install Performance Plugin

  • Click on ‘Manage Plugins’

Screen Shot 2018-05-30 at 3.47.09 PM

  • Search ”Performance” in ‘Available’ tab

Screen Shot 2018-05-30 at 3.47.48 PM

  • Click on ‘Download now and install after restart’ button

Create a Jenkins Project

  • Click ‘New Item’
    Create the ‘Freestyle project’ and click ‘OK’

Screen Shot 2018-05-30 at 3.44.39 PM.png

  • ‘Add build step’ according to your environment (eg: ‘Execute Windows batch command’ for Windows & ‘Execute shell’ for mac/Linux)

Screen Shot 2018-05-31 at 2.28.32 PM.png

  • For the command space, add JMeter run command in non-GUI mode.Screen Shot 2018-05-30 at 3.46.10 PM.png

syntax:

<JMeter_location>/bin/jmeter.sh -n -t <JMX_Location>/<JMXFile>.jmx -l results.jtl

eg:

/Applications/apache-jmeter-4.0/bin/jmeter.sh -n -t /Users/deranthika/JMeterAPI/APITest.jmx -l results.jtl

-n : Non-GUI mode – this specifies JMeter is to run in non-GUI mode

-t : JMX file – location of the test plan and the name of JMX file that contains the Test Plan

-l : log file name of JTL file to log sample results to

  • ‘Add post-build action’ and select ‘Publish Performance test result report’

Screen Shot 2018-05-31 at 2.57.37 PM.png

  • For the source data file provide .jtl file name (eg: results.jtl)

Screen Shot 2018-05-30 at 4.06.49 PM.png

  • Click on ‘Save’

Build and View Graph

  • Build the project
  • You will be able to see results graph on your dashboard. NOTE: graph values will display after the second build finish.

 

Screen Shot 2018-05-31 at 3.04.51 PM.png

You can view graph by clicking ‘Performance Trend’ link in the left corner

Screen Shot 2018-05-31 at 3.05.00 PM.png

Screen Shot 2018-05-31 at 3.07.28 PM.png

Last Report

Screen Shot 2018-05-31 at 3.07.35 PM.png

Advertisements

How to Configure Selenium WebDriver

Hola Testers,

Today I’m going to to tell how to configure Selenium WebDriver. Yes, this is the first lesson for Selenium WebDriver. I hope this will be useful for new users. In here, I’m going to use Java as my programming language. I’m going to divide this tutorial for below partitions.

  • Create a project and configure .jar files
  • Configure TestNG
  • Configure Firefox browser
  • Configure Chrome browser
  • Configure Internet Explore browser

Create a project and configure .jar files

To create a project we need programming IDE. Here I’m using eclipse.

  • Open Eclipse
  • Create a new Java Project

Screen Shot 2017-04-11 at 5.25.04 PM

After create a java project we need to download selenium webdriver jars.

  • Go to seleniumhq download page
  • Download and unzip the WebDriver bindings

Screen Shot 2017-04-11 at 4.19.34 PM.png

  • Create a folder called “libs” in java project (right click on the project > New > Folder)

Screen Shot 2017-04-11 at 5.37.45 PM

  • Paste all the .jar files from extracted folder of the downloaded zip file

Screen Shot 2017-04-11 at 5.45.01 PMScreen Shot 2017-04-11 at 5.46.12 PM

Now we have to add those .jar files to build path.

Select all .jar files in “libs” folder > right click > Build Path > Add to Build Path

Screen Shot 2017-04-11 at 5.49.22 PM

  • After that you can see all the .jar files in newly created “Referenced Libraries” library folder

Screen Shot 2017-04-11 at 5.49.37 PM

Configure TestNG

Click on Help menu > Install New Software..

Screen Shot 2017-04-11 at 6.00.43 PM.png

  • Click on Add button, “Add Repository” box will appear.
  • Enter below values as inputs and click “OK”
    • Name: TestNG
    • Location: http://beust.com/eclipse

Screen Shot 2017-04-11 at 6.02.59 PM

  • Accept agreement details and install TestNG. (If it gives warning, click OK)
  • After successful installation system ask to restart eclipse, allow it.

Screen Shot 2017-04-11 at 6.15.04 PM.png

 

Configure Firebox browser

  • Download geckoDriver from seleniumhq download page Third Party Drivers, Bindings and Plugins section and unzip it

Screen Shot 2017-04-11 at 9.19.58 PM

  • Create a folder called “driver” in project and add unzipped file. Don’t copy through eclipse.

Screen Shot 2017-04-11 at 9.40.04 PM.png

  • Create a class
  • Import Firefox browser driver
import org.openqa.selenium.firefox.FirefoxDriver
  • Initialize FirefoxDriver object
System.setProperty("webdriver.gecko.driver", "path of geckodrivergeckodriver"); 
FirefoxDriver fd=new FirefoxDriver();

Sample code

@Test

  public void firefoxTest() {

 System.setProperty("webdriver.gecko.driver", "/Users/deranthika/Documents/eclipse/workspace/TestSelenium/drivers/geckodriver");

FirefoxDriver fd=new FirefoxDriver();

fd.get("http://google.lk");

  }

If you are using windows OS, you need to put location as below

System.setProperty("webdriver.gecko.driver","path of geckodriver.exe");

Screen Shot 2017-04-11 at 8.22.38 PM.png

Screen Shot 2017-04-11 at 9.42.55 PM.png

 

Configure Chrome browser

  • Instead of gecko, you need to download chromeDriver from seleniumhq download page
  • Download the latest stable version for your OS and copy it to drivers folder
  • Import chromeDriver
import org.openqa.selenium.chrome.ChromeDriver;
  • Create new test method
  • Initailize chromeDriver object
System.setProperty("webdriver.chrome.driver", "/Users/deranthika/Documents/eclipse/workspace/TestSelenium/drivers/chromedriver");

ChromeDriver cd=new ChromeDriver();

sample code

@Test

  public void chromeTest() {

 System.setProperty("webdriver.chrome.driver", "/Users/deranthika/Documents/eclipse/workspace/TestSelenium/drivers/chromedriver");

ChromeDriver cd=new ChromeDriver();

cd.get("http://google.lk");

  }

Screen Shot 2017-04-11 at 9.58.12 PMScreen Shot 2017-04-11 at 9.58.25 PM

Configure Internet Explorer browser

  • you need to download InternetExplorerDriver from seleniumhq download page
  • Download the latest stable version and copy it to drivers folder
  • Import InternetExplorerDriver
import org.openqa.selenium.ie.InternetExplorerDriver;
  • Create new test method
  • Initailize InternetExplorerDriver object
System.setProperty("webdriver.ie.driver", "C:\\Selenium\\IEDriverServer.exe");

InternetExplorerDriver id= new InternetExplorerDriver();

sample code

@Test

  public void chromeTest() {

System.setProperty("webdriver.ie.driver", "C:\\Selenium\\IEDriverServer.exe");

InternetExplorerDriver id= new InternetExplorerDriver();

id.get("http://google.lk");

  }

Untitled.png

I’ll add more browsers later 😉

Download Files Using JMeter

Hola Testers,

Let’s talk about how to download a file from API call using JMeter. First you have to create a JMeter project by adding Thread Group, HTTP Requests and etc. Then, add a “Save Responses to a file” Listener to the download HTTP Request

  • Right click on the HTTP Request > Add > Listener > Save Responses to a file

Screen Shot 2017-03-24 at 3.41.52 PM

And Then, you can add further inputs to the save file

Filename prefix: File will download to this location (~ sign mentioned: file will download to the location where jmeter script saves in your machine)

Screen Shot 2017-03-20 at 6.42.11 PM

After run test you can see the downloaded file in the mentioned location.

Screen Shot 2017-03-20 at 6.44.32 PM

Send SOAP Request Using JMeter

SOAP (Simple Object Access Protocol) is a protocol specification for exchanging structured information the implementation of web services using XML. But how we implement this on jmeter? Yes, there are some solutions. Today I’ll show one simple way to do it.

1. Open JMeter > Add a Thread Group
2. Add a HTTP Request for the Thread Group
Screen Shot 2016-04-17 at 10.04.29 AM.png

3. Fill host, port, method and path according to your WSDL name
For example I’m using http://www.webservicex.net/country.asmx?WSDL file
My variables will be,
Host: webservicex.net
Port:
Method: POST
Path:/country.asmx?WSDL
Screen Shot 2016-04-19 at 10.41.57 AM

4. Select “Body Data” tab of the HTTP Request and add request URL with parameter
Screen Shot 2016-04-19 at 10.42.10 AM

5. Add a HTTP Header Manager to the Thread Group and add needed Header requests
Screen Shot 2016-04-19 at 10.42.24 AM

6. Add a Listener to get the results. I used “View Results Tree”
7. Save and Run the test. You can see response xml on “Response data” tab of the Listener
Screen Shot 2016-04-19 at 10.42.40 AM.png

Delete Files inside a Folder using Jmeter

Hola Testers,

After a long time I’m gonna tell you how to delete files inside of folder using Jmeter. Actually sometimes we need this trick while we are removing created test data.

Step 1:
Open JMeter. Obviously, since we are using JMeter. We need to open it first

Step2:
Add “User defined Variables” element
Right Click on the Test Plan > Add > Config Element > User Defined Variables
Screen Shot 2016-03-22 at 11.29.50 AM.png

Step 3:
Add user defined variable
Click on the “User Defined Variables” element
Click “Add” button
Give the folder path with a variable name.
Screen Shot 2016-03-22 at 11.33.23 AM

Step 4:
Add a Thread Group
Right click on the Test Plan > Add > Threads (Users) > Thread Group
Screen Shot 2016-03-22 at 11.35.10 AM.png

Step 5:
Add a request (I’m adding HTTP Request)
Right click on the Thread Group > Add > Sampler > HTTP Request
Screen Shot 2016-03-22 at 11.38.27 AM.png

Step 6:
Add a Beanshell PreProcessor for the Request
Right click on the HTTP Request > Add > Pre Processors > Beanshell PreProcessor
Screen Shot 2016-03-22 at 11.40.14 AM.png

Step 7:
Write a beanshell script to delete files inside of the folder (I’m deleting all the .csv files inside of “jmeterFolder” on my desktop)
Select Beanshell PreProcessor
Enter below script

import org.apache.commons.io.FileUtils;
List files = FileUtils.listFiles(new File("${folderPath}"), new String[]{"csv"}, true);
for (File file : files) {
file.delete();
}

${folderPath}: variable which you declare on “User Defined Variables”
Screen Shot 2016-03-22 at 11.47.19 AM.png

Step 8:
Save the script and Run.
jmac.jpg

 

Selenium Grid: An Introduction

Hola Testers!

Today we are going to talk about Selenium Grid!

What is Selenium Grid

Selenium Grid is a part of Selenium Suite which used to running multiple browsers on multiple environment at same time. There are two types of grid Grid 1 and Grid 2. Grid 1 is now deprecating by selenium team. So it is better to learn Grid 2.

Difference Between Grid 1 and Grid 2

Selenium Grid 1 Selenium Grid 2
Has own remote control Bundled with Selenium Server jar files
Need to install and configure Apache Ant before use Grid 1 No need to install Apache Ant
Only support Selenium RC Commands/scripts Support both Selenium RC and WebDriver scripts
Can only automate one browser per RC One RC can automate upto 5 browsers

Selenium Grid using hub-node concept to run.

What is Hub?

  • Is the central point where you need to keep your test scripts
  • There should be one hub for grid
  • All the nodes connect to the hub
  • Hub is running test, but browsers being automated in node

What is Node?

  • Selenium instances that executes tests which stores in hub
  • There can be one or more nodes per grid
  • Nodes can be launches in different platforms and different browsers

We’ll run a sample Selenium Grid test soon!

Run a TestNG project with Maven

Hola Testors!

Today I’m gonna show you how to run TestNG project with Maven. I’m taking my previous TestNG project for this one. You can download it from here.

I tried to run it in maven. Build got success. But you won’t see run anything.

Screen Shot 2015-09-20 at 2.54.58 PM

There is a solution for this: surefire plugin 😀

You need to add testng dependency to pom.xml and add below plugin too.


<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.18.1</version>
            <configuration>
                <suiteXmlFiles>
                    <suiteXmlFile>crossbrowsing.xml</suiteXmlFile>
                </suiteXmlFiles>
            </configuration>
        </plugin>
    </plugins>
</build>

Here suiteXmlFile is out testng xml. You can pass many parameters with this plugin according to your scenarios. For more info about maven testng surefire plugin visit maven page.

See you soon!