本文へ移動

共有ストアサービス

メインプロセスとワーカー間のデータ交換(仕様)。

インストール

最も簡単な方法は、npm install --save-dev @wdio/shared-store-service を使用して、@wdio/shared-store-service を `package.json` の dev 依存関係として保持することです。

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を使用しないことが保証されます。一意のURLは、ワーカーによって解放されるまで、1つのワーカーのみに割り当てられます。

設定

サービスリストにshared-storeを追加すると、sharedStoreオブジェクトにテストのbrowserスコープからアクセスできます。

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

TypeScriptを使用している場合は、@wdio/shared-store-servicecompilerOptions.typesに追加してください。

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

ようこそ!お手伝いできることはありますか?

WebdriverIO AI Copilot