Skip to main content

Should you be using Distributed Testing for Performance Testing ?

Having posted elaborately on how to carry out JMeter distributed and using Jmeter Backend listener to plot live graph of running test. I have been disappointed with entire approach. And my disappointment is not limited to just JMeter as any other performance testing tool would suffer from similar factors.

Distributed test itself results in lower throughput than what you can achieve from test running from independent machine. This is described on (unfortunately web site is down for quite some time). I am pasting the reasoning here -

  1. If you want to use your local machine to control the test you have to navigate the joyous process of getting RMI to work over multiple subnets and firewalls to allow your local machine to control multiple remote (EC2) slaves – you can do this by tunnelling RMI communication and patching JMeter, it’s messy though. To workaround this issue you have to use a remote Master as well as remote Slaves.
  2. Even then, in master/slave mode when running high throughput tests JMeter will eventually reach an IO or network bottleneck that will affect the results (even using Batch mode). Too many processes trying to write to a single file at the same time inevitably start to queue. To be certain of avoiding this issue you have to not use Distributed mode and instead run multiple independent tests over n hosts that do not use the GUI and do not write results to a single master but instead run at the command line and keep results local. Then, after the test is complete, you have to collate everything. This approach has several annoying problems: a) excessive terminal windows, b) limited visibility on test progress as it happens, c) to preserve throughput the jmx file must be adjusted for the number of hosts in use and d) too much time is spent on repetitive tasks that could be automated.
I myself encountered weird issue of sudden drop in application throughput when using JMeter Distributed test on aws. But when I executed test independently on various machines then the issue never surfaced.

Not just this, using backend listener on distributed mode causes more drop in application throughput than what you can achieve with just distributed mode.

Given these reasons I decided to gave up on using distributed mode and backend listener entirely and began to use JMeter-EC2 project. Since the original project is not compatible with latest JMeter version I ended up forking it and using my own version. You could try it and it is compatible with JMeter 2.13

Now this leaves us on how we can yet use snazy grafana dashboard. The way to approach this would be to directly push results to influx db either from summary report or from jtl files. Something have not yet explored, have you?

Popular posts from this blog

How can you save resources when instantiaing driver?

I asked on my previous post about what was wrong in instantiating driver on set up method? And here is the solution video on my YouTube channel (After 5 years of gap I finally added new video tutorial :)) The solution described on video tutorial uses following set up - public class BaseClassOnDemandDriverSetup { private WebDriver driver ; @BeforeMethod public void setupTest () { // Any other set up goes here } @AfterMethod public void teardown () { if ( driver != null ) { driver .quit() ; } } public WebDriver getDriver () { if ( driver == null ) { WebDriverManager. chromedriver ().setup() ; driver = new ChromeDriver() ; } return driver ; } }

Security Testing and Selenium

I have come across many articles which talk of carrying out security testing with selenium however I found it very cumbersome to set up such tests. This is what this tutorial is going to make easy for you. It cover. My next Security Testing and Selenium YouTube video covers following - Importance of having security testing on CI What is dynamic application security testing Recommended tools from What is ?   Using    Project setup  <dependency> <groupId> org.zaproxy </groupId> <artifactId> zap-clientapi </artifactId> <version> 1.9.0 </version> </dependency> <dependency> <groupId> org.zaproxy </groupId> <artifactId> zap </artifactId> <version> 2.10.0 </version> </dependency> Start ZAP daemom (headless) mode  ./ -daemon -host -port 8080 -config api.addrs.a

Using chrome console to test xPath and css selectors

Since the advent of selenium there have been many plugin to test xPath / css selectors but you don’t need any of them if you have chrome browser. Using Chrome console you can test both xPath and css selectors. Launch website to be tested in chrome browser and hit F-12 and you would see chrome console opened in lower pane of application - Hit escape key and console would open another pane to write element locators - And now you can start writing xPath or css selectors in chrome console and test them - The syntax for writing css id - $$(“ ”) And hit the enter key. If your expression is right then html snippet of the application element corresponding to the css selector would be displayed - If you mouse over the html snippet in chrome console then it would highlight the corresponding element in application - If you want to clean console of previously written element selectors then just hit ctrl+L keys and chrome console would be empty again. Pro