Перейти до основного вмісту

Сервіс спільного сховища

Обмін даними між головним процесом та робочими процесами (специфікаціями).

Встановлення

Найпростіший спосіб - зберегти @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) => {
// worker returns the used resource for next workers to use
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