The Sauce Labs Cookbook

Sauce Headless

Front End Performance Testing

Insights

External Resources

More Info


Page tree
Skip to end of metadata
Go to start of metadata

To enable networking capabilities for tests and generate custom log files, use these Sauce Labs options for the Selenium JavaScript Executor and our extended debugging features. You can find more examples of this feature written in Node.js, Python, and Java on GitHub.

What You'll Need

  • Google Chrome (no older than 3 versions from latest) as the test browser
  • Enabled extendedDebugging capability in your test config
Enable extendedDebugging Example
const sauceOptions = {
    'sauce:options': {
        extendedDebugging: true,
	}
}


See the following sections for more information:

Test Environment Tools

Test Environment Tools simulate network conditions and manipulate network requests to analyze and improve test performance. 

Intercept Network Requests

Allows modification of requests made by the browser. You can alter these as your tests require:

  • Prohibit requests to 3rd party vendors
  • Modify requests to REST API (Mock REST API response)
  • Redirect certain parts of the app 
  • Insert or change headers
JavaScript Executor CommandRequest ParametersSample Code

sauce:intercept + redirect

url: a string that matches an outgoing request URL. Wildcards are supported, for example https://saucelabs.com/rest/v1/* would match all v1 rest API requests.

redirect is a string representing an absolute URL where the original request is redirected. In the example, this is "https://google.com"

driver.execute_script('sauce:intercept', {
    "url": "https://saucelabs.com",
    "redirect": "https://google.com"
})
WDIO
browser.interceptRequest({
    "url": "https://saucelabs.com/",
    "redirect": "https://google.com"
})

sauce:intercept + response

url: a string that matches an outgoing request URL. Wildcards are supported, for example https://saucelabs.com/rest/v1/* would match all v1 rest API requests.

response: an object that represents the response to send when the requested URL is intercepted. There are three options:

    • status: number representing the request status (200)
    • headers: list of key/value pairs that is set as header variables, for example Cookie: "foo=bar"
    • body: actual response payload as a string
driver.execute_script("sauce:intercept", {
	"url": "http://sampleapp.appspot.com/api/todos",
        "response": {
            "headers": {
                "x-custom-header": "foobar"
            },
            "body": [{
                "title": "Hello",
                "order": 1,
                "completed": false,
                "url": "http://todo-backend-express.herokuapp.com/15727"
            }]
        }
    })
WDIO
browser.interceptRequest({
    "url": "http://sampleapp.appspot.com/api/todos",
        "response": {
            "headers": {
                "x-custom-header": "foobar"
            },
            "body": [{
                "title": "Hello",
                "order": 1,
                "completed": false,
                "url": "http://todo-backend-express.herokuapp.com/15727"
            }]
        }
    })
sauce:intercept+ error

url: a string that matches an outgoing request URL. Wildcards are supported, for example https://saucelabs.com/rest/v1/* would match all v1 rest API requests.

error: error values are:

  • 'Failed'
  • 'Aborted'
  • 'TimedOut'
  • 'AccessDenied'
  • 'ConnectionClosed'
  • 'ConnectionReset' 
  • 'ConnectionRefused'
  • 'ConnectionAborted'
  • 'ConnectionFailed'
  • 'NameNotResolved'
  • 'InternetDisconnected'
  • 'AddressUnreachable'
driver.execute_script("sauce:intercept", {
	"url": "https://saucecon.com/wp-content/uploads/2017/07/SauceCon-hero-img-100-2.jpg",
    error: "Failed"}
WDIO
browser.interceptRequest({
    "url": "https://saucecon.com/wp-content/uploads/2017/07/SauceCon-hero-img-100-2.jpg",
    error: "Failed"})

Throttle CPU Capabilities

Mobile devices have less CPU power than most desktops and laptops (or a VM's default configuration). You can use CPU Throttling to simulate how your app will run on slower systems, helping you identify possible performance issues.

JavaScript Executor CommandRequest ParametersExamples
sauce:throttleCPU

rate: a number defining the amount of slowdown (e.g. 2 ~ 2x slowdown, your CPU will be 2 times slower than usual)

driver.execute_script('sauce:throttleCPU', {
    "rate": 4
})
browser.throttleCPU(4)



Throttle Network Capabilities

With network conditioning you can test your site on a variety of network connections, including Edge, 3G, and even offline. You can throttle the data throughput, including the maximum download and upload throughput, and use latency manipulation to enforce a minimum delay in connection round-trip time (RTT).

JavaScript Executor CommandRequest ParametersExamples
sauce:throttleNetwork

condition: a string or object representing browser network conditions.

driver.execute_script('sauce:throttleNetwork', {
    "condition": "GPRS"
})
# or
driver.execute_script('sauce:throttleNetwork', {
    "condition": {
        "download": 1000,
        "upload": 500,
        "latency": 40
    }
})
browser.throttleNetwork("GPRS")
// or
browser.throttleNetwork({
        "download": 1000,
        "upload": 500,
        "latency": 40
})

Strings

Profile NameDownload Speed (kb/s)Upload Speed (kb/s)Round Trip Time (ms)
offline000
GPRS5020500
Regular 2G25050300
Good 2G450150150
Regular 3G750250100
Good 3G1Mb/s75040
Regular 4G4Mb/s3Mb/s20ms
DSL2Mb/s1Mb/s5ms
Wifi30Mb/s15Mb/s2ms
online
No Restrictions
No Restrictions
No Restrictions

Custom objects

You can create custom network conditions with objects. You must define the download speed (in bytes/second), upload speed (in bytes/second), and latency (in milliseconds) for the custom condition, as shown in the example.

Extended Debugging Tools

Extended Debugging Tools provide additional logs to analyze test results.

See Measure Page Load Performance Using Test Automation for information about performance logging tools.

Network Log

The Sauce Labs network log records all network requests being made by the page currently open in the browser. To retrieve the network log output, use:

driver.execute('sauce:log', { type: 'sauce:network' }):

Log TypeResponse
sauce:network
Sample response
[{
    "url": "http://saucelabs.com/beta/dashboard",
    "statusCode": 200,
    "method": "GET",
    "requestHeaders": {
        ...
    },
    "responseHeaders": {
        ...
    },
    "timing": {
        "blocked": -1,
        "connect": -1,
        "dns": -1,
        "receive": 0,
        "send": 0,
        "ssl": -1,
        "wait": 0
    }
}, {
    ...
}]