Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
April 17, 2024 12:18 am GMT

Enviando notificaes com xk6 notification

Em ambientes de integrao contnua, a comunicao e notificao efetiva dos resultados dos testes de software de suma importncia.

As notificaes podem ser tanto o envio de um e-mail para canal quando uma mensagem de comunicao em um chat, ou mesmo, eventos de callback realizados via webhook.

Nesse artigo veremos como podemos utilizar o modulo xk6-notification para o disparo de notificaes do resultado dos testes de performance com k6.

Pr-requisitos

  • K6 instalado
  • xk6 configurado

Conhecendo o xk6-notification

O modulo xk6-notification oferece uma soluo verstil para o envio de notificaes via webhook, permitindo integrao com uma variedade de servios de notificao de sua escolha.

O modulo foi construido utilizando a biblioteca shoutrrr, uma lib GoLang utilizada para envio de notificaes.

Image description

Instalando o xk6-notification

Antes de iniciar a instalao do modulo xk6-notification, importante destacar que a configurao do xk6 deve ter sido realizada. No artigo utilizando modulo do xk6 com k6 abordamos com mais detalhes essa configurao.

Com o xk6 configurado, realize o build do binrio do xk6-notification utilizando o seguinte comando:

xk6 build --with github.com/dgzlopes/xk6-notification@latest

Configurando nosso script

O script abaixo executa um teste de carga na API de listagem de crocodilos do K6 por 10 segundos, empregando 5(VUs) nesse periodo. definido um limite para o nmero de requisies com falha, esperando um resultado inferior a 5% do total de requisies realizadas.

import http from 'k6/http';import { check } from 'k6';export const options = {    vus: 5,    duration: '10s',    thresholds: {        http_req_failed: ['rate < 0.05'],    }}export default function(){    const BASE_URL = 'https://test-api.k6.io/public/crocodiles/';    const res = http.get(BASE_URL);    check(res, {        'status code 200': (r) => r.status === 200    });}

O primeiro ajuste necessrio em nosso script na fase de inicializao, onde devemos adicionar o mdulo xk6-notification. Adicionar a seguinte linha ao seu script:

import notification from 'k6/x/notification';

Aps a importao do modulo, vamos incluir uma funo handleSummary na fase de desmontagem. Nessa etapa realizaremos o envio de notificao com os resultados do teste assim que ele for concludo:

export function teardown(data) {  notification.send('url', 'message');}

Observe que estamos utilizando o mdulo notification, mais precisamente a funo send, para o envio de mensagens. Dois argumentos so necessarios: url de destino e messagem a ser enviada.

No campo da URL, necessrio fornecer o endereo do webhook do servio selecionado. Neste exemplo, utilizaremos um webhook para enviar mensagens para um canal no Telegram. A estrutura do webhook ser a seguinte:

const url = `telegram://${__ENV.TOKEN}@telegram?channels=${__ENV.CANAL}`

A URL do webhook precisa receber dois argumentos definidos como variaveis de ambiente. O primeiros deles o TOKEN do seu bot criado no telegram, o segundo, o CANAL onde a mensagem deve ser enviada.

Caso opte por utilizar outro servios de notificao, segue a documentao para o envio de mensagems utilizando webhook das plataformas slack e teams.

Para o contedo da nossa mensagem, podemos incluir todas as mtricas obtidas durante o teste, as quais esto disponveis no argumento data da funo handleSummary.

Portanto, vamos estabelecer uma funo auxiliar para formatar a mensagem destinada a nossa notificao. A funo ter o seguinte escopo:

export function format_message(data) {    let checks = data.metrics.checks.values.fails == 0 ? '' : '';    let thresholds = data.metrics.http_req_failed.thresholds['rate < 0.05'].ok ? '' : '';    return `Resultado de execuo do teste:     - Quantidade de VUs: ${data.metrics.vus.values['value']}    - Durao total(ms): ${data.state.testRunDurationMs}    - Iteraoes(RPS): ${data.metrics.iterations.values['count']}Req Durations(ms):    - min: ${data.metrics.http_req_duration.values.min},    - med: ${data.metrics.http_req_duration.values.med},    - max: ${data.metrics.http_req_duration.values.max},    - p(90): ${data.metrics.http_req_duration.values['p(90)']},    - p(95): ${data.metrics.http_req_duration.values['p(95)']}Checks:    - status code 200: ${checks}Thresholds:     - http_req_failed < 5%: ${thresholds}`}

Essa funo tem como objetivo principal montar uma mensagem com algumas informaes relevantes sobre o teste, alm de realizar verificaes nos resultados dos thresholds e checks que foram definidos.

Assim, podemos fazer as modificaes necessrias na nossa funo de notificao, ajustando-a para utilizar a URL que definimos para nosso webhook e a mensagem correspondente. Aps todos os ajustes, o script final ficar da seguinte forma:

import http from 'k6/http';import { check } from 'k6';import notification from 'k6/x/notification';const url = `telegram://${__ENV.TOKEN}@telegram?channels=${__ENV.CANAL}`;export const options = {    vus: 15,    duration: '10s',    thresholds: {        http_req_failed: ['rate < 0.05'],    }}export default function () {    const BASE_URL = 'https://test-api.k6.io/public/crocodiles/';    const res = http.get(BASE_URL);    check(res, {        'status code 200': (r) => r.status === 200    });}export function handleSummary(data) {    notification.send(url, format_message(data));}export function format_message(data) {    let checks = data.metrics.checks.values.fails > 0 ? '' : '';    let thresholds = data.metrics.http_req_failed.thresholds['rate < 0.05'].ok ? '' : '';    return `Resultado de execuo do teste:     - Quantidade de VUs: ${data.metrics.vus.values['value']}    - Durao total(ms): ${data.state.testRunDurationMs}    - Iteraoes(RPS): ${data.metrics.iterations.values['count']}Req Durations(ms):    - min: ${data.metrics.http_req_duration.values.min},    - med: ${data.metrics.http_req_duration.values.med},    - max: ${data.metrics.http_req_duration.values.max},    - p(90): ${data.metrics.http_req_duration.values['p(90)']},    - p(95): ${data.metrics.http_req_duration.values['p(95)']}Checks:    - status code 200: ${checks}Thresholds:     - http_req_failed < 5%: ${thresholds}`}

Executando nosso teste

Antes de iniciarmos nossos testes, crucial destacar um ponto que frequentemente gera dvidas entre os usurios dos mdulos do xk6.

Quando utilizamos o xk6 para instalar um mdulo desenvolvido pela comunidade, o que obtemos uma verso personalizada (binrio) do K6 que est presente em sua mquina, alm do prprio mdulo que foi construdo.

Se executarmos o comando dir, podemos observar que uma verso personalizada do K6 est disponvel. Portanto, essencial realizar a execuo dos testes utilizando esta verso personalizada.

Mode                 LastWriteTime         Length Name----                 -------------         ------ -----a----        14/04/2024     16:59       37777920 k6.exe-a----        15/04/2024     20:58           1581 script.js

Comando realizado utilizando o prompt do windows.

Esclarecido esse ponto, podemos realizar a execuo do nosso script utilizando o seguinte comando:

.\k6.exe run -e TOKEN=seu_token -e CANAL=seu_canal script.js

Como resultado de saida teremos:

          /\      || //   //     /\  /  \     |  |/  /   /  /    /  \/    \    |     (   /   \   /          \   |  |\  \ |  ()  |  / __________ \  |__| \__\ \_____/ .io  execution: local     script: script.js     output: -  scenarios: (100.00%) 1 scenario, 1 max VUs, 31s max duration (incl. graceful stop):           * default: 1 looping VUs for 1s (gracefulStop: 30s)running (01.6s), 0/1 VUs, 2 complete and 0 interrupted iterationsdefault  [======================================] 1 VUs  1s

A mensagem que sera enviada ao canal especificado ter a seguinte estrutura:

Image description

Concluso

Como podemos observar, a utilizao do mdulo xk6 notification simplifica o processo de envio de notificaes sobre os resultados dos seus testes.

No exemplo deste artigo, exploramos uma mensagem contendo apenas algumas informaes do resultado do teste, acessveis atravs do objeto data.

Inmeras melhorias podem ser implementadas, como a parametrizao de environments em sua ferramenta de integrao contnua, ou at mesmo a utilizao de outros servios, como o Slack, que oferece recursos avanados de customizao de mensagens e envio via webhook.

Agradecimentos aos Ivn Szkiba, pela criao desse modulo, ajudem a manter esse projeto com uma .

Gostou do contedo e quer saber mais sobre testes de performance com K6? Ento no deixe de conferir meu curso na Udemy:


Original Link: https://dev.to/marlo2222/enviando-notificacoes-com-xk6-notification-25ml

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To