Quais validações devo Realizar em uma API? (Postman — Parte 02)
Vamos focar em aprender um pouco das validações no postman.
A API Chai é dividida por estilo ou tarefa. O estilo pm.expect é chamado de estilo BDD, é o que está sendo utilizado nos nossos testes como padrão. A biblioteca do Chaijs foi encapsulada dentro do pm, olhando os comandos do Chaijs para trazer para o postman precisa colocar pm. na frente do expect.
- Primeiro Passo a realizar: Montar a RESQUEST = Pré-request + Body (Primeiro coisa que tem que fazer). Pré-requisito = Os dados (Variáveis Fixas, Variáveis dinâmicas ex: CPF, CNPJ, Dados de Endereço, Montra um ID) que são necessários para o Body. Necessário para pegar as variáveis e comparar com o RESPONSE. Body é o corpo da requisição, são dados específicos que ela precisa, necessário ler a documentação pra isso, ou procurar quem sabe. Vai trabalhar em cima do RESPONSE:
- Passo Realizar os testes: Realizar os Asserts.
- Se necessário armazenar os dados que precisa para o próximo teste. → Realizar o Cadastro e depois fazer a edição do mesmo, precisa armazenar o ID do cadastro para o próximo.
O nosso teste sempre vai trabalha em cima do RESPONSE que é a resposta da nossa requisição\request.
Estilos de declaração
A API Expect / Should abrange os estilos de asserção BDD.
A API Assert abrange o estilo de asserção TDD.
Plug-ins
A API Plugin será útil para qualquer pessoa interessada em construir plugins como auxiliares para DRY seus testes, ou para
lançamento para a comunidade.
Ferramentas
O Online Test Suite é um conjunto de testes do Chai Library, que roda a cada versão gerar.
O estilo BDD/Gerkin é explícito por meio do expect ou should . Em ambos os cenários, você encadeia afirmações de linguagem natural.
pm.test(“Validando o Status code igual a 200”, function () {
pm.response.to.have.status(200);
});
pm.test(“Successful POST request”, function () {
pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]);
});
Positivas:
let variavel = “reinaldo mateus”
// valida o tipo de dados igual a string.
pm.expect(variavel).to.be.a(‘string’);
// valida se o valor da variavel é exatamente igual a ‘reinaldo’
pm.expect(variavel).to.equal(‘reinaldo’);
// valida se o tamanho da variavel é igual a 15.
pm.expect(variavel.length).to.equal(15);
// valida se o valor ‘foo’ está contido dentro da variavel.
pm.expect(variavel).to.include(‘foo’);
// valida se o tamanho da variavel é igual a 15.
pm.expect(variavel).to.have.lengthOf(15);
// valida se tem a propriedade a com valor 1.
pm.expect({a: 1}).to.have.property(‘a’, 1);
// valida se o valor é um array e o valor 2 esta incluso.
pm.expect([1, 2, 3]).to.be.an(‘array’).that.includes(2);
// valida a propriedade token existe e o seu tamanho igual a 3.
pm.expect(beverages).to.have.property(‘token’).with.lengthOf(3);
Exemplo com XML:
Uso do Equal:
pm.test(“Validando o TaxId é igual na resposta”, function () {
pm.expect(jsonObject.RequestTransactionAffiliationRegistration.TaxId).to.be.equal(taxId);
});
Uso do Include:
pm.test(“Validando se tem Mensagem de Error”, function () {
pm.expect(pm.response.text()).to.not.include(‘<Error><Number>’);
});
Validando a data:
Adicionar os dados da criação da data no pre-request:
const moment = require(‘moment’);
pm.environment.set(“Data”, moment().zone(“-03:00”).format(“DD/MM/YYYY HH:mm”));
console.log(moment().zone(“-03:00”).format(“DD/MM/YYYY HH:mm”))
DD/MM/YYYY HH:mm → representa o dia, mês, ano, hora e minutos, podemos remover a hora e minutos se precisar, ficaria assim:
pm.environment.set(“Data”, moment().zone(“-03:00”).format(“DD/MM/YYYY”));
console.log(moment().zone(“-03:00”).format(“DD/MM/YYYY”))
Na aba de Tests, montamos o nosso assert, de forma genérica ficar como no exemplo abaixo:
pm.test(“Validando se a data e hora, minutos existe no body”, function () {
pm.expect(pm.response.text()).to.include(environment.Data);
});
Exemplo abaixo utilizando o jsonData .
pm.test(“Validando se a data e hora, minutos existe no body”, function () {
pm.expect(jsonData.dataInsercao).to.include(environment.Data);
});
Afirma que o destino é um número ou uma data maior que o número ou a data especificada, n respectivamente. No entanto, geralmente é
melhor afirmar que o alvo é igual ao seu valor esperado.
pm.expect(2).to.equal(2); // Recommended
pm.expect(2).to.be.above(1);
// uma validação basica o id acima de 0.
pm.expect(jsonData.parametro.id).to.be.above(0);
Afirma que o destino é um número ou uma data maior ou igual ao número ou data determinado, n respectivamente. No entanto,
geralmente é melhor afirmar que o alvo é igual ao seu valor esperado.
pm.expect(jsonData.today.total).to.least(0.0);
pm.expect(jsonData.today.count).to.least(1);
Adicione mais cedo na cadeia para afirmar que ou do destino é maior que o número fornecido.
.length Of length size n
pm.expect(‘foo’).to.have.lengthOf(3); // Recommended
pm.expect(‘foo’).to.have.lengthOf.above(2);
pm.expect([1, 2, 3]).to.have.lengthOf(3); // Recommended
pm.expect([1, 2, 3]).to.have.lengthOf.above(2);
Validando uma condição que pode aparecer dois emails diferentes:
pm.environment.set(“email”, “jonathan.xavier@paygo-consult.com.br”)
pm.environment.set(“email2”, “jonathan.xavier@ntk-consult.com.br”)
pm.expect(jsonData.Usuario.Email).to.be.oneOf([environment.email, environment.email2]);
Negativas:
Validando se o valor não é null ou undefined ou uma string vazia:
pm.expect(jsonData.access_token).is.not.oneOf([null, undefined, “”]);
pm.expect(2).to.not.equal(1);
pm.expect({a: 1}).to.not.have.property(‘b’);
pm.expect([1, 2]).to.be.an(‘array’).that.does.not.include(3);
pm.expect(‘foobar’).to.not.include(‘taco’);
pm.expect([1, 2, 3]).to.not.include(4);
Validando dados do header:
pm.test(“Content-Type header is present”, () => {
pm.response.to.have.header(“Content-Type”);
});
Validando o valor igual, quando tiver o application/json; charset=utf-8 , vai dar erro pois o valor deve ser exatamente igual:
pm.test(“Content-Type header is application/json”, () => {
pm.expect(pm.response.headers.get(‘Content-Type’)).to.eql(‘application/json’);
});
Validando se o valor application/json está incluído no header:
pm.test(“Content-Type header is application/json”, () => {
pm.expect(pm.response.headers.get(‘Content-Type’)).to.include(‘application/json’);
});
Referências: