Pular para o conteúdo principal

Serviço de Armazenamento Compartilhado

Troque dados entre o processo principal e os workers (specs).

Instalação

A maneira mais fácil é manter o @wdio/shared-store-service como uma dependência de desenvolvimento no seu package.json, via:

npm install @wdio/shared-store-service --save-dev

Instruções sobre como instalar o WebdriverIO podem ser encontradas aqui.

Uso

Obtenha/defina um valor (um objeto simples) para/do armazenamento por chave (string). A chave pode ser qualquer string arbitrária, exceto *, que é reservada, pois permite que você busque todo o armazenamento.

Definir Valores

Para definir valores no armazenamento, chame:

await browser.sharedStore.set('key', 'foobar123')

Obter Valores

Para obter valores do armazenamento, chame:

const value = await browser.sharedStore.get('key')
console.log(value) // retorna "foobar123"

Você também pode buscar todos os valores de chave usando a chave *:

const store = await browser.sharedStore.get('*')
console.log(value) // retorna `{ key: "foobar" }`

Acessar o Armazenamento nos Hooks do WDIO

Você também pode acessar diretamente os manipuladores assíncronos setValue e getValue. Certifique-se de chamá-los corretamente com a palavra-chave 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')
// ...
}

IMPORTANTE! Cada arquivo de especificação deve ser atômico e isolado das especificações de outros. A ideia do serviço é lidar com problemas de configuração de ambiente muito específicos. Por favor, evite compartilhar dados de execução de teste!

Pools de Recursos

Se os threads de trabalho estiverem competindo por recursos que devem ser atribuídos a cada worker, você pode usar a API de Pool de Recursos:

// 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);
}

Este exemplo garante que ambos os workers nunca usem o mesmo baseUrl. Uma URL única é atribuída apenas a um worker até que seja liberada por ele.

Configuração

Adicione shared-store à lista de serviços e o objeto sharedStore estará acessível a você no escopo do browser em seu teste.

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

Se você estiver usando typescript, certifique-se de adicionar @wdio/shared-store-service ao seu compilerOptions.types:

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

Welcome! How can I help?

WebdriverIO AI Copilot