The Sauce Labs Cookbook

Sauce Headless

Front End Performance Testing

Analytics

External Resources

More Info


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

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 12 Next »

Extended Debugging Required

You must have Extended Debugging enabled and run your tests on Chrome to use these commands.

Custom Commands are in Beta

This feature is currently in Beta and some commands might not work as expected. Please test the results of these commands under non-critical conditions before deploying to critical production situations.

You can use these custom commands for the JavaScript Executor, in conjunction with the Extended debugging feature, to control networking capabilities for your tests, and to generate custom logs. 

Network Commands

Intercepting Network Requests

Allows modifying any request made by the browser. You can blacklist, modify, or redirect these as required for your tests. For example, you can:

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

sauce:intercept + redirect

Request Parameters

  • url: a string that matches outgoing request URL (wildcards are supported, e.g. https://saucelabs.com/rest/v1/* would match all v1 rest API requests)
  • redirect | respond: action on request
    • redirect: string representing an absolute url that the original request gets redirected to
driver.execute_script('sauce:intercept', {
    "url": "https://saucelabs.com",
    "redirect": "https://google.com"
})

sauce:intercept + respond

Request Parameters

  • url: a string that matches outgoing request URL (wildcards are supported, e.g. https://saucelabs.com/rest/v1/* would match all v1 rest API requests)
  • respond:object  can contiain :
    • statusCode: number representing the request status (200)
    • headers: list of key/value pairs that is set as header variables (e.g "Cookie: "foo=bar")
    • rawResponse: actual response payload as 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"
            }]
        }
    })
sauce:intercept+ error

Request Parameters

  • url: a string that matches outgoing request URL (wildcards are supported, e.g. https://saucelabs.com/rest/v1/* would match all v1 rest API requests)
  •  error: error type could be
    • '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'}


Example

Python example
driver.execute_script('sauce:intercept', {
    "url": "https://saucelabs.com",
    "redirect": "https://browserstack.com"
})
# or
driver.execute_script('sauce:intercept', {
    "url": "https://saucelabs.com/res7/v1/build/32hmv4j32v4j2j3v4j24v232vj4j",
    "respond": {
        "statusCode": 200,
        "headers": {
            "etag": 3244224432,
            "Cookie: "foo=bar",
            ...
        },
        "rawResponse": "{\"username\":\"..."
    }
})

Throttle Network Capabilities

With network conditioning you can test your site on a variety of network connections, including Edge, 3G, and even offline. This command throttles the data throughput, including the maximum download and upload throughput. Latency manipulation enforces a minimum delay in connection round-trip time (RTT).


JavaScript Executor CommandRequestParametersExample
sauce:throttle

Request Parameters

conditioncan be a string or object representing the network condition of the browser.

stringStrings should correspond to the predefined profiles in this table, for example GPRS, as shown in the example. Table columns represent download speed in kb/s, upload speed in kb/s, and delay in connection round-trip time (RTT) for each profile.
objectWith objects you can create custom network conditions. You must define the download speed, upload speed, and latency for the custom condition, as shown in the example.
driver.execute_script('sauce:throttle', {
	"condition": "GPRS"
})
# or
driver.execute_script('sauce:throttle', {
	"condition": {
		"download": 1000,
		"upload": 500,
		"latency": 40
    }
})

Custom Log Types

Network Timing Log

The Sauce Labs timing log receives page metrics for network timings as defined by the PerformanceTiming property. All timings are relative to navigationStart, since the absolute timings described for the property are not useful for testing purposes.


JavaScript Executor CommandResponse
sauce:timing
Sample response
{
    "navigationStart": 0
    "unloadEventStart": -1
    "unloadEventEnd": -1
    "redirectStart": 0
    "redirectEnd": 312
    "fetchStart": 312
    "domainLookupStart": 312
    "domainLookupEnd": 312
    "connectStart": 312
    "connectEnd": 312
    "secureConnectionStart": -1
    "requestStart": 39
    "responseStart": 309
    "responseEnd": 312
    "domLoading": 316
    "domInteractive": 359
    "domContentLoadedEventStart": 560
    "domContentLoadedEventEnd": 560
    "domComplete": 622
    "loadEventStart": 622
    "loadEventEnd": 622
}

Application Metrics Log

The Sauce Labs metric log receives application-related metrics. As with the timing log, all metrics are relative to the page load time.

JavaScript ExecutorResponse
sauce:metrics
Sample response
{
    "timestamp": 35037.202627,
    "audioHandlers": 0,
    "documents": 3,
    "frames": 2,
    "jsEventListeners": 63,
    "layoutObjects": 435,
    "nodes": 506,
    "resources": 11,
    "layoutCount": 2,
    "recalcStyleCount": 5,
    "layoutDuration": 0.0860430000029737,
    "recalcStyleDuration": 0.00374899999587797,
    "scriptDuration": 0.0770069999925909,
    "taskDuration": 0.297364000020025,
    "jsHeapUsedSize": 6295344,
    "jsHeapTotalSize": 10891264,
    "firstMeaningfulPaint": 35036.03356,
    "domContentLoaded": 35036.122972,
    "navigationStart": 35035.833805
}

Network Log

The Sauce Labs network log receives comprehensive information on all network requests being made by the page currently open in the browser.

JavaScript Executor CommandResponse
sauce:network
Sample response
{
    "url": "http://saucelabs.com/beta/dashboard",
    "requests": [{
        "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
        }
    }, {
        ...
    }]
}
  • No labels