تخطى إلى المحتوى الرئيسي

خدمة المخزن المشترك

تبادل البيانات بين العملية الرئيسية والعمال (المواصفات).

التثبيت​

الطريقة الأسهل هي الاحتفاظ بـ @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 Hooks​

يمكنك أيضًا الوصول مباشرة إلى معالجات 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')
// ...
}

مهم! يجب أن يكون كل ملف مواصفات ذريًا ومعزولًا عن مواصفات الآخرين. فكرة الخدمة هي التعامل مع مشكلات إعداد بيئة محددة جدًا. يرجى تجنب مشاركة بيانات تنفيذ الاختبار!

مجمعات الموارد​

إذا كانت سلاسل العمال تتنافس على الموارد التي يجب تخصيصها لكل عامل، يمكنك استخدام واجهة برمجة تطبيقات مجمع الموارد:

// 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