Testes de sistema são uma simulação completa de como um usuário real interage com o aplicativo, de ponta a ponta. São os testes mais abrangentes e, por isso, geralmente os mais caros e os que levam mais tempo para serem executados.
Para automatizar testes de sistemas Web em JavaScript, você pode usar ferramentas como Selenium ou alternativas modernas como Cypress ou Puppeteer. Essas ferramentas permitem que você escreva scripts de teste que interagem com o navegador, assim como um usuário real faria.
Exemplo: Teste de Sistemas Web 💻
Essa é a forma em como você poderia escrever um teste para uma pesquisa no Google usando Puppeteer, que é uma biblioteca Node.js para controlar navegadores Headless Chrome ou Chromium:
// googleSearch.test.js
const puppeteer = require('puppeteer');
describe('Google Search', () => {
it('should search for "software"', async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('http://www.google.com');
await page.type('input[name=q]', 'software');
await page.keyboard.press('Enter');
await page.waitForSelector('h3'); // Espera pelo carregamento dos resultados
const pageTitle = await page.title();
console.log(`Page title is: ${pageTitle}`);
await browser.close();
expect(pageTitle).toMatch('software - Google Search');
}, 16000); // Aumentar o timeout para testes que podem levar mais tempo
});
Neste script, Puppeteer abre o navegador, vai para o Google, digita a palavra "software" na pesquisa, pressiona Enter e espera pelos resultados da pesquisa.
Exemplo: Teste de um Compilador 🛠️
Se você estivesse testando um compilador em JavaScript, o teste poderia ser mais direto porque você está apenas lidando com arquivos de entrada e saída, não uma interface de usuário.
// compiler.test.js
const { compile } = require('./compiler');
const fs = require('fs');
describe('Compiler Tests', () => {
it('should compile program correctly', async () => {
const inputProgram = 'path/to/program.x';
const expectedOutput = 'expected program output';
await compile(inputProgram);
const output = fs.readFileSync('path/to/output', 'utf8');
expect(output).toBe(expectedOutput);
});
});
Aqui, o compile
é uma função que você escreveria para pegar o caminho para um arquivo de programa, compilar esse programa e, em seguida, você verificaria a saída contra o esperado.
Considerações 🤔
- Testes de sistema devem refletir cenários de uso reais;
- Mudanças na interface do usuário ou nos sistemas externos podem quebrar seus testes, então eles precisam ser mantidos atualizados;
A maior parte desse conteúdo veio do livro "Engenharia de Software Moderna", escrito por Marco Tulio Valente. Esse livro é um tesouro cheio de dicas sobre como criar testes do jeito certo, usando o que tem de mais novo e eficiente no mundo da programação. Entretanto, a única diferença, é que o livro é em Java e aqui eu adaptei para utilizar Javascript.
Top comments (0)