Przejdź do głównej treści

Usługa Współdzielonego Magazynu

Wymiana danych między procesem głównym a procesami roboczymi (specyfikacjami).

Instalacja

Najłatwiejszy sposób to utrzymywanie @wdio/shared-store-service jako zależności deweloperskiej w package.json, poprzez:

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

Instrukcje dotyczące instalacji WebdriverIO można znaleźć tutaj.

Użycie

Pobierz/ustaw wartość (zwykły obiekt) do/z magazynu za pomocą klucza (ciągu znaków). Klucz może być dowolnym ciągiem znaków z wyjątkiem *, który jest zarezerwowany, ponieważ pozwala na pobranie całego magazynu.

Ustawianie wartości

Aby ustawić wartości w magazynie, wywołaj:

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

Pobieranie wartości

Aby pobrać wartości z magazynu, wywołaj:

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

Możesz także pobrać wszystkie wartości kluczy używając klucza *:

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

Dostęp do magazynu w hookach WDIO

Możesz również bezpośrednio uzyskać dostęp do asynchronicznych procedur obsługi setValue i getValue. Upewnij się, że prawidłowo wywołujesz je ze słowem kluczowym 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')
// ...
}

WAŻNE! Każdy plik specyfikacji powinien być atomowy i izolowany od innych specyfikacji. Idea usługi polega na rozwiązywaniu bardzo specyficznych problemów z konfiguracją środowiska. Proszę unikać udostępniania danych wykonywania testów!

Pule zasobów

Jeśli wątki robocze konkurują o zasoby, które muszą być przydzielone dla każdego pracownika, możesz użyć API puli zasobów:

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

Ten przykład zapewnia, że oba procesy robocze nigdy nie używają tego samego baseUrl. Unikalny adres URL jest przypisany tylko do jednego procesu roboczego, dopóki nie zostanie przez niego zwolniony.

Konfiguracja

Dodaj shared-store do listy usług, a obiekt sharedStore będzie dostępny dla ciebie w zakresie browser w twoim teście.

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

Jeśli używasz TypeScript, pamiętaj o dodaniu @wdio/shared-store-service do swoich compilerOptions.types:

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

Welcome! How can I help?

WebdriverIO AI Copilot