![]()
Running Selenium from jMeter
Test Automation
Author
lucaxel
Date
2021-02-14 04:24
Views
45531246
Initial Notes
This is my first post so please have mercy. I'm writing this hoping that I will save some time for whoever tries to follow me into the madness of running selenium tests in a headless browser from jMeter in a docker container, thus enabling performance.
I don't like writing stories so I'm keeping this a list/point format so it's easy to understand and find the things I though are useful. You can find the script attached and details on how it works bellow.
Why
- Easy way to deliver tests to CI/CD pipeline integrators
- Flexible as you can config jmx to be run locally or on the CI/CD pipeline, switch easily between them
- Assert vital fields inside the test using selenium directly (no testng or junit required)
- jMeter logging offers clues to what happens inside docker
- Any system that can run java, can run your test
How
- Selenium commands are written in JSR samplers in jMeter
- Pass the browser as object between samplers
- Use jMeter logging to log progress, errors and more
Setup
- Install jMeter and its plugin manager
- Install the Selenium Support plugin
Implement script
- Start the browser depending on some variables/parameters defined in JMeter
if ("true".equals(vars.get("runLocal")))
System.setProperty("webdriver.gecko.driver", vars.get("setLocal"));
else
System.setProperty("webdriver.gecko.driver", vars.get("setMsmt"));
FirefoxBinary firefoxBinary = new FirefoxBinary();
if (vars.get("headless") == "true") firefoxBinary.addCommandLineOptions("--headless");
FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.setBinary(firefoxBinary);
WebDriver driver = new FirefoxDriver(firefoxOptions);
WebDriverWait wait = new WebDriverWait(driver, 50);
JavascriptExecutor js = (JavascriptExecutor) driver;
driver.get("${msm_url}"); // Navigate to website
driver.manage().window().maximize();
- Pass the browser as object between sampler:
vars.putObject("driver", driver)
WebDriver driver = vars.getObject("driver");
- Assertions and jMeter logging functionality
boolean asserMailbox = driver.findElement(By.xpath("//a[contains(text(),'Mailbox')]")).isDisplayed();
if (asserMailbox) {
log.info("Mailbox tab is displayed: " + asserMailbox);
} else {
log.info("SeleniumTestInvalidated" + driver.findElement(By.xpath("//a[contains(text(),'Mailbox')]")));
}
Selenium headless quirks and other fun stuff
Ok so this section is what I believe is most helpful and I want to share with you. I encountered a lot of problems in my app (checking the jmx will prove that but these are the most helpful tips I can offer anyone)
- Scrolling options:
Require a JavascriptExecutor to be defined. The objects can be passed between samplers.
import org.openqa.selenium.JavascriptExecutor;
WebDriver driver = vars.getObject("driver");
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].scrollIntoView({block: 'center'});", driver.findElement(By.xpath("(//li[@id='tui-pin']//i[@class='fas fa-trash mr-1'])[2]")));
js.executeScript("window.scrollTo(0,0)"); //Scroll to top
- Print Screens:
import java.io.File;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
public static void takeSnapShot(WebDriver webdriver,String fileWithPath) throws Exception{
//Convert web driver object to TakeScreenshot
TakesScreenshot scrShot =((TakesScreenshot)webdriver);
//Call getScreenshotAs method to create image file
File SrcFile=scrShot.getScreenshotAs(OutputType.FILE);
//Move image file to new destination
File DestFile=new File(fileWithPath);
//Copy file at destination
FileUtils.copyFile(SrcFile, DestFile);
}
this.takeSnapShot(driver, vars.get("pic_location")+"HomePage.png") ;
- Forcing clicks when everything else fails:
Sometimes a button would simply not be clickable so as a workaround implement an action so it simulates a mouse click. Requires an action to be defined.
import org.openqa.selenium.interactions.Actions;
Actions builder = new Actions(driver);
builder.moveToElement(driver.findElement(By.id("saveSubscriber")), 0, 0).click().build().perform();
- A final check in jMeter
In case a selenium action fails the whole sampler is marked as failure. but test might fail due to your assertions. In case you don't want to search jmeter logs for multiple error strings I added a log in case sampler is marked as failure in a JSR Assertion Sampler added as a child to the JSR Sampler running the selenium scripts.
String StartProcessResponseCode = SampleResult.getResponseCode();
log.info('Assertion Start')
try {
assert StartProcessResponseCode.contains('200') : "SeleniumTestInvalidated: A web element was not found or could not be clicked."
}
catch (AssertionError e) {
log.info(e.getMessage())
}
log.info('Assertion Ended for :' + StartProcessResponseCode)
Total Reply 0
You must be logged in to post a comment.
Total 2,401
- All
- Acceptance Testing
- Agile
- Bug Tracking
- Capture Tool
- Code Review
- Database Testing
- Embed/Mobile Testing
- Functional Test
- GUI
- Usability Testing
- HP
- IBM
- Java Testing
- Microfocus
- Network Testing
- Performance Test
- Security Testing
- Selenium
- Test Automation
- Test Metrics
- Test Data
- Test Case Management
- Unit Testing
- Test Management
- Web Testing
| Number | Title | Author | Date | Votes | Views |
| 2401 |
Running Selenium from jMeter
lucaxel
|
2021.02.14
|
Votes 0
|
Views 45531246
|
lucaxel | 2021.02.14 | 0 | 45531246 |
| 2400 |
ZeuZ: Test automation framework for Web, Mobile, Desktop, API, and Cloud apps
(TestExpert)
|
2021.02.04
|
Votes 0
|
Views 46682222
|
(TestExpert) | 2021.02.04 | 0 | 46682222 |
| 2399 |
Testsigma: Test web, mobile apps, and APIs continuously @ DevOps speed (1)
(TestExpert)
|
2021.02.04
|
Votes 0
|
Views 45968572
|
(TestExpert) | 2021.02.04 | 0 | 45968572 |
| 2398 |
Mobile User Equipment Tester
(TestExpert)
|
2021.02.04
|
Votes 0
|
Views 46401847
|
(TestExpert) | 2021.02.04 | 0 | 46401847 |
| 2397 |
Katalon TestOps OnPremise (KTOP): TestOps Tool
VTB
|
2020.03.23
|
Votes 0
|
Views 46797434
|
VTB | 2020.03.23 | 0 | 46797434 |
| 2396 |
[Paid] Ranorex Webtestit : UI web tests with Selenium or Protractor
ItSeTsQtB
|
2019.08.08
|
Votes 0
|
Views 46427265
|
ItSeTsQtB | 2019.08.08 | 0 | 46427265 |
| 2395 |
[Paid] Zabbix : Monitor any possible performance metrics and incidents in your network
^Software^
|
2019.07.24
|
Votes 0
|
Views 46658298
|
^Software^ | 2019.07.24 | 0 | 46658298 |
| 2394 |
[Paid] NeoLoad 7.0 : Performance Test APIs to Full Applications
IT-Tester
|
2019.07.24
|
Votes 0
|
Views 45463523
|
IT-Tester | 2019.07.24 | 0 | 45463523 |
| 2393 |
[FREE] Cucumber : behavior-driven development (BDD) tool
IT-Tester
|
2019.07.22
|
Votes 0
|
Views 44046531
|
IT-Tester | 2019.07.22 | 0 | 44046531 |
| 2392 |
[Free] HTTrack : Website Testing Tool
IT-Tester
|
2019.07.22
|
Votes 0
|
Views 45964734
|
IT-Tester | 2019.07.22 | 0 | 45964734 |
| 2391 |
Arquillian : Automated integration, functional and acceptance tests for Java
IT-Tester
|
2019.07.08
|
Votes 0
|
Views 45321486
|
IT-Tester | 2019.07.08 | 0 | 45321486 |
| 2390 |
FitNesse : Automated acceptance tests are power tools for fixing a broken requirements process
IT-Tester
|
2019.07.08
|
Votes 0
|
Views 45024364
|
IT-Tester | 2019.07.08 | 0 | 45024364 |
| 2389 |
Hiptest : Continuous Testing Management Platform
IT-Tester
|
2019.06.26
|
Votes 0
|
Views 45400250
|
IT-Tester | 2019.06.26 | 0 | 45400250 |
| 2388 |
[Free] Test Data Generation Tool : DTM Data Generator
IT-Tester
|
2019.06.26
|
Votes 0
|
Views 44585738
|
IT-Tester | 2019.06.26 | 0 | 44585738 |
| 2387 |
[Free] Assertible : API testing tool which concentrates on the automation and reliability
VTB
|
2019.06.21
|
Votes 0
|
Views 46232210
|
VTB | 2019.06.21 | 0 | 46232210 |
| 2386 |
[Free] Rest-Assured : Java Domain-specific language that makes testing REST service
VTB
|
2019.06.21
|
Votes 0
|
Views 45503093
|
VTB | 2019.06.21 | 0 | 45503093 |
| 2385 |
Postman : API Testing Tool (1)
Testersbest
|
2019.06.21
|
Votes 0
|
Views 45555861
|
Testersbest | 2019.06.21 | 0 | 45555861 |
| 2384 |
Robotium: Android UI Testing
Testersbest
|
2019.06.21
|
Votes 1
|
Views 46109580
|
Testersbest | 2019.06.21 | 1 | 46109580 |
| 2383 |
Ranorex : Automation Testing Tool for desktop, web, and mobile applications
Testersbest
|
2019.06.21
|
Votes 0
|
Views 45276314
|
Testersbest | 2019.06.21 | 0 | 45276314 |
| 2382 |
TestingWhiz : Automation Testing Tool for Software, Web, Mobile, Database, Cloud, Web Services and API testing
Testersbest
|
2019.06.21
|
Votes 0
|
Views 45809749
|
Testersbest | 2019.06.21 | 0 | 45809749 |
| 2381 |
Travis CI : Test and Deploy with Confidence
edouwens
|
2018.11.19
|
Votes 0
|
Views 45553777
|
edouwens | 2018.11.19 | 0 | 45553777 |
| 2380 |
QF- Test : automation testing tool that is meant for testing Java and Web GUI application (1)
aiitistqb
|
2018.10.16
|
Votes 0
|
Views 46360026
|
aiitistqb | 2018.10.16 | 0 | 46360026 |
| 2379 |
Wink : Time-based and action-based capture of user actions
aiitistqb
|
2018.10.16
|
Votes 0
|
Views 46396245
|
aiitistqb | 2018.10.16 | 0 | 46396245 |
| 2378 |
Crucible : a web-based application primarily targeting enterprise
aiitistqb
|
2018.10.16
|
Votes 0
|
Views 46089346
|
aiitistqb | 2018.10.16 | 0 | 46089346 |
| 2377 |
Automated Mobile Testing Tools List
aiitistqb
|
2018.10.16
|
Votes 0
|
Views 44970960
|
aiitistqb | 2018.10.16 | 0 | 44970960 |
| 2376 |
SpecFlow : software tool that computer programmers use for testing other software
aiitistqb
|
2018.10.16
|
Votes 0
|
Views 45784639
|
aiitistqb | 2018.10.16 | 0 | 45784639 |
| 2375 |
Ranorex : Test Automation Tools for Complete Awesomeness
Testersbest
|
2018.10.16
|
Votes 0
|
Views 46422962
|
Testersbest | 2018.10.16 | 0 | 46422962 |
| 2374 |
SmartBear : End-to-End Automated Testing for Mobile, Web & Desktop Apps
Testersbest
|
2018.10.16
|
Votes 0
|
Views 45344040
|
Testersbest | 2018.10.16 | 0 | 45344040 |
| 2373 |
Bugdojo : Continuous QA for your web apps
Testersbest
|
2018.10.16
|
Votes 0
|
Views 44951255
|
Testersbest | 2018.10.16 | 0 | 44951255 |
| 2372 |
TEstNg (5)
kg2031
|
2018.02.28
|
Votes 0
|
Views 45737948
|
kg2031 | 2018.02.28 | 0 | 45737948 |
| 2371 |
Locators (1)
kg2031
|
2018.02.28
|
Votes 0
|
Views 46023461
|
kg2031 | 2018.02.28 | 0 | 46023461 |
| 2370 |
Crystal Reports
nk1
|
2018.02.23
|
Votes 0
|
Views 45333943
|
nk1 | 2018.02.23 | 0 | 45333943 |
| 2369 |
Selenium Learning Tutorial (4)
Dwarika
|
2017.08.28
|
Votes 0
|
Views 45996064
|
Dwarika | 2017.08.28 | 0 | 45996064 |
| 2368 |
[Paid] Module for Binary formats
SoftLogica
|
2017.08.11
|
Votes 0
|
Views 46309701
|
SoftLogica | 2017.08.11 | 0 | 46309701 |
| 2367 |
Getting Started with Selenium IDE
VijayShinde
|
2017.06.09
|
Votes 0
|
Views 46003602
|
VijayShinde | 2017.06.09 | 0 | 46003602 |
| 2366 |
UniPi Is A Powerful Board That Can Control Your Smart Home
TLP
|
2017.04.26
|
Votes 0
|
Views 45408235
|
TLP | 2017.04.26 | 0 | 45408235 |
| 2365 |
what is diff between SVN and GITHUB
vivekjog
|
2017.04.24
|
Votes 0
|
Views 47008246
|
vivekjog | 2017.04.24 | 0 | 47008246 |
| 2364 |
Macro to remove trailing spaces (1)
Christo
|
2017.03.29
|
Votes 0
|
Views 45655062
|
Christo | 2017.03.29 | 0 | 45655062 |
| 2363 |
Comparing 2 work sheets (2)
Christo
|
2017.03.29
|
Votes 0
|
Views 46280778
|
Christo | 2017.03.29 | 0 | 46280778 |
| 2362 |
Tool to generate all combinations of test parameters. (3)
Christo
|
2017.03.29
|
Votes 0
|
Views 46136793
|
Christo | 2017.03.29 | 0 | 46136793 |
| 2361 |
Best Testing Tools of 2014 (2)
kleyzit
|
2017.02.24
|
Votes 0
|
Views 44576189
|
kleyzit | 2017.02.24 | 0 | 44576189 |
| 2360 |
JCrawler (1)
Sky Driver
|
2017.01.26
|
Votes 0
|
Views 45681247
|
Sky Driver | 2017.01.26 | 0 | 45681247 |
| 2359 |
fwptt
Sky Driver
|
2017.01.26
|
Votes 0
|
Views 45545087
|
Sky Driver | 2017.01.26 | 0 | 45545087 |
| 2358 |
AppLoader: Performance Testing for Any Application
Sky Driver
|
2017.01.26
|
Votes 0
|
Views 45401859
|
Sky Driver | 2017.01.26 | 0 | 45401859 |
| 2357 |
LoadStorm
loveelok
|
2017.01.20
|
Votes 0
|
Views 46538157
|
loveelok | 2017.01.20 | 0 | 46538157 |
| 2356 |
SiteBlaster
loveelok
|
2017.01.20
|
Votes 0
|
Views 44918580
|
loveelok | 2017.01.20 | 0 | 44918580 |
| 2355 |
Xceptance LoadTest (1)
loveelok
|
2017.01.20
|
Votes 0
|
Views 45633041
|
loveelok | 2017.01.20 | 0 | 45633041 |
| 2354 |
Test Manager (1)
loveelok
|
2017.01.12
|
Votes 0
|
Views 45501373
|
loveelok | 2017.01.12 | 0 | 45501373 |
| 2353 |
Test Environment Toolkit (1)
master15
|
2017.01.06
|
Votes 0
|
Views 46343864
|
master15 | 2017.01.06 | 0 | 46343864 |
| 2352 |
Burpsuite Pro 1.5.01 (1)
master15
|
2016.12.15
|
Votes 0
|
Views 45283633
|
master15 | 2016.12.15 | 0 | 45283633 |