Servicio de Almacenamiento Compartido
Intercambio de datos entre el proceso principal y los trabajadores (specs).
Instalación
La forma más sencilla es mantener @wdio/shared-store-service
como una dependencia de desarrollo en tu package.json
, mediante:
npm install @wdio/shared-store-service --save-dev
Las instrucciones sobre cómo instalar WebdriverIO
se pueden encontrar aquí.
Uso
Obtén/establece un valor (un objeto plano) desde/hacia el almacenamiento mediante una clave (string). La clave puede ser cualquier cadena arbitraria excepto *
que está reservada ya que permite obtener todo el almacenamiento.
Establecer Valores
Para establecer valores en el almacenamiento, llama a:
await browser.sharedStore.set('key', 'foobar123')
Obtener Valores
Para obtener valores del almacenamiento, llama a:
const value = await browser.sharedStore.get('key')
console.log(value) // devuelve "foobar123"
También puedes obtener todos los valores de clave usando la clave *
:
const store = await browser.sharedStore.get('*')
console.log(value) // devuelve `{ key: "foobar" }`
Acceder al Almacenamiento en los Hooks de WDIO
También puedes acceder directamente a los manejadores asincrónicos setValue
y getValue
.
Asegúrate de llamarlos correctamente con la palabra clave 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 archivo de especificación debe ser atómico y aislado de las especificaciones de otros. La idea del servicio es manejar problemas muy específicos de configuración del entorno. ¡Por favor, evita compartir datos de ejecución de pruebas!
Grupos de Recursos
Si los hilos de trabajo compiten por recursos que deben asignarse a cada trabajador, puedes usar la API de Grupo 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) => {
// el trabajador devuelve el recurso utilizado para que lo usen los siguientes trabajadores
await addValueToPool('availableUrls', conf.baseUrl);
}
Este ejemplo asegura que ambos trabajadores nunca usen la misma baseUrl
. Una URL única solo se asigna a un trabajador hasta que éste la libera.
Configuración
Agrega shared-store
a la lista de servicios y el objeto sharedStore
será accesible para ti en el ámbito del browser
en tu prueba.
// wdio.conf.js
export const config = {
// ...
services: ['shared-store'],
// ...
};
Si estás usando typescript, asegúrate de agregar @wdio/shared-store-service
a tus compilerOptions.types
:
{
"compilerOptions": {
"types": ["node", "@wdio/globals/types", "@wdio/shared-store-service"],
}
}