خدمة المخزن المشترك
تبادل البيانات بين العملية الرئيسية والعمال (المواصفات).
التثبيت
الطريقة الأسهل هي الاحتفاظ بـ @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);
}