When it comes to software testing, the debate of Puppeteer vs Selenium is a hot one. Nicole tackles it here to determine which one is better for load testing in particular. Spoiler: The answer is still "it depends".
Hi everyone, Nicole here again, back for another Ask a Flooder, and today, the question is: "Puppeteer vs. Selenium: which one is better for load testing?"
We're actually getting this quite a bit now as Puppeteer grows in popularity, but first, let's discuss the similarities. They're tools that you can use to drive browsers. The work by identifying and interacting with elements on a website in the same way that a user would. They are also both open-source, and both can be used for load testing. This is a great strategy because instead of writing tests for an automation suite and then tests for load testing, you can just write the one test suite and re-use it, so it saves a lot of resources in the end. To answer this question, I'm going to focus on load testing because that's what my experience is in.
Difference between Selenium and Puppeteer
Pros and cons of Selenium
Now for the difference. Selenium supports more browsers than does Puppeteer. It supports Chrome, Firefox, IE, Safari, and Opera, so there are a lot more options to choose from depending on your application.
Selenium is also what I would call automation-first. It was built with automation in mind, which means it's very good at that. It's very robust, and if you have a complicated test scenario, Selenium is an excellent choice.
It's also been around for much longer than Puppeteer, which is important because that means it's had more time to build up a community. There are way more resources and tutorials for Selenium than for Puppeteer.
It's also, unfortunately, very resource-intensive. That's not something that you would typically care too much about from a test automation perspective, but when you're running thousands of users on the cloud, it IS important to keep in mind that Selenium, just because of how it's built and its complexity, can only run about five users per node. We've found that out at Flood, after baselining specifically an AWS m5.xlarge instance. So you can look at the specs of that and compare it with the machines that you're wanting to run Selenium on, to see how that would equate for you.
Pros and cons of Puppeteer
Puppeteer is a NodeJS library developed by Google, which means it plays very well with Chrome. There are a whole lot of things that you have access to with Puppeteer, and if you're using it with Chrome, pretty much anything in Chrome, including rendering times, you can see and access with a Puppeteer script. So that's a huge advantage.
Unfortunately, that also means it supports fewer browsers. Obviously, it supports Chrome very well, and they recently came out with support for Firefox, although they do have plans to incorporate support for more browsers in the future.
One of Puppeteer's advantages is that we at Flood actually created a tool on top of Puppeteer. It's also open-source. It's called Flood Element, and Element is built to be performance-first because obviously, that's what we had in mind when we were building it. It takes everything that's good about Puppeteer and makes it really easy to set parameters that you normally would expect to need for load testing, like users and ramp-up.
This also means that it's way less resource-intensive. I said that with Selenium, you can run up to five users on an AWS m5.xlarge instance, and for the same instance type, you can run, from our experiments, anywhere from 30-50 Element scripts/users. That is a huge saving when you're running a really large-scale test.
Should you choose Selenium or Puppeteer for load testing?
I would say that if you already have a large Selenium automation suite, if you have a complex test scenario, or if you aren't running that many users for your load test, then Selenium is a great choice. If you ARE running thousands of users, though, and resource efficiency, and therefore cost efficiency, is really important to you, then choose Element.
My advice is always to try both. If you have the time, do a proof of concept with both of them. That way, your whole team can better understand what the pros and cons are for each one and decide which one is best going forward. Or maybe you don't even decide on one. At Flood, we support both of them at the same price, so it depends on what you prefer.
Until next time, happy flooding!