Zum Hauptinhalt springen

Shared Store Service

Datenaustausch zwischen Hauptprozess und Workern (Specs).

Installation

Der einfachste Weg ist, @wdio/shared-store-service als Dev-Dependency in Ihrer package.json zu behalten, über:

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

Anleitungen zur Installation von WebdriverIO finden Sie hier.

Verwendung

Holen/Setzen Sie einen Wert (ein einfaches Objekt) in/aus dem Speicher über einen Schlüssel (String). Der Schlüssel kann eine beliebige Zeichenfolge sein, außer *, welcher reserviert ist, da er Ihnen erlaubt, den gesamten Speicher abzurufen.

Werte setzen

Um Werte im Speicher zu setzen, rufen Sie:

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

Werte abrufen

Um Werte aus dem Speicher abzurufen, rufen Sie:

const value = await browser.sharedStore.get('key')
console.log(value) // gibt "foobar123" zurück

Sie können auch alle Schlüsselwerte abrufen, indem Sie den Schlüssel * verwenden:

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

Zugriff auf den Speicher in WDIO Hooks

Sie können auch direkt auf die asynchronen Handler setValue und getValue zugreifen. Stellen Sie sicher, dass Sie sie korrekt mit dem await-Schlüsselwort aufrufen.

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

WICHTIG! Jede Spec-Datei sollte atomar und isoliert von anderen Specs sein. Die Idee des Service ist es, mit sehr spezifischen Umgebungseinrichtungsproblemen umzugehen. Bitte vermeiden Sie das Teilen von Testausführungsdaten!

Ressourcen-Pools

Wenn die Worker-Threads um Ressourcen konkurrieren, die jedem Worker zugewiesen werden müssen, können Sie die Resource Pool API verwenden:

// 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);
}

Dieses Beispiel stellt sicher, dass beide Worker niemals die gleiche baseUrl verwenden. Eine eindeutige URL wird nur einem Worker zugewiesen, bis dieser sie freigibt.

Konfiguration

Fügen Sie shared-store zur Liste der Services hinzu und das sharedStore-Objekt wird Ihnen im browser-Bereich in Ihrem Test zugänglich sein.

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

Wenn Sie TypeScript verwenden, stellen Sie sicher, dass Sie @wdio/shared-store-service zu Ihren compilerOptions.types hinzufügen:

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

Welcome! How can I help?

WebdriverIO AI Copilot