共有ストアサービス
メインプロセスとワーカー(スペック)間でデータを交換します。
インストール
最も簡単な方法は、以下のように@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) // "foobar123"を返します
*
キーを使用して、すべてのキー値を取得することもできます:
const store = await browser.sharedStore.get('*')
console.log(value) // `{ 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')
// ...
}
重要!各specファイルは他のspecから原子的かつ分離されているべきです。 このサービスの目的は、非常に特定の環境セットアップの問題に対処することです。 テスト実行データの共有は避けてください!
リソースプール
ワーカースレッドが各ワーカーに割り当てられるべきリソースを競合する場合、リソースプール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) => {
// ワーカーは使用済みのリソースを次のワーカーが使用できるように返します
await addValueToPool('availableUrls', conf.baseUrl);
}
この例では、両方のワーカーが同じbaseUrl
を使用しないよ うにしています。一意のURLは、それがリリースされるまで1つのワーカーにのみ割り当てられます。
設定
サービスリストにshared-store
を追加すると、テスト内のbrowser
スコープでsharedStore
オブジェクトにアクセスできるようになります。
// 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"],
}
}