跳至主要内容

共享存储服务

在主进程和工作进程之间交换数据(规范)。

安装

最简单的方法是将@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 钩子中访问存储

您还可以直接访问setValuegetValue异步处理程序。确保使用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 仅分配给一个工作线程,直到它被释放。

配置

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"],
}
}

欢迎!我如何帮助您?

WebdriverIO AI Copilot