Test user flows
How to test the performance of pages that involve user actions, such as a checkout flow.
You can use SpeedCurve to test pages that are part of a complex user flow, for example going through the checkout process of an e-commerce site.
The easy way: Create a standalone page
By far the easiest way to test pages that are part of user flows is to create a stand-alone page for the sole purpose of performance testing. This could be a checkout page with some hard-coded items in the shopping cart, or a test user account page that doesn't require authentication.
The main benefit to this approach is that it doesn't require writing complex synthetic scripts. The downside is that you need to invest some time in building the pages.
The other way: Use synthetic scripting to simulate user input
You can use test scripts to simulate a user navigating through your website. You can read about how to add scripts to your URLs here: Adding test scripts to URLs.
Below are some example scripts that various user flows. They have been annotated with comments to explain what each step is doing. Before using these examples, it's important to note a couple of things:
-
While these scripts support commands like
click
,setValue
, andsubmitForm
, we recommend using theexec
command to run JavaScript on the page. This is because it is easy to debugexec
commands by running the JavaScript directly in your browser console. -
When debugging scripts, we recommend removing the
logData
commands and running the scripts so that you can see where exactly the script is failing.
Note: Despite loading multiple pages, these user flow scripts will only count as one check from your SpeedCurve budget.
Example 1: Simulate simple navigation
// Turn data logging off to ensure that no performance metrics are
// collected until we navigate to the final page.
logData 0
// Navigate to the first page of the user flow. In this case, the
// index page of the SpeedCurve blog.
navigate https://speedcurve.com/blog/
// Optional: clear the screen if you want visual metrics like Start Render
// to be based on the final page's rendering progress
exec document.body.style.display = 'none'
// Turn data logging back on. Performance metrics will be collected
// from this point onwards.
logData 1
// Navigate to the latest blog post.
execAndWait document.querySelector('.post-title a').click()
Example 2: Simulate a checkout process
// Turn data logging off to ensure that no performance metrics are
// collected until we navigate to the final page.
logData 0
// Navigate to the first page of the user flow. In this case, a
// product page of a made-up website.
navigate https://shop.speedcurve.com/products/1234
// Add an item to the user's cart
exec document.querySelector('.add-to-cart').click()
// Go to the cart page
navigate https://shop.speedcurve.com/cart
// Begin the checkout process
exec document.querySelector('.checkout-as-guest').click()
// You can add more steps for completing the user flow here.
// We recommend completing user actions with the "exec" command
// because it is easier to debug in your own browser.
// Optional: clear the screen if you want visual metrics like Start Render
// to be based on the final page's rendering progress
exec document.body.style.display = 'none'
// Turn data logging back on. Performance metrics will be collected
// from this point onwards.
logData 1
// Navigate to the checkout page.
execAndWait document.querySelector('.checkout-submit').click()
Example 3: Simulate Ajax or SPA navigation
This follows essentially the same pattern as Example 1, as it loads the starting page and then clicks on a navigation link.
// Turn data logging off to ensure that no performance metrics are
// collected until we navigate to the final page.
logData 0
// Navigate to the first page of the user flow. In this case, the
// index page of the SpeedCurve blog.
navigate https://speedcurve.com/blog/
// Optional: clear the screen if you want visual metrics like Start Render
// to be based on the final page's rendering progress
exec document.body.style.display = 'none'
// Turn data logging back on. Performance metrics will be collected
// from this point onwards.
logData 1
// Load the next page with Ajax.
execAndWait document.querySelector('.next-page').click();
Important caveat: Browser cache
Unscripted tests in SpeedCurve load a page with a completely empty cache. When you run a scripted test that simulates user flow, the browser cache will be filled as the browser performs actions and loads different pages. This is often the desired behaviour, since a real user would also have a full cache.
In some cases, however, you may still want to test the performance of a page with an empty cache. In these cases, you can use the clearCache
command to clear the browser cache at any point. Note that the clearCache command is only supported in Chrome.
Updated about 1 year ago