DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Refcards Trend Reports Events Over 2 million developers have joined DZone. Join Today! Thanks for visiting DZone today,
Edit Profile Manage Email Subscriptions Moderation Admin Console How to Post to DZone Article Submission Guidelines
View Profile
Sign Out
Refcards
Trend Reports
Events
Zones
Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
  1. DZone
  2. Software Design and Architecture
  3. Performance
  4. Why You Should Use Puppeteer for Testing

Why You Should Use Puppeteer for Testing

When you use Puppeteer, you are the Puppeteer.

Robin Jangu user avatar by
Robin Jangu
·
Apr. 04, 19 · Presentation
Like (2)
Save
Tweet
Share
7.18K Views

Join the DZone community and get the full member experience.

Join For Free

Over the past decade, the world has seen the emergence of powerful JavaScript-based web apps while new frameworks evolved. These frameworks challenged issues that had long been associated with crippling website performance. Interactive UI elements, seamless speed, and impressive styling components have started co-existing within a website without compromising the speed too heavily. CSS and HTML are now injected into JS instead of the other way around because JS is simply more efficient. While the use of these JavaScript frameworks has boosted performance, it has taken a toll on testers.

Testing and debugging has become more and more complex. Puppeteer has been introduced as a node library used to enable Chrome browser testing.

Headless Browser

As the name itself indicates, headless browsers are the browsers that run as an app process without any user interface elements. Headless browsers, like Headless Chrome, are simply faster, consume less memory, are more flexible, and are steadier under automation stress.

Google has been working to ensure that proper support is provided for the DevTools ecosystem. With the use of Puppeteer, web crawling, scraping, and launching automated scripts can now be accomplished with less efforts, and more stability than before.

Automation Made Easy

Selenium leads the industry when it comes to automation testing. This wonderful, open-sourced tool has been accepted by the testing community with open arms. But, and this is a big but, Selenium testing requires installed browsers no matter whether Selenium is installed on the cloud or on a local machine. Add in the complexity of integrations with the variety of components, and it becomes too difficult for the process to run smoothly.

Headless Chrome has become the go to guy when it comes to using automated scripts into the browser. The use of Karma, Mocha, and Puppeteer along with it has all of sudden made testing using automated scripts easier.

Visual UI Regression Testing

Puppeteer can be used for regression testing of various UI elements. To test the UI of the website, it is advisable to have the latest chromium version to ensure better API control. Usually, Mocha is used along with Puppeteer in order to have regressive testing on the various UI features. In addition, Mocha provides you with hooks that can be used before or after testing.

Puppeteer is successful mainly because it simplifies the functionalities related to automated tasks performed on browsers.

Screenshot Testing

The ultimate trio of Jest, Headless Chrome, and Puppeteer can be used for screenshot-based testing. Jest comes with the powerful React ecosystem and its integration paves the way for the JavaScript elements to be tested with ease.

Puppeteer-screenshot-tester is a library in the puppeteer itself that allows screenshots to be generated while testing.

Similarly, ava-puppeteer is another library that is available on GitHub that will soon be available on npm.

browser speed, speed test

Performance Testing

Using Puppeteer, performance metrics can be measured and analyzed in order to optimize the website for different devices and network speeds. Chrome provides DevTools that enable recording of the Performance Timeline that when automated, reveals the problems associated with performance. Puppeteer is a high-level API control over Chrome Developers Tools Protocol. The proficiency of Puppeteer to easily handle asynchronous elements and their behavior with respect to the DOM state change. You can even save the performance data as a JSON file.

Put it like this: when you use Puppeteer, you are the Puppeteer. You can exercise control over the service workers and test the caching as well as the loading time of a website with or without cache time. Website response time can be tracked using responseEnd, along with the influence of network bandwidth and latency related issues.

Load Testing Using Puppeteer

Load test is simply accounting for the maximum number of instances that you can probably run on your site. Multiple Puppeteer instances can be launched parallelly with ease through which you can load test the website under review.

Puppeteer is true to its name, as you have a heavenly command over your headless chrome with which you have the ability to launch a lot of test instances on a single or multiple browser session.

$ puppeteer-loadtest --s=120 --c=40 --file=XYZ.js


Here, the –s is for the number of samples and –c is for the concurrent sessions per sample.

End-to-End Testing

End-to-end or acceptance testing is often considered one of the least popular forms of testing. Selenium was used earlier for acceptance testing, and it is quite an error prone and has a lot of bugs. Then came Puppeteer with improved focus on the API control that helped disentangle the complications that came in the form of bugs. One of the superpowers of Puppeteer that it doesn’t need to know about your stack and can work with any framework, be it React, Angular, or any other library.

Conclusion

The success of Puppeteer and Chrome can’t be reduced only to their efficiency; the fact that it is a Google-backed library is another reason why it has been accepted and recognized globally. The biggest problem, however, is that while its integrity with headless Chrome is brilliant, with other browsers, it may falter.

Having said that, I strongly believe that this tool will flourish with the ever-expanding Google ecosystem. The future shines brightly for Puppeteer.

Regression testing Element Testing Library Framework Acceptance testing Load testing Web apps Headless browser app

Published at DZone with permission of Robin Jangu. See the original article here.

Opinions expressed by DZone contributors are their own.

Popular on DZone

  • Spring Cloud: How To Deal With Microservice Configuration (Part 1)
  • What Should You Know About Graph Database’s Scalability?
  • Key Considerations When Implementing Virtual Kubernetes Clusters
  • The Quest for REST

Comments

Partner Resources

X

ABOUT US

  • About DZone
  • Send feedback
  • Careers
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 600 Park Offices Drive
  • Suite 300
  • Durham, NC 27709
  • support@dzone.com
  • +1 (919) 678-0300

Let's be friends: