Como integrar testes de contrato em Node.js com AWS

Wanderley Landim
Feb 3 · 4 min read

Tem que executar testes de contrato? Dá uma olhada nestas dicas.

Atualmente, estou atuando em um projeto em que precisávamos executar testes de contrato. Basicamente, estes testes acionam serviços de mensagem na Amazon Web Services (AWS), um deles posta uma mensagem na fila e verifica se o que foi postado está correto, conforme definido no critério de aceite. Para garantir que isso tudo aconteça de forma eficiente e integrada, cheguei à solução de scripts automatizados, usando SDK para Node. Quer saber como fiz? Bora lá!

O que é AWS SDK para node.js?

O AWS SDK faz a comunicação entre Node.js e os serviços da Amazon, conforme mostra a ilustração abaixo:

Como instalar o SDK para node.js?

npm install aws-sdk

Como configurar arquivo de credenciais da AWS?

As credenciais são necessárias para que o SDK possa acessar os serviços da AWS. Para isso, você precisa ter acesso ao IAM, um serviço que ajuda a controlar o acesso aos recursos, como quem faz login e quem tem permissão de usar a conta AWS, por exemplo.

Com isso, podemos criar as chaves de acesso e a chave de acesso secreta, e com esse conjunto de chaves temos a permissão para um ou mais serviços na AWS, que ficam dentro de um arquivo credential. Normalmente, quem cria essas chaves são os Devops que têm acesso ao IAM na AWS, mas aqui tem um tutorial sobre como criar essas chaves.

Lembrando que as chaves devem estar dentro de um arquivo credentials(deve ser gerado como arquivo de sistema, ou seja, oculto), na máquina que deverá ter acesso aos serviços da AWS. Para gerar esse arquivo é só seguir os seguintes passos:

  • Via terminal, acesse a raiz da máquina e execute mkdir .aws;
  • Crie o arquivo credentials com o comando touch credentials;
  • Abra o arquivo com o comando open credentials;
  • No arquivo, coloque as chaves criadas na IAM, conforme abaixo, e salve.
[default]
aws_access_key_id = <YOUR_ACCESS_KEY_ID>
aws_secret_access_key = <YOUR_SECRET_ACCESS_KEY>

Como executar o serviço na AWS via código node.js

Para exercitar a execução de serviços na AWS, vamos enviar uma mensagem em uma fila sqs. Lembrando que, para ter acesso a essa fila, devemos ter dado acesso às chaves criadas na IAM.

No seu projeto, crie um arquivo sqs_sendmessage.js, por exemplo, e coloque no arquivo o conjunto de código abaixo:

var AWS = require('aws-sdk');
AWS.config.update({ region: 'us-east-1' });
var sqs = new AWS.SQS({ apiVersion: '2012–11–05' });
const {
BODY_SEND_MESSAGE
} = require('../body/body_jorney_send_message');
function sendMessage() {
const params = {
MessageBody: JSON.stringify(
BODY_SEND_MESSAGE
),
QueueUrl: "SQS_QUEUE_URL"
};
sqs.sendMessage(params, function (err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("SuccessMessage", data.MessageId);
console.log(BODY_SEND_MESSAGE)
}
});
}
module.exports = {
sendMessage,
}

Neste bloco de código, temos que carregar a dependência "require(‘aws-sdk’)", informar a região na qual o servidor do projeto está na Amazon "AWS.config.update({ region: ‘us-east-1’ })", informar a versão de api de serviços da AWS "var sqs = new AWS.SQS({ apiVersion: ‘2012–11–05’ })" e informar o caminho do json BODY_SEND_MESSAGE, para ser usado no teste e ser consumido pelo serviço do AWS.

Na function sendMessage(), informamos a mensagem em formato de json, a queueUrl do serviço no qual a mensagem será postada e executamos a função com os params informados. A partir daí, o sucesso o id da mensagem postada no serviço da AWS vai ser reportado, além da mensagem postada em json. Por fim, exportaremos a função para ser usada no teste criado em outro arquivo do repo. Como no uso do teste abaixo:

const send_message = require("./sqs_sendmessage");describe('Testando o envio de mensagem ', function () {
it('AQ5 PLD analysis return with approved status', function (done) {
send_PLDAQ5.sendMessagePLD()
done();
});
});

Neste bloco, carregamos o arquivo sqs_sendmessage.js e executamos a função sendMessage(), para que no fim a mensagem seja postada no serviço da AWS. E pronto!

Este processo foi uma experiência nova na minha vida profissional. Esse procedimento de integração entre os serviços da Amazon e o mundo dos testes de contrato/serviços ficaram mais comuns nos dias de hoje. Se você tem alguma dúvida ou algo pra contribuir, é só deixar um comentário. Ou se você quer trocar esta ideia pessoalmente e aprender com a gente, dá uma olhada nas nossas vagas e vamos aprender juntos!

Em breve teremos mais posts sobre este conteúdo, aguarde! ;)

Wanderley Landim

Written by

Concrete

Concrete

Nós desenvolvemos produtos digitais com inovação, agilidade e excelentes práticas, para que o mercado brasileiro e latino-americano acompanhe a velocidade do mercado digital mundial.

More From Medium

More on Artigos from Concrete

More on Artigos from Concrete

Era uma vez… uma Daily!

Apr 2 · 7 min read

20

More on Artigos from Concrete

More on Artigos from Concrete

Prodcast #6 — Entretenimento

Apr 1 · 1 min read

17

More on Artigos from Concrete

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade