پرش به محتوای اصلی

سرویس اشتراک‌گذاری انباره

تبادل داده بین فرآیند اصلی و کارگرها (مشخصات).

نصب

ساده‌ترین راه این است که @wdio/shared-store-service را به عنوان وابستگی توسعه در 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) // returns "foobar123"

همچنین می‌توانید همه مقادیر کلید را با استفاده از کلید * دریافت کنید:

const store = await browser.sharedStore.get('*')
console.log(value) // returns `{ 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 یکسان استفاده نمی‌کنند. یک آدرس یکتا فقط به یک کارگر اختصاص می‌یابد تا زمانی که توسط آن آزاد شود.

پیکربندی

shared-store را به لیست سرویس‌ها اضافه کنید و شی sharedStore در محدوده browser در آزمون شما قابل دسترسی خواهد بود.

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

اگر از تایپ‌اسکریپت استفاده می‌کنید، مطمئن شوید که @wdio/shared-store-service را به compilerOptions.types خود اضافه کرده‌اید:

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

Welcome! How can I help?

WebdriverIO AI Copilot