Sign in

Senior Quality Engineer at Pendo.io | Writing about JavaScript and Python test automation

A passing a test may not always be a good thing.

Photo by the blowup on Unsplash

Rooting through a test flake can be an arduous and frustrating experience. Staring at lines of code in an attempt to determine where or why a failure is occurring is mentally taxing. I have personally fallen victim to hours-long debugging sessions in order to fix a flakey set of tests.

But, what about a test that never fails?

Far more insidious than its flakey cousin, the test that never fails is always that beautiful shade of green which tells you that everything is quite alright. In fact, there is a quiet confidence that emanates from a test that never fails…


Detailing what it means to be a tester on an agile project team.

Photo by David Travis on Unsplash

I have been reading through Agile Testing: A Practical Guide For Testers And Agile Teams, by Lisa Crispin and Janet Gregory, when I found a small portion that discussed the existence of a “Bill of Rights” for programmers and customers. Lisa Crispin noted that a “Tester Bill of Rights” was absent, so she and Janet set forth to create one.¹

The “Tester Bill of Rights” contains six articles, each describing a primary right or responsibility of the tester within an agile team. Unfortunately, there is a lack of detail regarding each article. …


Learn how to effectively debug Cypress test code.

It’s easier than this, trust me. (Photo by Clem Onojeghuo on Unsplash)

Debugging — we have all been there. Staring at lines of code for hours on end wondering why something broke the way it did. Debugging automation code can be a frustrating and mentally exhausting experience. No matter the toolset, rooting through lines of code to determine where automation broke down is challenging.

I personally am guilty of spotting an error, then immediately running my code again. For some reason I continue to think that the second time around my code will pass without issue. As if a 50% failure rate is anything to feel confident about — it is not.


Watch your response rate skyrocket by following these simple tips.

Searching for a job got me like… (Photo by Magnet.me on Unsplash)

Are you feeling frustrated with getting ghosted when searching for a new job?

Trust me, I have been there. Getting ghosted hurts on both a personal and emotional level. It feels awful to know that a prospective employer did not take the time to notify you that you are not right for a position, or that they have found another candidate.

I was ghosted for the first handful of applications that I submitted after graduating from Northwestern University’s coding boot camp in 2017. I figured that I would receive a bunch of rejections, but nothing prepared me for being ignored…


Learn how to test multiple user journeys in a single test.

Photo by Ferenc Almasi on Unsplash

Have you ever written a series of tests that were so similar, you wanted to join them together rather than run them separately?

I have, quite frequently. When I notice that I am falling into this pattern I turn to parameterization, something that I became familiar with while writing tests in Python using Pytest.

The act of parameterizing a test is to perform the same (or similar) series of actions with different values. An example would be writing a script for selecting three similar buttons on a screen. …


Learn how to capture network calls for stubbing, assertions, and more.

Photo by Kevin Martin Jose on Unsplash

If you have used Cypress in the past you should be familiar with the cy.server() and cy.route() methods. They enabled engineers to handle XHR requests within the browser for patterns such as mocking responses, aborting requests, and smart waiting.

Deprecated in Cypress 6.0.0, both cy.route() and cy.server() have been replaced by a new method, cy.intercept()

Released in November of 2020, the cy.intercept() method allows engineers to monitor all network traffic, not just XHR requests.² Simply put, this is a game changer. …


How to use the Cypress request library for API calls and API testing.

Photo by Pavan Trikutam on Unsplash

Are you tired of maintaining a Postman collection for API testing outside of your automation framework?

I worked for a company that used Postman/Newman for API testing and Cypress for end-to-end. We would manually export Postman collections, then check the export into project repositories. The entire process was fairly brittle and cumbersome seeing as we had two locations for API documentation:

  1. Postman runner
  2. The project repository

Why not consolidate tooling and use Cypress as our end-to-end and API test runner?

This tutorial will demonstrate how to use Cypress’ built-in request library to make API calls so it may act as…


Explore the most common causes of test automation frameworks breaking down

Photo by Jesse Chan on Unsplash.

Over the past five years, I have had the pleasure of maintaining and constructing a number of automation frameworks for a slew of companies. Each framework had its own distinct set of challenges and advantages. Some thrived, some failed.

I have learned a lot from each of my automation experiences, whether it was a best practice or understanding a pattern to avoid (for more on these, take a look at my article on JavaScript anti-patterns). Throughout all of it, I have taken note of a number of occurrences that seem to predict automation failure.

The following items are what I…


Learn how to filter tests by tag using the Cypress testing framework.

Photo by Wade Austin Ellis on Unsplash

A common practice in the field of test automation is to filter runs based on a set of criteria, whether it be to solely run UI tests or those for an API. Test filtering can be helpful in trimming down runs so that they are scoped properly to the work at hand.

Cypress does not offer the ability to filter test runs natively, an issue that has been ongoing since 2018.¹ Instead, engineers must write their own filtering methods to be used with Cypress.

I came across this issue while working for a start-up in Raleigh, North Carolina. The shop…


Learn how to effortlessly run tests in parallel to reduce CI build times.

Photo by Martin Sanchez on Unsplash

Running automated UI tests can be time consuming which can destabilize CI by causing new builds to take minutes to process rather than seconds. Thankfully, there is a solution, parallelization.

Test parallelization is the process of distributing test load across multiple processors, then running the tests all at one time. Parallelization can take a number of forms, including using individual processors or setting up sub-processes. The result leads to exorbitantly shorter execution times which will make CI builds much faster.

In this tutorial, we will learn how to run tests in parallel using Pytest, Pytest-Xdist, and Playwright. …

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store