انتقل إلى المحتوى الرئيسي

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

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

التثبيت

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