Estoy usando Playwright.dev para automatizar nuestras pruebas de interfaz de usuario. Actualmente me enfrento al siguiente problema:
En un solo archivo spec.ts tengo diferentes conjuntos de pruebas. Esos conjuntos de pruebas deben ejecutarse en paralelo, pero no en cada prueba. No puedo dividir esos conjuntos de pruebas en archivos separados porque se crean dinámicamente. La razón por la que quiero ejecutar las pruebas de cada serie de conjunto de pruebas es para reutilizar la página existente. Porque es mucho más rápido simplemente reutilizar la página sin hacer una actualización completa de la página todo el tiempo. Intentaré explicar mi problema con algún pseudocódigo:
catalogs.forEach((objectIdsOfCatalog, catalogId) => { // each suite could run in parallel because they do not // depend on each other test.describe('Test catalog "' + catalogId + '"', () => { let newVersion: PageObject; let actualVersion: PageObject; test.beforeAll(async ({browser}) => { console.log('New page for', catalogId); const {actualUrl, newUrl} = getConfig(); const context = await browser.newContext(); actualVersion = new PageObject(await context.newPage(), actualUrl); newVersion = new PageObject(await context.newPage(), newUrl); }); test.afterAll(async () => { console.log('Close page for', catalogId); actualVersion.close(); newVersion.close(); actualVersion = null; newVersion = null; }); // those tests should ran serial because it's faster // if we just navigate on the existing page due to the // client side caching of the web app for (const objectId of objectIdsOfCatalog) { test('Testing "' + objectId + '"', async () => { }); } }); });¿Hay alguna forma de lograr el siguiente comportamiento en Playwright o tengo que repensar mi enfoque?
No sé si se pueden anidar varios bloques test.describe.serial en un test.describe.parallel (y si eso funciona), pero tal vez valga la pena intentarlo.
Otra opción podría ser no generar pruebas reales, sino solo generar pasos (test.step) dentro de las pruebas dentro de un bloque test.describe.parallel.
¿Y de dónde vienen los catálogos? Tal vez en lugar de generar bloques de descripción, ¿podría generar proyectos en playwright.config.ts? Los proyectos se ejecutan en paralelo por defecto, creo. Pero no sé si ese enfoque funcionaría si los datos provienen de alguna fuente asíncrona.