Quais validações devo Realizar em uma API? (Postman — Parte 02)

Reinaldo Mateus Rossetti Junior
4 min readJun 26, 2023

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.

  1. 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:
  2. Passo Realizar os testes: Realizar os Asserts.
  3. 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:

Expect / Should — Chai

--

--