No curso de testes de performance com k6, alguns scripts precisaram de ajustes mínimos para se tornarem reutilizáveis em outros endpoints ou URLs.
Neste artigo, vamos explorar como informar variáveis de ambiente por meio de flags da CLI que se tornam visíveis para o seu script de teste de performance.
Mão na massa👩💻
Escopo para variáveis de ambiente com K6🤔
Podemos utilizar variáveis de ambiente nos testes de performance com k6 para finalidades como:
- Fornecer uma variável de ambiente para o script, como uma URL ou um token.
- Configurar o escopo de options por meio de parâmetros fornecidos por variáveis de ambiente.
Entendendo nosso script🧐
Nosso script de teste de exemplo possui as fases de inicialização, configuração e execução e está estruturado da seguinte forma:
import http from 'k6/http';
import { check } from 'k6';
export const options = {
vus: 1,
duration: '3s',
thresholds: {
checks: ['rate > 0.99']
}
}
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
});
}
Observe que a URL base de teste, a quantidade de VUs e a duração dos testes de performance estão fixos no script atual. No entanto, para torná-lo mais flexível e adaptável a diferentes cenários, é necessário realizar algumas modificações para permitir a parametrização dessas informações.
Assim, o resultado final do nosso script de testes de performance parametrizado ficará da seguinte forma:
import http from 'k6/http';
import { check } from 'k6';
export const options = {
thresholds: {
checks: ['rate > 0.99']
}
}
export default function(){
const url = __ENV.BASE_URL;;
const res = http.get(url);
check(res, {
'status code 200': (r) => r.status === 200
});
}
Informando variável de ambiente pela CLI✨
No k6, as variáveis de ambiente são expostas utilizando __ENV
, portanto, sempre que uma variável de ambiente é definida, ela pode ser acessada no script por meio desse objeto JS.
Para acessar uma variável de ambiente chamada BASE_URL, por exemplo, basta utilizar __ENV.BASE_URL
no script.
Dessa forma, para informar essa variável ao executar o script no console, utilize -e
ou --env
:
k6 run -e BASE_URL=https://test-api.k6.io/public/crocodiles teste.js
Observe que como resultado de saída, você terá uma execução simples, sem carga de usuários ou duração configuradas:
/\ |‾‾| /‾‾/ /‾‾/
/\ / \ | |/ / / /
/ \/ \ | ( / ‾‾\
/ \ | |\ \ | (‾) |
/ __________ \ |__| \__\ \_____/ .io
execution: local
script: teste.js
output: -
scenarios: (100.00%) 1 scenario, 1 max VUs, 10m30s max duration (incl. graceful stop):
* default: 1 iterations for each of 1 VUs (maxDuration: 10m0s, gracefulStop: 30s)
✓ status code 200
✓ checks.........................: 100.00% ✓ 1 ✗ 0
data_received..................: 6.5 kB 5.7 kB/s
data_sent......................: 634 B 555 B/s
http_req_blocked...............: avg=195.19ms min=0s med=195.19ms max=390.38ms p(90)=351.34ms p(95)=370.86ms
http_req_connecting............: avg=58.2ms min=0s med=58.2ms max=116.41ms p(90)=104.77ms p(95)=110.59ms
http_req_duration..............: avg=369.44ms min=145.37ms med=369.44ms max=593.52ms p(90)=548.7ms p(95)=571.11ms
{ expected_response:true }...: avg=369.44ms min=145.37ms med=369.44ms max=593.52ms p(90)=548.7ms p(95)=571.11ms
http_req_failed................: 0.00% ✓ 0 ✗ 2
http_req_receiving.............: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_sending...............: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_tls_handshaking.......: avg=92.77ms min=0s med=92.77ms max=185.55ms p(90)=167ms p(95)=176.28ms
http_req_waiting...............: avg=369.44ms min=145.37ms med=369.44ms max=593.52ms p(90)=548.7ms p(95)=571.11ms
http_reqs......................: 2 1.751659/s
iteration_duration.............: avg=1.14s min=1.14s med=1.14s max=1.14s p(90)=1.14s p(95)=1.14s
iterations.....................: 1 0.87583/s
vus............................: 1 min=1 max=1
vus_max........................: 1 min=1 max=1
running (00m01.1s), 0/1 VUs, 1 complete and 0 interrupted iterations
default ✓ [======================================] 1 VUs 00m01.1s/10m0s 1/1 iters, 1 per VU
Informando configuração de options pela CLI✨
É possível definir o algumas configurações por meio de variáveis de ambiente que sejam utilizadas como options.
Vale ressaltar que sinalizar -e
ou –env
na CLI não configura as opções necessárias para o teste. Para isso, é necessário utilizar os sinalizadores próprios para cada opção.
Para definir a duração do teste, utilize o sinalizador -d
ou –duration
seguido da duração desejada, por exemplo: –duration 10s
.
Já para especificar a quantidade de usuários nos testes de performance, utilize o sinalizador -u
ou –vus
seguido do número de usuários desejado, por exemplo: –vus 20.
".
Ao executarmos nosso script no console, podemos informar essas opções da seguinte forma:
k6 run -e BASE_URL=https://test-api.k6.io/public/crocodiles -d 10s -u 5 teste.js
Observe que agora, como resultado de saída, temos a quantidade de VUs e a duração para o nosso teste:
/\ |‾‾| /‾‾/ /‾‾/
/\ / \ | |/ / / /
/ \/ \ | ( / ‾‾\
/ \ | |\ \ | (‾) |
/ __________ \ |__| \__\ \_____/ .io
execution: local
script: teste.js
output: -
scenarios: (100.00%) 1 scenario, 5 max VUs, 40s max duration (incl. graceful stop):
* default: 5 looping VUs for 10s (gracefulStop: 30s)
✓ status code 200
✓ checks.........................: 100.00% ✓ 76 ✗ 0
data_received..................: 109 kB 10 kB/s
data_sent......................: 24 kB 2.2 kB/s
http_req_blocked...............: avg=22.53ms min=0s med=0s max=692.38ms p(90)=0s p(95)=0s
http_req_connecting............: avg=3.69ms min=0s med=0s max=121.28ms p(90)=0s p(95)=0s
http_req_duration..............: avg=325.75ms min=98.44ms med=359.87ms max=739.29ms p(90)=573.79ms p(95)=676.05ms
{ expected_response:true }...: avg=325.75ms min=98.44ms med=359.87ms max=739.29ms p(90)=573.79ms p(95)=676.05ms
http_req_failed................: 0.00% ✓ 0 ✗ 152
http_req_receiving.............: avg=661.5µs min=0s med=0s max=15.95ms p(90)=0s p(95)=6.82ms
http_req_sending...............: avg=131.35µs min=0s med=0s max=6.17ms p(90)=0s p(95)=518.48µs
http_req_tls_handshaking.......: avg=6.27ms min=0s med=0s max=201.46ms p(90)=0s p(95)=0s
http_req_waiting...............: avg=324.95ms min=98.44ms med=359.87ms max=739.29ms p(90)=573.79ms p(95)=673.67ms
http_reqs......................: 152 14.30048/s
iteration_duration.............: avg=699.03ms min=220.34ms med=905.37ms max=1.28s p(90)=1.16s p(95)=1.24s
iterations.....................: 76 7.15024/s
vus............................: 5 min=5 max=5
vus_max........................: 5 min=5 max=5
running (10.6s), 0/5 VUs, 76 complete and 0 interrupted iterations
default ✓ [======================================] 5 VUs 10s
Leitura complementar📖
Esses foram apenas alguns exemplos de sinalizadores que estão disponíveis com k6 para configuração do seu teste, vocês podem conhecer muitos outros em options.
Conclusão💖
A parametrização e utilização de variáveis de ambiente tornam nossos scripts de teste de performance reutilizáveis em diferentes cenários, diminuindo o retrabalho e acelerando o processo de construção de novos scripts.
Gostou do conteúdo e quer saber mais sobre testes de performance com K6? Então não deixe de conferir meu curso na Udemy:
Top comments (0)