Перейти к основному содержанию

Сервис общего хранилища

Обмен данными между основным процессом и рабочими процессами (спецификации).

Установка​

Самый простой способ - сохранить @wdio/shared-store-service как dev-зависимость в вашем package.json, через:

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

Инструкции по установке WebdriverIO можно найти здесь.

Использование​

Получите/установите значение (простой объект) в/из хранилища по ключу (строке). Ключом может быть любая произвольная строка, кроме *, который зарезервирован, так как позволяет получить все хранилище.

Установка значений​

Чтобы установить значения в хранилище, вызовите:

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

Получение значений​

Чтобы получить значения из хранилища, вызовите:

const value = await browser.sharedStore.get('key')
console.log(value) // возвращает "foobar123"

Вы также можете получить все значения ключей, используя ключ *:

const store = await browser.sharedStore.get('*')
console.log(value) // возвращает `{ key: "foobar" }`

Доступ к хранилищу в хуках WDIO​

Вы также можете напрямую получить доступ к асинхронным обработчикам setValue и getValue. Убедитесь, что вы правильно вызываете их с ключевым словом 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')
// ...
}

ВАЖНО! Каждый файл спецификации должен быть атомарным и изолированным от других спецификаций. Идея сервиса заключается в решении очень специфических проблем настройки окружения. Пожалуйста, избегайте обмена данными выполнения тестов!

Пулы ресурсов​

Если рабочие потоки конкурируют за ресурсы, которые должны быть назначены для каждого рабочего процесса, вы можете использовать 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) => {
// рабочий процесс возвращает использованный ресурс для следующих рабочих процессов
await addValueToPool('availableUrls', conf.baseUrl);
}

Этот пример гарантирует, что оба рабочих процесса никогда не будут использовать один и тот же baseUrl. Уникальный URL назначается только одному рабочему процессу, пока он не будет им освобожден.

Конфигурация​

Добавьте shared-store в список сервисов, и объект sharedStore будет доступен вам в области видимости browser в вашем тесте.

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

Если вы используете typescript, убедитесь, что добавили @wdio/shared-store-service в ваш compilerOptions.types:

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

Welcome! How can I help?

WebdriverIO AI Copilot