Documentazione: Esecuzioni di test

Visualizza come Markdown

Esecuzioni di test

Un’esecuzione di test trasforma uno script in prove. L’agente avvolge un flusso in astral.test, lo divide in passaggi, dichiara cosa deve essere vero, e Astral registra ciò che è accaduto.

Le esecuzioni di test usano lo strumento run_script, che esegue JavaScript scritto dall’agente in una sandbox che chiama gli altri strumenti. Il gruppo script è disattivato per impostazione predefinita; il gruppo tests è attivo per impostazione predefinita, ma ha effetto solo finché script è attivo. Vedi il gruppo script.

Un esempio

return await astral.test('Login demo', async () => {
  await astral.step('Open the store', () => astral.navigate({url: 'http://localhost:3000/'}));
  await astral.step('Sign in', async () => {
    await astral.type({locator: {role: 'textbox', name: 'Username'}, text: 'demo'});
    await astral.type({locator: {role: 'textbox', name: 'Password'}, text: 'demo', submit: true});
    await astral.expect.visible({role: 'button', name: 'Sign out'});
    await astral.expect.noErrors();
  });
  await astral.step('Pay', async () => {
    await astral.click({locator: {role: 'button', name: 'Pay'}});
    await astral.expect.request({urlContains: '/api/', method: 'POST', status: '2xx'});
  });
}, {continueOnFailure: true, record: 'actions'});

Dai a run_script un timeoutMs da 60000 a 120000 per un test: le prove richiedono tempo.

astral.test e astral.step

Opzioni di astral.test(name, fn, options): tabId, continueOnFailure (predefinito false) e record. Non lancia un’eccezione quando un passaggio fallisce: controlla lo status nel risultato, che contiene anche i totali, un summary in Markdown e i percorsi del report.

astral.step(name, fn) raggruppa azioni. Alla fine, e sempre in caso di errore, Astral salva uno screenshot, l’URL e il titolo, le richieste effettuate durante il passaggio (quelle fallite con intestazioni e corpi oscurati), errori e avvisi della console ed eventuali nuovi gruppi di errori. Un passaggio fallisce quando la sua funzione lancia un’eccezione o una aspettativa al suo interno fallisce. Senza continueOnFailure il test si ferma al primo passaggio fallito.

run_script accetta anche test: {name, continueOnFailure, ...} per trattare l’intero script come un unico test.

Aspettative

ChiamataPassa quando
expect.visible(locator)L’elemento è visibile, attendendo fino a timeoutMs (predefinito 5000).
expect.hidden(locator)L’elemento non è visibile.
expect.text(locator, 'contains') / expect.text('text')L’elemento contiene il testo, o il testo compare in un punto qualsiasi della pagina.
expect.url('/dashboard') / expect.url(/regex/)L’URL della scheda corrisponde.
expect.request({urlContains, method, status})È stata effettuata una richiesta corrispondente dall’inizio del passaggio. status è un numero, '2xx' o 'error'.
expect.noErrors({kinds, waitMs, ignoreStatus, ignore})Dall’inizio del passaggio non è comparso alcun nuovo gruppo di errori. Ignora stati come 401 o messaggi per sottostringa.
expect.layout({rules, ignore})Il layout responsive della pagina non ha errori al viewport dell’esecuzione. Vedi il controllo del layout.

Un localizzatore è {role, name, text, nth, exact}, un riferimento di snapshot come "e12", oppure un testo. Un’aspettativa fallita lancia un errore di asserzione con ciò che era atteso e ciò che è stato trovato, e il report lo mostra. astral.screenshot({name, fullPage}) dentro un test aggiunge uno screenshot con nome al passaggio corrente.

Modalità di registrazione

ModalitàCosa viene catturato
'off'Screenshot solo dei fallimenti.
'steps' (predefinita)Uno screenshot alla fine di ogni passaggio.
'actions'Anche uno dopo ogni clic, digitazione, selezione, pressione di tasto e navigazione, scattato mentre un indicatore mostra il bersaglio: un riquadro, un’onda nel punto del clic e una didascalia come click "Sign in".
'video'Anche fotogrammi della scheda a 4 al secondo (fino a 5 minuti o 200 MB), salvati come recording.png animato, e recording.mp4 dove Astral può codificarne uno (macOS), con un lettore di fotogrammi nel report.

Gli indicatori sono disegnati in ogni modalità tranne 'off', scompaiono dopo 2,5 secondi e alla fine dell’esecuzione, e non intercettano mai i clic. Il testo digitato in un campo password, codice monouso o carta non viene mai scritto: le didascalie mostrano •••••• e il valore è mascherato ovunque nel resto del report. Vedi Piattaforme per il supporto video.

Cosa lascia un’esecuzione

Ogni esecuzione scrive una cartella nella directory dei dati di Astral contenente:

  • report.html: un report leggibile con un riepilogo, una scheda per passaggio con i suoi screenshot, l’asserzione fallita, le richieste fallite, gli errori della console, gli errori di pagina raggruppati, una timeline delle azioni e una sezione sulle prestazioni.
  • report.json: gli stessi dati, più un riepilogo in Markdown scritto per essere incollato in una issue.
  • Gli screenshot come file PNG e la registrazione, se l’hai richiesta.

Vengono conservate le 50 esecuzioni più recenti (configurabile in Settings → Developer, dove le esecuzioni di test si possono anche disattivare). L’agente rilegge le esecuzioni con test_runs_list e test_run_get.

Prove per i ticket

Il riepilogo in Markdown è pensato per essere incollato in una issue, accanto agli screenshot e al report. Se il tuo agente è collegato al tuo strumento di ticket, può pubblicare lì quelle prove per te. Astral in sé non si integra con nessuno strumento di ticket: scrive le prove e lascia la pubblicazione a te o al tuo agente.

I nomi dei test, i passaggi, i nomi degli screenshot e tutto ciò che Astral scrive su un’esecuzione sono in inglese, qualunque sia la lingua che usi tu, il ticket o la pagina. Solo i localizzatori mantengono il testo proprio della pagina.