npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

runsauce2

v2.3.0

Published

Run a simple test on Sauce Labs

Downloads

2

Readme

RunSauce

Run many kinds of simple tests with any Sauce Labs options.

This is probably mostly useful for people who work at Sauce.

Requirements

RunSauce requires Node.js version 7.6 or greater, and NPM.

Install

npm install -g runsauce

Configure

RunSauce needs to know your Sauce credentials before it can do anything useful. There's a handy interactive setup that will pre-populate a config file from your environment variables if it can.

# configure with your username / access key
runsauce --setup

If you run RunSauce with --setup after this initial setup, you will be given the ability to add servers to your config file. This can be useful for targeting dev environments or even local environments.

Basic Usage

# run a basic test with all the default options
runsauce

# check out all the options
runsauce --help
runsauce --tests
runsauce --shortcuts

# run a test with some custom options, like a guinea pig page test on chrome on
# linux
runsauce -t web_guinea -b c -p l

# do something craaazy, like run a test against a self-signed https cert
# on a custom dev server (assuming you have the config set) in Mac OS X 10.9
# with Safari 7, doing this 10 times with a concurrency of 5 tests at a time
runsauce -c dev -t selfsigned -p m9 -b s -v 7 -r 10 -n 5

Running sets of tests

You can also specify complex sets of tests and platforms to run. First, create a JSON file with your specification (notice the DSL you can use to restrict combinations of platforms):

{
  "tests": [
    {
      "test": ["ios", "ios_hybrid", "ios_loc_serv"],
      "device": ["ip", "ipa|t=ios"],
      "version": ["6.1|a<=1.0", "7.0", "7.1", "8.0|a>=1.3.0", "8.1|a>=1.3.1"],
      "backendVersion": ["1.0", "1.1", "1.2", "1.3.4"]
    }, {
      "test": ["android_hybrid|v>=4.4", "selendroid"],
      "device": ["ae"],
      "version": ["2.3", "4.0", "4.2", "4.3", "4.4", "5.0|a>=1.2.2"],
      "backendVersion": ["1.0", "1.1", "1.2", "1.3.4"]
    }
  ],
  "config": "prod",
  "build": "appium-smoke-%t",
  "processes": 12
}

This will take each test set and run every possible combination of test type, device name, platform version, and Appium version (but it will filter out combinations deemed unsuitable by the restrictions---e.g., a platform version of "6.1|a<=1.0" means that it will run on 6.1, but only in the case where the Appium version is <= 1.0). It will run these tests against the prod config, and give a build name of appium-smoke-%t (where %t is replaced by a timestamp). Finally, it will run at a concurrency of 12! I can now run this "build" with the following command:

./bin/runsauce -i my-build.json

(Note that you can also use the shortcut keys, e.g., "t" instead of "test" and "d" instead of "device" and so on).

For a working example, see demo-build.json, included in this repo.

Sauce Connect-based tests

Some tests require you to start the Sauce Connect Proxy on your system in advance of running the test:

  • connect
  • localname

Note that if running the localname test (which is a test of non-"localhost" local name proxying), you'll need to pass the -l or --localname option to runsauce with the 'interesting' local name (e.g., -l MyComputer.local)

Runsauce as a library

You can also build apps on top of runsauce. An example of this is in lib/matrix (made available as ./bin/appium-matrix.js. This app reads a "build" configuration (see above), then after running the set of Appium tests puts together a 4-dimensional support matrix with stability annotations. It outputs to the command-line or as HTML. For example, let's say I have the desire to see how Appium fares across Appium versions and iOS versions with respect to the safariIgnoreFraudWarning capability. Then I can build a "build" configuration as follows in, say, "fraud-build.js":

module.exports = {
  config: 'prod',
  build: 'appium-fraud-matrix-%t',
  processes: 20,
  name: "Appium iOS fraud warning capability test"
  tests: {
    backendVersion: ['1.0.0', '1.1.0', '1.2.4', '1.3.6', '1.3.7-beta'],
    version: ['6.1', '7.0', '7.1', '8.0|a>=1.3.6', '8.1|a>=1.3.6', '8.2|a>=1.3.7-beta'],
    test: 'web_fraud',
    browser: 's',
    device: ['ip', 'ipa']
  }
};

Now I can run the matrix app, specifying my input file and telling it to run each combination 5 times so we can generate meaningful reliability statistics:

./bin/appium-matrix.js -d -r 5 -i fraud-build.js

Ultimately the app will output something like:

┌───────────────────┬───────────────────────────────┬───────────────────────────────┬───────────────────────────────┬─────────┬───────────────────────────────┬─────────┐
│                   │ iOS 6.1                       │ iOS 7.0                       │ iOS 7.1                       │ iOS 8.0 │ iOS 8.1                       │ iOS 8.2 │
├───────────────────┼───────────────────────────────┼───────────────────────────────┼───────────────────────────────┼─────────┼───────────────────────────────┼─────────┤
│ Appium 1.0.0      │ ┌───────────┬──────┬────────┐ │ ✗                             │ ✗                             │ —       │ —                             │ —       │
│                   │ │ 0.92      │ iPad │ iPhone │ │                               │                               │         │                               │         │
│                   │ ├───────────┼──────┼────────┤ │                               │                               │         │                               │         │
│                   │ │ web_fraud │ ✓    │ 0.83   │ │                               │                               │         │                               │         │
│                   │ └───────────┴──────┴────────┘ │                               │                               │         │                               │         │
├───────────────────┼───────────────────────────────┼───────────────────────────────┼───────────────────────────────┼─────────┼───────────────────────────────┼─────────┤
│ Appium 1.1.0      │ ✓                             │ ✗                             │ ✗                             │ —       │ —                             │ —       │
├───────────────────┼───────────────────────────────┼───────────────────────────────┼───────────────────────────────┼─────────┼───────────────────────────────┼─────────┤
│ Appium 1.2.4      │ ✓                             │ ✓                             │ ┌───────────┬────────┬──────┐ │ —       │ —                             │ —       │
│                   │                               │                               │ │ 0.92      │ iPhone │ iPad │ │         │                               │         │
│                   │                               │                               │ ├───────────┼────────┼──────┤ │         │                               │         │
│                   │                               │                               │ │ web_fraud │ ✓      │ 0.83 │ │         │                               │         │
│                   │                               │                               │ └───────────┴────────┴──────┘ │         │                               │         │
├───────────────────┼───────────────────────────────┼───────────────────────────────┼───────────────────────────────┼─────────┼───────────────────────────────┼─────────┤
│ Appium 1.3.6      │ ✓                             │ ┌───────────┬────────┬──────┐ │ ✓                             │ ✗       │ ✓                             │ —       │
│                   │                               │ │ 0.83      │ iPhone │ iPad │ │                               │         │                               │         │
│                   │                               │ ├───────────┼────────┼──────┤ │                               │         │                               │         │
│                   │                               │ │ web_fraud │ ✓      │ 0.67 │ │                               │         │                               │         │
│                   │                               │ └───────────┴────────┴──────┘ │                               │         │                               │         │
├───────────────────┼───────────────────────────────┼───────────────────────────────┼───────────────────────────────┼─────────┼───────────────────────────────┼─────────┤
│ Appium 1.3.7-beta │ ┌───────────┬────────┬──────┐ │ ┌───────────┬────────┬──────┐ │ ✓                             │ ✗       │ ┌───────────┬────────┬──────┐ │ ✓       │
│                   │ │ 0.92      │ iPhone │ iPad │ │ │ 0.83      │ iPhone │ iPad │ │                               │         │ │ 0.92      │ iPhone │ iPad │ │         │
│                   │ ├───────────┼────────┼──────┤ │ ├───────────┼────────┼──────┤ │                               │         │ ├───────────┼────────┼──────┤ │         │
│                   │ │ web_fraud │ ✓      │ 0.83 │ │ │ web_fraud │ 0.83   │ 0.83 │ │                               │         │ │ web_fraud │ 0.83   │ ✓    │ │         │
│                   │ └───────────┴────────┴──────┘ │ └───────────┴────────┴──────┘ │                               │         │ └───────────┴────────┴──────┘ │         │
└───────────────────┴───────────────────────────────┴───────────────────────────────┴───────────────────────────────┴─────────┴───────────────────────────────┴─────────┘

This depiction gives us a good idea of which platforms are supported and how reliable they are! Run appium-matrix for the list of parameters:

Options:
  -d, --detail  Show detail view of failing tests                [default: false]
  -i, --infile  JSON or JS file that exports a build definition  [required]  [default: null]
  -f, --file    File to store raw results                        [default: null]
  -r, --runs    Number of runs for each test                     [default: 3]
  -s, --skip    Skip actual test run and use results file        [default: false]
  -h, --html    Output html table instead of CLI table           [default: false]

Since matrix builds often take a long time to run, it can be useful to dump the output into a format parseable by the tool, using the -f flag. Once this is done, there are two further useful options:

appium-matrix -i build.js -f /my/output.json -s

The above will re-generate the CLI report from the output file rather than actually re-running the matrix.

appium-matrix -i build.js -f /my/output.json -s -h > /my/output.hml

The above will generate a beautiful little HTML page that is much more readable especially for large matrices or ones with the -d option to show detailed information.

(For a set of example matrix build definition files, check out lib/matrix/builds)

Report results to Sumo Logic

If you have a SumoLogic collector endpoint set up, Runsauce will report detailed information about test passes and failures, including timing information, which can be used for later statistical purposes.

runsauce -i tests.json -j "https://endpoint1.collection.us2.sumologic.com/...."

Building from source

git clone https://github.com/jlipps/runsauce.git
cd runsauce
npm install

# run the (admittedly very few) tests
npm test

# configure runsauce, if you haven't already
# ./bin/runsauce.js --setup

# use runsauce to run a test on sauce!
./bin/runsauce.js

Containerized runsauce

  • Build
docker build -t runsauce . --no-cache
  • Run
docker run -e SAUCE_USERNAME=<sauce_username> -e SAUCE_ACCESS_KEY=<sauce_access_key> --rm -it runsauce -t web -v 11.2 -a 1.8.1 -d "iPhone Simulator"