Socket
Socket
Sign inDemoInstall

@wdio/shared-store-service

Package Overview
Dependencies
244
Maintainers
3
Versions
377
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    @wdio/shared-store-service

A WebdriverIO service to exchange data across processes


Version published
Weekly downloads
63K
decreased by-15.15%
Maintainers
3
Created
Weekly downloads
 

Readme

Source

WebdriverIO Shared Store Service

Exchange data between main process and workers (specs).

Installation

The easiest way is to keep @wdio/shared-store-service as a dev dependency in your package.json, via:

npm install @wdio/shared-store-service --save-dev

Instructions on how to install WebdriverIO can be found here.

Usage

Get/set a value (a plain object) to/from the store by key (string). The key can be any arbitrary string except * which is reserved as it allows you to fetch the whole store.

Set Values

To set values to the store call:

await browser.sharedStore.set('key', 'foobar123')

Get Values

To get values from the store call:

const value = await browser.sharedStore.get('key')
console.log(value) // returns "foobar123"

You can also fetch all key values by using the * key:

const store = await browser.sharedStore.get('*')
console.log(value) // returns `{ key: "foobar" }`

Access Store in WDIO Hooks

You could also directly access to setValue and getValue async handlers. Make sure you properly call them with the await keyword.

// wdio.conf.js
import { setValue, getValue } from '@wdio/shared-store-service'

export const config = {
    // ...
    onPrepare: [async function (config, capabilities) {
        await setValue('foo', 'bar')
    }],
    // ...
    after: async () => {
        const value = await getValue('foo')
        // ...
    }

IMPORTANT! Every spec file should be atomic and isolated from others' specs. The idea of the service is to deal with very specific environment setup issues. Please avoid sharing test execution data!

Resource Pools

If the worker threads are competing for resources that must be assigned for each worker, you can use Resource Pool API:

// wdio.conf.js
import { setResourcePool, getValueFromPool, addValueToPool } from '@wdio/shared-store-service'

export const config = {
    maxInstances: 2,
    // ...
    onPrepare: async function (config, capabilities) {
        await setResourcePool('availableUrls', ['url01.com', 'url02.com'])
    },
    // ...
    beforeSession: async (conf) => {
        conf.baseUrl = await getValueFromPool('availableUrls');
    },
    // ...
    afterSession: async (conf) => {
        // worker returns the used resource for next workers to use
        await addValueToPool('availableUrls', conf.baseUrl);
    }

This example ensures that both workers never use the same baseUrl. A unique url is only assigned to one worker until it's released by it.

Configuration

Add shared-store to the services list and the sharedStore object will be accessible to you on the browser scope in your test.

// wdio.conf.js
export const config = {
    // ...
    services: ['shared-store'],
    // ...
};

Keywords

FAQs

Last updated on 20 Apr 2024

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc