Hoppa till huvudinnehåll

Delad Lagringstjänst

Utbyt data mellan huvudprocessen och workers (specifikationer).

Installation

Det enklaste sättet är att behålla @wdio/shared-store-service som ett dev-beroende i din package.json, via:

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

Instruktioner om hur du installerar WebdriverIO finns här.

Användning

Hämta/ange ett värde (ett enkelt objekt) till/från lagret med hjälp av en nyckel (sträng). Nyckeln kan vara vilken godtycklig sträng som helst förutom * som är reserverat eftersom det låter dig hämta hela lagret.

Ange värden

För att ange värden i lagret, anropa:

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

Hämta värden

För att hämta värden från lagret, anropa:

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

Du kan också hämta alla nyckelvärden genom att använda nyckeln *:

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

Åtkomst till lagret i WDIO Hooks

Du kan också direkt få åtkomst till asynkrona hanterare setValue och getValue. Se till att du anropar dem korrekt med nyckelordet await.

// 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')
// ...
}

VIKTIGT! Varje spec-fil bör vara atomisk och isolerad från andra spec-filer. Idén med tjänsten är att hantera mycket specifika miljöinställningsproblem. Undvik att dela testexekveringsdata!

Resurspoler

Om worker-trådarna konkurrerar om resurser som måste tilldelas för varje worker, kan du använda 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);
}

Detta exempel säkerställer att båda workers aldrig använder samma baseUrl. En unik URL tilldelas endast en worker tills den frigörs av den.

Konfiguration

Lägg till shared-store i listan över tjänster och sharedStore-objektet kommer att vara tillgängligt för dig inom browser-omfattningen i ditt test.

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

Om du använder typescript, se till att lägga till @wdio/shared-store-service till dina compilerOptions.types:

{
"compilerOptions": {
"types": ["node", "@wdio/globals/types", "@wdio/shared-store-service"],
}
}

Welcome! How can I help?

WebdriverIO AI Copilot