As exploratory tester I love my browsers’ dev tools. Especially since I’m currently working on a CMS project, analyzing the available elements and their styles is what I’m doing every day.
When it comes to automating, Selenium Webdriver is capable of locating the elements of the DOM tree, interacting with them and even reading out there styles for verification and many other actions. But there is a tool in the toolbox that can also come in handy in automation that Selenium doesn’t cover (afaik): the network console! Selenium itself cannot capture what is going on when the browser captures its often 100+ files for one site from the web. The Webdriver “only” deals with the results.
For writing a simple check script I looked into this “problem” and found a very easy solution for Python that I want to show you. It’s by using the Browsermob Proxy. Just download and unzip the proxy to a folder reachable by your automation script and start coding.
Firing up the proxy:
# Start Proxy Server
from browsermobproxy import Server
server = Server("../browsermob-proxy-2.1.2/bin/browsermob-proxy")
server.start()
proxy = server.create_proxy()
print("Proxy-Port: {}".format(proxy.port))
# Start Webdriver
from selenium import webdriver
co = webdriver.ChromeOptions()
co.add_argument('--proxy-server={host}:{port}'.format(host='localhost', port=proxy.port))
driver = webdriver.Chrome(executable_path = "../drivers/chromedriver", chrome_options=co)
Now you have a running Webdriver that can collect information in HAR format. Let’s call a website and record the network traffic.
# Create HAR and get website
proxy.new_har("testpappy")
driver.get("https://testpappy.wordpress.com")
Now you have all the information that usually your browser’s network console provides in this HAR entity. So let’s find out, which files get loaded, how fast that was, and how big the files are.
# Analyze traffic by e.g. URL, time and size
for ent in proxy.har['log']['entries']:
print(ent['request']['url'])
print("{} ms".format(ent['time']))
print("{} kB".format(round((ent['response']['bodySize'] + ent['response']['headersSize'])/1024, 2)))
Don’t forget to clean up after you.
# Shut down Proxy and Webdriver
server.stop()
driver.quit()
The output is now a long list of entries looking something like this:
https://testpappy.wordpress.com/
1103 ms
129.46 kB
Now let your imagination run and think of what you could track and analyze for your project with that simple tool? Maybe a basic performance monitoring?
If you come up with something cool, let us all know by adding it to the comments here. Thanks!
The code used here is using Python 3.5 and the latest Chrome webdriver as of Dec. 30, 2016.
One thought on “Network Console for your test scripts”