Driving Headless Browser Testing with Selenium and Python
I assume you’ve all heard Google’s announcement from last year about shipping Headless Chrome in Chrome 59. If not, it’s time to catch up, because since then, headless testing has been available through Chrome. As Google put it, it’s like “running Chrome without Chrome!”. This provides testers with all the speed advantages of the Chrome V8 engine, but without having to use a GUI.
In this blog post, I will show you how to run a headless Chrome test with Selenium WebDriver and Allure. But first, let’s learn a bit more about the pros and cons of headless testing in general, and Chrome headless in particular. This blog post is based on the webinar I gave “Driving Headless and Chrome with Selenium and Python”.
Headless Chrome Pros
1. Resource usage is reduced
2. Headless browsers are faster
For the same reason as the previous point, headless browsers are also quicker to start running tests. In my experience, this will not always be much faster, but it is faster than real browsers.
3. Running headless tests is quicker for developers
Being able to run tests straight from the command line can save a lot of time for developers who want to verify their code quickly and don’t need GUI intervention. This way, developers, can quickly feel confident that their code didn’t break the webpage’s functionality.
4. Headless is ideal for HTML scraping
5. Headless is ideal for monitoring your network application performance
If you wish to monitor your network application performance, headless can be a good solution for you. You can use headless testing to automate the rendering and screen capturing of your website images and to perform layout checks in an automated fashion. Chrome headless API has recently developed another cool open source tool designed to handle these types of tests, called Puppeteer.
Headless Chrome Cons
Chrome headless has limitations compared to other headless browsers. First of all, it’s not open source. Unlike Chromium or PhantomJS, headless browsers that the community contributed to their development, Google is the only entity that will contribute to Chrome headless development. Second, since headless Chrome is rather new in the headless section, it may raise unknown issues for the community.
In addition, if you are used to running your tests in regular Chrome, you will also need to adjust, and transferring your tests will require additional work and tweaking.
Headless Testing Cons
Headless testing itself also has disadvantages. As it does not mimic real users interactions and workflows as well as regular chromeDriver mode, it’s difficult to catch bugs that are related to crashing images, because the UI isn’t displayed. In addition, headless is not the perfect solution for debugging purposes, since the test will not be visible to you.
Running Our Headless Chrome Test
Before we actually get started with running our headless tests, let’s make sure we prepare our environment properly.
Here is a list of prerequisites:
- Python virtualenv
- Chrome browser v59 (at least). It’s recommended to install the latest version
- ChromeDriver v.2.38 with the latest fixes and updates, for supporting headless
- Pytest - for writing your test
- Selenium Webdriver for Python - for interacting with the browser
Learn more about preparing your environment and creating your tests from my blog post ”How to Automate Testing Using Selenium WebDriver, Jenkins and Allure”.
Now, follow these steps:
- Create a new folder designated for your repository
- Create a new environment next to it
- Make sure to put latest ChromeDriver inside the virtual environment bin folder
- Activate the virtual environment
We are now ready to run our tests! In order to run headless chrome you simply need to add the following to your chrome instance:
According to the example given in the public repo, the chrome instance is initiated from the conftest.py file.
Once that is done you can run your tests headlessly as follows:
Integrating Chrome Headless with Jenkins, Slack and Allure
I integrated Allure reports and Slack notifications into Jenkins. Each night, all of our tests are executed, and I receive an Allure report and Slack notifications about the tests results with links to Jenkins.
On Allure you can click in the different tests to get more details about it, including screenshots, errors, trends, etc.
Running Your Headless Tests in BlazeMeter
Another easy way to run your Headless test is by simply uploading your file to BlazeMeter and running it. Then, you can easily analyze results and share your tests with team members and managers. You can also manage user permissions and assign tests.