共享存储服务
在主进程和工作进程之间交换数据(规范)。
安装
最简单的方法是将@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 钩子中访问存储
您还可以直接访问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 仅分配给一个工作线程,直到它被释放。
配置
将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"],
}
}