Ao usar prompt engineering, é possível criar prompts precisos e específicos para auxiliar em diversas tarefas de teste de software. Abaixo, seguem diferentes técnicas em diferentes cenários, com exemplos práticos.
Cenário: Gerar testes para o endpoint /customers
que suporta paginação e filtragem.
- "Você é um engenheiro de software especializado em testes de API usando Cypress. Escreva testes bem estruturados para o seguinte endpoint."
- "O endpoint
/customers
aceita os parâmetrospage
,limit
,size
eindustry
. Ele retorna dados paginados de clientes, incluindoid
,name
eemployees
. Escreva testes Cypress para:- Validar respostas bem-sucedidas.
- Testar valores de limite para
page
elimit
. - Testar filtragem por
size
eindustry
. - Tratar cenários de erro para parâmetros inválidos."
describe('Testes de API para o endpoint /customers', () => {
it('deve retornar dados paginados de clientes para parâmetros válidos', () => {
cy.request({
method: 'GET',
url: '/customers',
qs: { page: 1, limit: 10 }
}).then((response) => {
expect(response.status).to.eq(200);
expect(response.body.customers).to.have.length(10);
expect(response.body.pageInfo).to.have.property('totalPages');
});
});
it('deve retornar erro 400 para valor de página inválido', () => {
cy.request({
method: 'GET',
url: '/customers',
qs: { page: -1, limit: 10 },
failOnStatusCode: false
}).then((response) => {
expect(response.status).to.eq(400);
expect(response.body.error).to.eq('Número de página inválido');
});
});
it('deve filtrar clientes por indústria', () => {
cy.request({
method: 'GET',
url: '/customers',
qs: { industry: 'technology' }
}).then((response) => {
expect(response.status).to.eq(200);
expect(response.body.customers.every(c => c.industry === 'technology')).to.be.true;
});
});
it('deve filtrar clientes por tamanho', () => {
cy.request({
method: 'GET',
url: '/customers',
qs: { size: 'small' }
}).then((response) => {
expect(response.status).to.eq(200);
expect(response.body.customers.every(c => c.size === 'smalll')).to.be.true;
});
});
});
Cenário: Testar um formulário de login com Cypress.
- "Você é um especialista em testes de interfaces gráficas usando Cypress. Escreva testes para um formulário de login com os seguintes requisitos:
- Validar login bem-sucedido.
- Testar mensagens de erro para credenciais inválidas.
- Garantir que o campo de senha esteja mascarado."
- "O formulário inclui campos
email
epassword
e um botãoLogin
. Após o login, o usuário deve ser redirecionado para/dashboard
."
describe('Testes do Formulário de Login', () => {
it('deve realizar login com credenciais válidas', () => {
cy.visit('/login');
cy.get('#email').type('[email protected]');
cy.get('#password').type('securepassword');
cy.get('button[type="submit"]').click();
cy.url().should('include', '/dashboard');
});
it('deve exibir erro para credenciais inválidas', () => {
cy.visit('/login');
cy.get('#email').type('[email protected]');
cy.get('#password').type('wrongpassword');
cy.get('button[type="submit"]').click();
cy.get('.error-message').should('contain', 'Email ou senha inválidos');
});
it('deve mascarar o campo de senha', () => {
cy.visit('/login');
cy.get('#password').invoke('attr', 'type').should('eq', 'password');
});
});
Cenário: Testar um componente Button
em diferentes estados.
- "Você é um engenheiro de software escrevendo testes de componentes React com Jest e React Testing Library."
- "Escreva testes para um componente
Button
com as props:label
,onClick
edisabled
. Teste o seguinte:- Renderização com o rótulo correto.
- Chamadas de
onClick
ao clicar. - Não chamar
onClick
quandodisabled
."
import { render, screen, fireEvent } from '@testing-library/react';
import Button from './Button';
describe('Testes do Componente Button', () => {
it('renderiza com o rótulo correto', () => {
render(<Button label="Enviar" onClick={() => {}} />);
expect(screen.getByRole('button')).toHaveTextContent('Enviar');
});
it('chama onClick ao clicar', () => {
const onClickMock = jest.fn();
render(<Button label="Enviar" onClick={onClickMock} />);
fireEvent.click(screen.getByRole('button'));
expect(onClickMock).toHaveBeenCalledTimes(1);
});
it('não chama onClick quando desabilitado', () => {
const onClickMock = jest.fn();
render(<Button label="Enviar" onClick={onClickMock} disabled />);
fireEvent.click(screen.getByRole('button'));
expect(onClickMock).not.toHaveBeenCalled();
});
});
Cenário: Revisar um teste Cypress para manter boas práticas.
- "Você é um engenheiro de software especializado em revisar código de testes Cypress."
- "Revise o seguinte código de teste Cypress para garantir boas práticas, legibilidade e manutenção. Sugira melhorias."
cy.visit('/login');
cy.get('input').first().type('[email protected]');
cy.get('input').eq(1).type('password123');
cy.get('button').click();
cy.url().should('include', '/dashboard');
- Sugestões de Melhoria:
- Use seletores específicos para inputs e botões para melhorar a legibilidade.
- Encapsule ações reutilizáveis (ex.: login) em comandos personalizados.
- Adicione comentários para facilitar a manutenção.
Cypress.Commands.add('login', (email, password) => {
cy.get('#email').type(email);
cy.get('#password').type(password);
cy.get('button[type="submit"]').click();
});
// Uso:
cy.visit('/login');
cy.login('[email protected]', 'password123');
cy.url().should('include', '/dashboard');
Cenário: Identificar casos de teste ausentes para uma página de produtos com base nos requisitos.
- "Você é um engenheiro de QA analisando lacunas na cobertura de testes. Compare os testes abaixo com os requisitos fornecidos."
- "Requisitos para a página de
Produtos
:- Exibir detalhes do produto (nome, preço, descrição).
- Permitir adicionar o produto ao carrinho.
- Lidar com produtos fora de estoque, desativando o botão 'Adicionar ao Carrinho' e exibindo uma mensagem.
Cobertura de Testes:
- Testes para exibir detalhes do produto.
- Testes para adicionar ao carrinho."
- Análise:
- Testes existentes:
- Cobre exibição de detalhes do produto.
- Cobre adicionar produtos ao carrinho.
- Testes ausentes:
- Não há testes para produtos fora de estoque.
- Não há testes para verificar se o botão 'Adicionar ao Carrinho' está desativado quando fora de estoque.
- Não há testes para a exibição da mensagem de fora de estoque.
- Testes existentes:
- Recomendações:
- Adicionar teste para verificar se o botão está desativado quando o produto está fora de estoque.
- Adicionar teste para verificar a mensagem de fora de estoque.