[Música] Olá K tudo bem seja muito bem-vindo e muito bem-vinda ao treinamento de introdução a testes de performance com o k6 o k6 É uma ferramenta bem premiada tá ganhando muita popularidade no mercado e não é à toa né Ela é a principal concorrente do J meter hoje em dia o casss foi feito pela grafa da Labs e existe duas versões a versão open source onde a gente trabalha criando scripts e Execução local e a versão nuvem onde você tem todo um dashboard e uma infraestrutura para construir os seus testes de performance como esse é
um curso básico um curso introdutório nós vamos conhecer o k6 e através da da Opção open source onde nós vamos trabalhar 100% local criando scripts e fazendo execuções olhando essa tela Você já sabe o que que nós vamos instalar né vis Studio code eu sou fã para caramba dessa ferramenta Imagino que você também Porque que ele Dominou a comunidade de tecnologia então eu nem vou me prolongar aqui falando sobre os benefícios da ferramenta já vamos fazer a instalação tá então eu vou clicar no botão download for Windows ele já vem aqui para essa página faz
o redirect e faz o download pra gente o download foi feito aqui a milhão vou abrir o instalador e vamos seguir aqui o passo a passo de instalação vou aceitar os termos de uso vou clicar em next next tudo padrão Ah Não tudo padrão Não nessa tela aqui eu vou marcar essas duas opções porque elas são bem interessantes antes a nível de produtividade tudo bem mas o que que essas opções fazem vamos lá a primeira opção faz com que eu consiga abrir um arquivo com visual Studio code ao clicar nesse arquivo com o botão direito
do mouse a segunda opção faz com que eu consiga abrir uma pasta no visual Studio code ao clicar com o botão direito do mouse então eu recomendo demais a Instalação dessas features beleza agora sim vou clicar em next install instalação é super simples né mas eu gravo essa aula porque eu acho que é importante ter todo o passo a passo certinho para que você tenha o mesmo ambiente que o meu bom instalou aqui rapidinho vou clicar em finish E aí ele vai abrir aqui pra gente o visão Studio code pela primeira vez eu vou maximizar
a janela vou clicar aqui embaixo em manage manage não vou clicar aqui ó em Extensions para fazer aquela customização padrão que eu tenho costume de fazer né primeiramente eu vou instalar o tema de ícones Então vou colocar aqui ó material Icon instalar esse tema que por enquanto é o tema que eu mais gosto Inclusive tem mais de 13 milhões de downloads é um tema muito legal né E aí para ativar eu clico aqui em cima e aqui embaixo clico em activate Só para confirmar OK agora eu vou instalar o One Dark pro esse tema É
bem bacana também mas é uma questão de gosto pessoal né a paleta de cores do One Dark pro me agrada muito mais do que a padrão do visual Studio code então eu vou instalar esse tema instalação é super rápida ó já trocou E aí eu vou clicar aqui ó em on Dark pro darker beleza pronto ativado e agora eu tenho o meu visual Studio code customizado e pronto pra gente trabalhar bom o sistema Alvo do nosso treinamento é uma API de cadastro de usuários nós vamos colocar Essa P no ar localmente no meu e no
seu computador Para isso precisamos ter acesso ao código dessa api não é verdade e esse código foi versionado com Git e publicado em um repositório no github pra gente poder acessar essas coisas é importante ter o Git instalado no computador se você tem o Linux então eu recomendo que você faça a instalação do Git através da interface de linha de comandos ou seja o terminal usando o gerenciador de pacotes da sua Distribuição se você trabalha com Mac Então você instala o excode e as ferramentas de desenvolvedor agora se você usa o Windows como eu o
que você vai fazer é instalar o Git através desse site gitf windows.org eu vou deixar o link aqui embaixo para facilitar o acesso para você eu já fiz o download aqui bonitinho e agora eu vou inicializar a instalação então eu vou abrir o executável de instalação do Git for Windows E aí ele vai trazer pra Gente um passo a passo né eu vou clicar em Yes para confirmar as alterações que eu quero fazer no computador e Aqui nós temos o passo a passo de instalação vou clicar em next next e vou clicar em next várias
vezes vou fazer a instalação padrão e é bastante next aqui tá Então vamos lá ó next next Next são muitos next eu vou deixar tudo padrão mesmo porque não tem problema tá Eu não vou fazer nenhuma alteração nenhuma customização adicional nada disso só Instalar padrão que já está perfeito Ok vamos esperar aqui finalizar a instalação né porque esse aqui demora um pouquinho Nem tanto mas demora um pouquinho tá olha só tá acabando perfeito mais um pouquinho tá rodando algum script Zinho aqui finalizou perfeito quando ele finaliza a instalação ele traz essa janelinha pra gente ver
o release Notes não vamos ver isso não Só que também tem uma outra opção pra gente e subir o gitbash eu vou Fazer isso eu vou marcar essa opção e vou clicar em finish e esse aqui é o gitbash qual que é a diferença do gitbash pro prompt de comandos padrão do Windows A diferença é que o gitbash simula o Bash que é a interface de linha de comandos do Linux assim como no Mac também é até porque Mac Linux no Core é a mesma coisa é tudo Unix tá Então olha só que interessante aqui
no gitbash eu consigo digitar LS que é o comando Linux para listar diretórios diretórios Arquivos e por aí vai e aí eu já percebo que eu estou na pasta do usuário Ó Barra c e users Papito curiosidade aqui no b a gente não usa o comando C2 P né Por quê Porque o Linux e o Mac não tem C2 pontos o que tem é a unidade de disco Tá bom então se eu que quiser acessar o C2 pontos pelo Bash eu faço assim ó CD espaç barc bar e ele entra no C2 pontos é a
mesma coisa do que no prompt padrão só que a sintaxe muda um pouquinho por quê Porque ele tá simulando aqui o Ambiente de interface de linha de comandos Linux e é muito importante pra gente e nos acostumarmos com essa interface porque isso aqui é o que é executado na maioria das empresas né A maioria das empresas usam Linux Então acho que é muito importante a gente se familiarizar com isso aqui e para nível de autom de testes o b é muito melhor tá então vamos lá eu vou digitar clear para limpar a tela E aí
eu vou criar uma pastinha aqui no C2 P Ah só para você Ver qual que é o comando mas essa pasta vai ser fundamental para que possamos configurar o projeto mais paraa frente então eu recomendo que você faça a mesma execução que eu tô fazendo aqui Tá bom então olha só eu já tô no C2 P se eu digitar LS eu posso ver a pasta Windows program files entre outras pastas vou digitar o comando m cadir k Academy olha só que bacana criou a pasta k Academy se eu digitar LS eu posso ver a pasta
que Academy aqui vamos trabalhar dentro Dessa pastinha a partir de agora e como é que eu faço para acessar essa pasta CD Espaço que Academy digito LS Pronto já estou dentro da pasta que é Academy Ok mas pera aí o que que isso aqui tem a ver com o Git bom o que acontece é que quando você instala as ferramentas do Git você ganha de que Brinde o Bash O gitbash que é o simulador de interface de comandos Linux e nós vamos usar ele a partir de agora no nosso treinamento Vamos acessar a Microsoft Store
e olha Só essa página o Windows terminal eu vou deixar o link aqui embaixo para facilitar para você beleza que que é Windows terminal é uma ferramenta desenvolvida pela Microsoft e de interface de linha de comandos ela é mais robusta tem mais opções é bem performática tá e pode ser integrada ao gitbash eu vou usar ela no nosso treinamento e a partir de agora em vários treinamentos na k Academy beleza como é que a gente faz para instalar Essa ferramenta basta clicar no botão azulzinho aqui no cantinho obter o aplicativo da Store e olha só
que interessante é gratuito Ainda bem né então vou clicar no botão azulzinho e aí o sistema operacional vai abrir essa janelinha da Microsoft Store eu não vou precisar de nenhuma autenticação aqui por quê Porque o meu Windows é original e já está integrado com a minha conta do Hotmail com isso a instalação é automática vou clicar em Open e pronto Já tenho aqui o Windows terminal instalado no meu computador vamos maximizar essa janela e olha só que interessante por padrão ele vem com o powershell que por sinal é uma interface de linha de comandos poderosa
para Windows mas nós não vamos usar ela tão pouco o prompt de comando então o que que nós vamos fazer Olha só eu vou clicar nessa setinha aqui em cima e aí nós temos aqui por padrão três opções powershell por de comando e aure Cloud Shell Nenhuma das três tá então eu vou clicar em settings que são as configurações e aqui embaixo nós temos essa opção ó Open Jason file é abrir o arquivo de configuração no formato Jason assim a configuração fica mais prática Ele abriu aqui no Notepad não tem problema e aqui embaixo nós
vamos ter as configurações que serão alteradas olha só que legal Vamos descer mais um pouquinho Cadê opa não então tá mais para cima cadê acho que eu passei direto Né passei direto Ah tá aqui ó tá aqui em cima ó é não tava tão lá para baixo não é nessa opção aqui ó profiles tá vendo nessa opção profiles a gente tem aqui ó a lista de profiles Quais são esses profiles os terminais disponível pra gente poder usar no Windows terminal né então a gente pode ver aqui que tem o Powers Shell como a gente viu
na interface gráfica prompt de comandos e o aure cloud Shell beleza que que eu vou fazer aqui adicionar mais uma Configuração nessa lista a configuração do gitb eu já deixei essa configuração pré-definida já deixei a colinha pronta para te ajudar tá então o que que você vai fazer copiar a colinha e colar aqui depois do Windows Cloud Shell dentro dos colchetes tá porque é uma lista de profiles uma a lista de terminais eu vou colar essa opção e vou fazer a identação vou selecionar aqui ó Ixe deu ruim porque eu tô no Notepad então vou
ter que fazer um por um linha por linha Ó Mas é importante a gente fazer para deixar tudo bonitinho tudo organizadinho com a identação certinha tá não vai ficar 100% mas vai ficar bom não vai dar problema o importante é deitar Ó agora sim nós temos essa configuração adicional Command Line apontando pro B dentro do Git esse aqui é o guide tipo um ID pode deixar esse aqui mesmo da colinha que não tem problema ele é diferente dos outros inclusive a probabilidade de ser igual é muito Difícil tá hiding false ícone para ficar elegante bonito
gitbash é o nome e starting Director no user profile exatamente o padrão do Git Bash tá se você instalou o Git for Windows igualzinho na aula passada Isso aqui vai funcionar lindamente perfeitamente tá se você instala em outro diretório diferente do padrão você faz os ajustes aqui ó C2 pont program files E por aí vai beleza bom eu vou salvar esse arquivo de configuração e vou fechar Agora se você clicar na setinha aqui ele traz pra gente o gitbash olha só que bacana E aí se eu clicar eu abro o gitbash dentro do Windows terminal
Agora eu tenho aqui uma interface de linha de comandos top e bem robusta mas ainda não terminaram as configurações deixa eu fechar fechar esse gitbash e voltar aqui pras configurações aqui em Startup que é a primeira opção de configuração vou clicar e aí ele traz pra gente aqui ó the full profile Qual que é o profile Padrão que vai ser inicializado ao abrir o Windows terminal por padrão está o powershell eu vou trocar para gitbash com isso o gitbash se torna o terminal padrão dentro do Windows terminal tá o profile padrão terminal padrão É isso
aí beleza vamos fechar ou melhor vou clicar em aqui embaixo melhor clicar várias vezes né que aí te garante que vai est tudo salvo bonitinho tá bom antes de fechar eu ia fechar mas eu não vou não tá antes de fechar vou mostrar mais Algumas opções legais aqui ó clicando em aparência você pode trocar o tema você pode mudar inclusive o padrão de cores e fazer algumas configurações adicionais Aqui de acordo com o seu gosto eu vou deixar tudo padrão o mais importante para mim aqui era integrar o gitbash no Windows terminal tá vou clicar
em fechar aqui na no xin vou fechar tudo e aí eu vou abrir o Windows terminal de novo né como é que eu faço isso aproveitar e fechar o gitbash também vou vir aqui ó e Vou digitar terminal somente terminal E aí ele vai mostrar aqui o ícone de atalho do Windows terminal clicando nele ele abre pra gente o Windows terminal já integrado no gitbash e agora sim nós temos aqui uma interface de linha de comandos muito bacana para trabalhar com testes automatizados o k precisa ou não precisa do lo para funcionar na real não
precisa só que a pay Rash que nós vamos testar foi construída em JavaScript dentro da plataforma node então é Importante ter o node DS instalado para que a api funcione localmente no meu e no seu computador beleza é exclusivamente Por isso tá aqui no site do node A Gente Tem duas versões nesse momento a versão 16.17.0 LTS onde LTS quer dizer long terminal support e a versão 18.9 9.0 current né eu vou recomendar a versão LTS porque é uma versão mais estável e um detalhe se de repente no momento em que você está assistindo essa
aula a Versão LTS não for a 16 Ainda assim eu recomendo que você trabalhe com a versão 16 para que não tenhamos problemas de compatibilidade até porque as coisas evoluem a cada dia beleza Tá bom então como que eu faço para baixar exatamente essa versão olha só que legal você vai clicar aqui em other downloads nesse link aqui embaixo e aí ele vai vai trazer aqui algumas opções relacionadas a sistemas operacionais e O legal é que o node ele é multiplataforma ele roda no Windows no Mac e no Linux tá aqui embaixo a gente tem
o seguinte ó ah Cadê previous releases olha só que bacana vou clicar nesse link e aqui a gente tem uma tabelinha com todas as versões do modde que foram liberadas até esse momento a que nós vamos instalar é a 16.17.0 Então vamos lá aqui ó só tem a versão 16 nessa página Vamos navegar pra próxima página 17 não é a 17 a 17 nem foi liberada como release tá E aqui nós temos a 16 ó 16.17.0 LTS com o codenome galion ok aqui tem aqui o a data de lançamento a versão do do npm a
versão da V8 que é o motor que o node roda e aí o que nós temos aqui no cantinho ó o link para fazer o download então vou clicar aqui em downloads e olha só que bacana ele traz uma página super simples com vários arquivos para fazer o download no meu caso eu tô usando Windows e o meu Windows é de 64 bits então eu vou baixar esse carinha aqui ó Node v16 170 tro x64 MSI MSI é a extensão do instalador do Windows tá instalador da Microsoft vou clicar ã nesse carinha e ele vai
fazer o download bonitinho aqui para mim ó o download foi super rápido né então vou abrir esse instalador aqui mesmo e vamos prosseguir com a instalação do node Ah não ele não abriu ainda porque ele tá verificando se não tem nenhum vírus se não tem nenhuma nenhum Trojan alguma coisa nesse sentido Já verificou já abriu o instalador e Agora sim nós vamos fazer aqui a instalação do node eu vou clicar em next vou aceitar os termos de licença next mais uma vez não vou mexer no diretório de destino clicando em next e aqui eu vou
deixar todas as opções marcadas isso aqui é muito importante tá deixa tudo marcado clico em next e next mais uma vez install vai pedir aqui acesso de administrador local para fazer alterações no computador uma vez que eu eh Libero essas alterações ele vai Copiar os arquivos configurar variáveis de ambiente e demais configurações adicionais para que tenhamos a plataforma no instalada Pronto já instalou bonitinho vou clicar em finish e agora eu vou abrir o prompt de comando pode ser o prompt mesmo tá ó comand eh Vamos colocar aqui prompt com prompt né Beleza ó com prompt
ou prompt de comando tanto faz olha só que bacana tô aqui no prompt vou digitar node menos menos version node na versão 16.17.0 perfeito agora eu vou digitar npm menos menos version que que é npm npm significa node package Manager o gerenciador de pacote oficial do node porém eu vou recomendar para você usar o yarn que é o concorrente do npm inclusive bem mais rápido como é que a gente faz para usar o yarn olha só que legal você digita aqui ó Core pack enable mas eu acho que vai dar ruim porque eu preciso ser
administrador e é Isso mesmo ó se eu não for administrador não vai funcionar então eu vou fechar esse prompt vou abrir outro prompt como administrador Run as administrator beleza e agora sim eu vou digitar Core pack enable enter e ele habilita aqui o corpack com isso eu tenho acesso ao yarne que é o gerenciador de pacotes do node alternativo bem mais rápido e bem mais bacana beleza vamos usar o yarne aqui no treinamento para poder colocar a nossa Api no ar esse aqui é o repositório oficial do nosso treinamento e como de costume eu vou
deixar o link aqui embaixo para facilitar o acesso para você após acessar a página você vai clicar aqui nesse botãozinho verde e vai clicar em copy para copiar a URL de clone e pode ser https não tem problema tá Eu vou copiar aqui e aí eu vou abrir o Windows terminal e vou acessar a pasta que é Academy a pasta que foi criada no C2 p a algumas aulas anteriores tá Então Olha só CD Espaço barc barq academ teclando enter estou na pasta que é Academy se porventura você não criou crie a pasta que é
Academy para ficar tudo organizado e Bonitinho tá agora vou digitar o comando Git Clone e vou colar a URL que eu copiei lá no site a URL de clone teclando enter nós vamos ter essa estrutura Inicial com a pasta curso c básico se eu digitar LS eu posso ver essa pastinha e para entrar na pasta eu digito CD espao curso CS básico agora eu Vou digitar o comando code espaço ponto para abrir o visual Studio code exatamente nessa pasta vou clicar nessa opção aqui para confiar no autor dos arquivos vou clicar em Yes eu confio
e olha só que bacana temos aqui o nosso workspace né temos aqui a nossa pasta de trabalho nosso espaço de trabalho que é o repositório oficial do nosso treinamento beleza temos aqui o arquivo ridm com a documentação da api na qual nós vamos ver depois E aí nós temos aqui Duas pastinhas a pastinha de teste testes no plural e a pastinha api onde nós temos a aplicação que será testada onde nós vamos aplicar testes de performance Ok abrindo a pasta src que quer dizer source code nós podemos ver aqui o código da api então nós
temos uma camada de Controller uma camada de modelagem temos aqui a camada de rotas e o arquivo server.js que é o arquivo Inicial pô mas esse código tá meio estranho tem um código doidão aqui e Tudo mais é isso mesmo tá o que a gente faz aqui é uma obfuscation no código para ficar igual para todos os alunos para não ter nenhum problema Ok bacana isso aqui você não precisa se preocupar por enquanto tá o que eu quero que você se preocupe aqui realmente é com esse arquivo aqui ó env ou melhor ponto env aqui
nós temos o arquivo de configuração com duas Chaves de configuração o primeir a primeira chave é Mungo RL por quê porque o banco de dados da api é Mongo DB e a gente precisa definir aqui ó a configuração do banco de dados algo que nós vamos fazer em breve depois nós temos timeout com 2 segundos ou melhor 2000 msos deixa assim e não mexe em nada por enquanto tá bom voltando aqui pro terminal pro Windows terminal que que eu vou fazer eu vou limpar a tela e em seguida tenha certeza de que você está na
pasta certa na pasta curso CZ básico tá olha só eu tô vendo aqui ó que eu estou na pasta certinha beleza é Importante ter essa certeza se eu digitar LS teclar enter eu posso ver aqui ó ridm api e testes tá bom que que a gente vai fazer agora nós vamos digitar CD Espaço Api para entrar no projeto da api digitando LS eu posso ver aqui o arquivo package.js e o arquivo src que que eu vou fazer agora eu vou digitar yarn install para fazer a instalação das dependências da api e enquanto tá fazendo a
instalação a gente pode voltar pro visual Studio code e Abrir o arquivo package.js e Aqui nós temos o arquivo de dependências da api né dependências de desenvolvimento dependências do projeto como um todo ah como bibliotecas e frameworks Ok bom vamos fechar esse arquivo que foi mais a título de curiosidade também agora veja que a pasta node modules foi criada por por quê Porque as dependências foram instaladas e sempre que eu tenho uma aplicação feita em node as dependências são instaladas dentro da pasta node Modules Ok bom voltando aqui pro terminal olha só que bacana todas
as dependências foram instaladas com sucesso eu não vou trazer para você um treinamento de k6 by thebook embora seja um treinamento introdutório um curso básico Ainda assim eu não vou trazer by thebook por isso que é importante eu mostrar para você como testar uma API real não api fake uma url na internet que vai devolver 200 e que você realmente não vai eh tentar simular Picos de performance como aconteceria no mundo real sabe então assim eu quero realmente compartilhar conteúdo relevante Tá bom por conta disso que a gente tá demorando um pouquinho para entrar no
k6 por quê Porque eu quero montar um ambiente bacana e te dar as ferramentas para você aprender teste de performance de verdade beleza Bom agora vamos fazer o seguinte eu vou abrir aqui uma nova aba no navegador e Vamos acessar o site mongodb.com por quê Porque o banco de dados da pay de usuários foi e feito com a modelagem de mong DB persiste as informações no Mongo e é importante a gente ter uma Instância desse banco de dados para configurar a nossa pi Então vamos lá eu vou clicar aqui em sign in nesse link aqui
em cima no menu aqui você pode fazer login pela sua conta do Gmail pela sua conta do do github integrando né com mong DB ou através de um formulário simples né caso você não tenha conta você clica aqui Embaixo em signup para cadastrar a sua continha Tá eu já tenho a minha conta aqui então vou logar digitando aqui o e-mail que eu usei para cadastrar minha conta no mongodb Tá bom vou clicar em next E aí eu vou digitar a minha senha vou clicar em login aqui embaixo e eu acho que vai dar tudo certo
porque Eu acho que eu coloquei a senha certa né ó deu tudo certo ainda bem né bom já tô logado aqui no dashboard do mong DB bonitinho tá se você criou a sua conta e Fez login pela primeira vez o sistema vai pedir para você criar uma organização não é o meu caso porque eu já tinha essa conta criada anteriormente já tenho aqui a organização que é Academy criado inclusive projetos que foram usados em outros treinamentos tá então no meu caso já que eu já tenho organização cadastrada o que eu vou fazer aqui é criar
somente um novo projeto clicando nesse botão New Project vou clicar aqui e vou dar um nome para Esse projeto esse projeto vai ter o seguinte nome Ó user Api k6 para deixar claro que foi pro curso de k6 tá vou clicar em next membros não preciso adicionar membros aqui beleza então vou clicar em Create Project Beleza agora ele vai pra parte de clusters Tá bom eu vou clicar nesse botz verde que é build Database ele vai compilar um banco de dados pra gente nessa etapa ele vai trazer pra gente Três planos o plano serverless dedicated
e shared obviamente que nós vamos para o shared que é o plano gratuito Tá bom vou clicar em Create aqui no Shared nem vai pedir cartão de crédito Então pode ficar tranquilo ou tranquila tá bom bom Estamos aqui no plano free e agora a gente precisa decidir qual será o cloud provider o Data Center tá bom juntamente com a região a gente tem aqui ó três opções aws Google Cloud aure né os três maiores do mundo tá bom bom a gente pode Escolher aqui ó aws com um data center em São Paulo isso é interessante
eu falei agora a pouco que a gente poderia estar com datacenter na nos Estados Unidos ou na Europa mas poxa agora tem a opção de ter data center em São Paulo isso é muito bacana a gente vai ter uma performance ainda melhor né Agora vamos fazer o seguinte antes de escolher eu vou clicar em Google Cloud Só por curiosidade Google Cloud também tem data center em São Paulo aure aure tem em São Paulo não tem né e o interessante é que quando eu clico em um Cloud provider que tem data center em São Paulo ele
automaticamente já seleciona São Paulo para mim por quê Porque ele tá pegando a localização pelo meu IP o sistema o site sabe que eu estou no Brasil então ele já seleciona um data center é mais próximo da minha região né mas e para quem mora no nordeste Será que ele vai sugerir São Paulo não sei se você mora no nordeste Mora mais para cima do país comenta aqui embaixo se sugeriu São Paulo ou se de repente um data center nos Estados Unidos fica mais perto não sei tá acho que é interessante essa curiosidade tô curioso
para saber se você tá mais para cima ali em Pernambuco ali na no nordeste comenta aqui embaixo porque essa informação é muito interessante pra gente a título de curiosidade tá no meu caso eu tô em São Paulo vou escolher São Paulo beleza bom aqui embaixo a gente Tem algumas informações né interessantes sobre configurações espaço e tudo mais a gente não precisa entrar Nessas questões aqui eu vou simplesmente clicar no botão Create cluster uma vez que São Paulo está selecionado e no meu caso eu vou usar a WS que é aqui ele vai pedir um capcha
Tudo bem então ele tá falando aqui para eu escolher árvores Palm TRE São Palmeiras né então vamos pegar aqui essa aqui é uma palmeira Palmeira isso aqui tem cara De Palmeira né Eu acho que essas quatro são Palmeiras né Vamos clicar em verify deu tudo certo eu sei o que é uma palmeira bacana agora nós vamos pra opção de segurança né aqui a gente tem duas formas de autenticar via certificado que é muito complicado pro nosso treinamento ou username and password que é mais simples pra gente eu vou pelo caminho mais simples Tá bom até
porque é o ambiente acadêmico então não tem crise o nome do usuário vai ser q e A senha vai ser kdmi com y vou até clicar aqui para você ver ó k Academy que é o nome da k Academy beleza k Academy com y Ok vou clicar em Create user criou usuário bonitinho pra gente e agora a gente tem aqui a opção de conexão né vai conectar de onde quem que vai conectar nesse banco vai ser o ambiente nuvem ou vai ser o ambiente local my local environment vai ser o ambiente local a nossa P
vai rodar localmente no meu e no seu computador Então a gente deixa essa opção marcada porque é como se fosse um ambiente de desenvolvimento local e aqui mais para baixo a gente tem uma configuração muito importante que é a lista de IPs que podem acessar esse banco de dados você pode colocar o IP seu computador tá bom só que para não dar ruim dado que é um ambiente acadêmico eu vou colocar tudo zero ó 0.0 p0.0 e aqui no description eu vou colocar o seguinte ó eh libera Geral isso O que quer dizer que não
tem muita segurança não tá tô liberando para qualquer IP qualquer IP de qualquer computador pode acessar esse ambiente aqui uma vez que saiba o usuário e senha Tá bom então Ass sim não tá tão liberado assim né Não tá tão go Horse assim Beleza vou clicar em add entry beleza e vou clicar agora em finish and Close né para finalizar e encerrar a configuração do nosso cluster de banco de dados vou paraa go to Database e agora vai demorar Aqui em média de 10 minutos no máximo para provisionar o nosso banco de dados chegou a
hora de colocar nossa AP no ar pra gente fazer isso eu Preciso pegar uma string de conexão que está exatamente no cluster que a gente acabou de configurar então eu vou clicar aqui ó em Connect e vou escolher a opção Connect your application clicando nessa opção eu preciso agora definir qual que é o driver e a versão o driver aqui é Nodejs que por padrão já veio selecionado que é muito bom pra gente né mas clicando aqui a gente pode ver outros drivers relacionados a outras linguagens de programação mas no nosso caso é node Lembrando
que node não é uma linguagem é uma plataforma a linguagem aqui no caso é JavaScript Porém eu só consigo construir uma API em JavaScript usando o node por isso que o node tá marcado como driver aqui beleza bom clicando aqui em 4.1 ou superior ele Traz pra gente essa string de conexão vamos entender o que que é essa string tá primeiramente a gente tem o protocolo de conexão o usuário com a senha mascarada Ou seja a gente precisa colocar a senha depois tá e o mais importante ó o endereço do cluster que a gente acabou
de criar esse endereço é específico para minha conta tanto é que na sua conta você vai ver um endereço diferente tá bom E aí depois ele tem aqui algumas configurações adicionais na String de conexão Tá bom vamos lá eu vou selecionar essa string Ou melhor nem precisa tá é só clicar esse iconz aqui que ele já copia o valor completo pra gente copiando eu vou voltar aqui pro visual Studio code vou abrir a pastinha da api src que quer dizer source code env p ponto en ia falar en ponto alguma coisa nada a ver é
só ponto en tá E aí eu vou apagar essa string de conexão básica que seria para um ambiente local um banco de dados local tá vou apagar e Vou deixar somente mongo underline URL igual e aí eu vou colar a string de conexão que a gente pegou lá no cluster do mung DB tá Olha que bacana tá bonitão aqui né aí o que que eu vou fazer eu vou trocar e abre sinal de menor e sinal de maior com password dentro Eu vou pegar Exatamente isso aqui e vou substituir por cadem com Y não é
porque o usuário é k dois pontos senha que é cadem com Y fechou E aí eu vou vir aqui ó mais pro cantinho e depois dessa Barrinha aqui entre a Barrinha e o ponto de interrogação entre essas duas informações eu vou definir o nome do banco de dados que vai ser users DB users DB tá bom contrl s para salvar e com isso eu tenho a aplicação a api apontando pro banco de dados que a gente criou na aula passada Agora sim a gente pode colocar essa api no ar fechou que que eu vou fazer
aqui eu vou vir no terminal Windows terminal vou limpar a tela vou certificar que eu estou na Pasta pi dentro de curso k6 básico que por sua vez está dentro de que academ C2 pont Tá vou me certificar que estou nessa pasta e aí eu vou digitar o comando iarn Dev Esse comando vai colocar a api no ar como o meu ambiente é novo essa instalação do load é nova o Windows tá pedindo aqui para eu habilitar autorizar o acesso aqui tá tudo bem eu vou marcar os dois aqui pra rede pública ou rede privada
vou dar um allow access para não ter problema e Olha só a api está online fechou que que eu vou fazer agora eu vou testar então eu vou abrir aqui ó a o o navegador mesmo vou abrir uma nova guia e vou digitar local host na porta 333 3 que é a porta da api teclando enter olha só que bacana user api by Papito version 1.2 Beta true isso quer dizer que a ap está online funcionando essa aqui é a rota principal que garante pra gente que a api está funcionando tá tanto é que se
Eu abrir o terminal eu posso ver realmente que a aplicação está no ar agora se ela funciona eu não sei né Vamos fazer um teste funcional bem simples Tá bom qual que é esse teste funcional fazer um cadastro de usuário através da AP pra gente fazer esse cadastro a gente precisa mandar uma requisição post paraa ap e olha só que interessante olhando aqui na documentação no github podemos ver aqui alguns requisitos relacionados a a a Essa aplicação uma documentação super simples mas o suficiente pra gente conseguir testar Olha só temos aqui requisitos funcionais requisitos funcionais
de cadastro deve retornar o ID ao cadastrar o novo usuário deve retornar deve retornar 400 ao cadastrar sem e-mail eia Campos obrigatórios e também deve retornar 400 seu e-mail for duplicado E aí nós temos aqui dois Campos e-mail e password né Beleza então Assim é uma p super simples mesmo agora como que a gente faz para montar uma requisição post para testar no mínimo O caminho feliz eu instalo o postma ou o insônia hum na verdade nenhum dos dois então vou fazer o seguinte eu vou abrir o visual Studio code e aqui na raiz da
nossa pastinha eu vou criar um arquivo chamado teste.sh o que que quer dizer sh sh quer dizer Shell script então eu vou criar um arquivo de Shell para testar a nossa api Um arquivo bem simples mesmo Pera aí quer dizer que o Shell script tem algum recurso para testar api igual eu testo com cypres com super test ou com qualquer outro Framework Não não é bem assim o que eu vou fazer aqui é mandar uma post através do cur o suficiente pra gente fazer um teste bem simples bem básico mesmo tá então vamos lá que
que eu vou fazer aqui eu vou digitar cur que é a ferramenta que vai mandar essa requisição http e vou passar aqui ó Menos menos request Então tô falando pro cur que eu quero mandar uma requisição requisição de qual tipo do tipo post Beleza então o cur vai mandar uma requisição do tipo post para onde vai mandar uma requisição do tipo post espaço barra e na próxima linha eu vou colocar URL para essa URL aqui ó http do P bar local host na porta 33 33 na rota signup Tá mas como que eu sei que
essa é a rota que vai fazer o cadastro porque eu perguntei pro dev e o Dev me falou é isso tá testar software também é um trabalho de relacionamento perguntei pro dev ele informou para mim por não tem muita documentação tá bom embora a gente tenha aqui uma documentação bem legal no github a gente não tem informação da Rota então eu tive que perguntar pro dev tá bom beleza bom voltando aqui eu vou dar um espaço e colocar mais uma barrinha invertida para eu continuar Esse comando cur na próxima linha Esse comando cur é uma
linha só né Só que se eu digitar tudo numa única linha vai ficar bem feio então eu vou colocando essas barrinhas invertidas pra gente colocar tudo multiline fica mais fácil para entender e analisar fechou beleza bom agora eu vou passar aqui o cabeçalho ó header qual que vai ser o cabeçalho vai ser isso aqui ó ah content traço Type dois pontos ã application application barra json tudo dentro de Aspin simples tudo dentro de asinha simples e aí mais uma barrinha invertida próxima linha que que eu vou passar agora vou passar o parâmetro data que é
o qu o payload as informações que eu quero mandar para essa api através do método http post E aí eu coloco aqui ó aspas simples e monto o Jason aqui dentro tá então abre e fecha chaves para montar o Jason aspas duplas que é a sintaxe do Jason e coloco e-mail Qual que é o e-mail aqui por exemplo ó sei lá Papito @q academy.io tá bom asas duplas para fechar porque eu tenho que mandar D no formato Jason perfeito tá bom vírgula password password precisa estar dentro de aspas duplas esse formato aqui tem que ser
Jason perfeito tá dois pontos mais uma aspas duplas pwd 1 2 3 né E aí eu fecho aqui ó as chaves e coloco a aspas simplas no final com isso eu tenho um Jason certinho para testar esse Jason Inclusive eu acho que vale muito a pena o que que eu fazer eu vou copiar tudo que tá dentro de asinha simples vou copiar essa informação vou abrir o navegador e aqui no Google deixa eu entrar no Google eu vou buscar pelo termo Jason beautify Jason validator tá Jason validator ele cai nesse site aqui ó Jason formater
e validator né vou colar e vou clicar em process ó o Jason está válido certinho mas eu vou continuar usando ele numa Única linha tá numa única linha porque a gente tá usando um C aqui e é para ficar mais simples Tá bom esse espacinho aqui a gente pode tirar que não vai dar ruim tá bom e agora eu tenho o comando cur Deixa eu tirar aqui o Explorer só para você ver somente o comando olha só que bacana agora eu tenho um comando cur que vai testar o cadastro de usuário na nossa pi beleza
por que que eu tô usando o cur aqui ao invés do Postman ou do insônia Poxa no Postman ou no insomnia Seria muito mais mais fácil sim mas é só um comando é só uma requisição post então não custa nada a gente aprender com o cur também beleza bom eu vou apertar Crol s para salvar e agora nós temos o arquivo teste.sh que manda essa requisição post paraa api cadastrando o usuário Fechou eu vou voltar aqui pro terminal e vou abrir uma nova guia do gitbash porque a primeira tá com AP no ar então tenho
que abrir uma nova nessa nova eu vou digitar os comandos Até Chegar na pasta do projeto ó C2 pontos que é Academy eh curso k6 básico enter digitando LS eu posso ver agora o arquivo teste.sh que tá no mesmo nível de testes e api tá bom bom voltando pro terminal então eu vou digitar o comando ch mode + x teste.sh o que que é Esse comando é um comando do Bash para dar permissão de execução para esse arquivo teste.sh é como se esse arquivo a partir de agora Fosse um executável um executável que vai executar
o cur beleza como é que eu rodo ponto barra teste teste no singular psh teclo enter e ele vai rodar o cur vamos ver o que que vai acontecer olha só que da hora olha só o que retornou aqui ó um id e um e-mail vamos voltar aqui pra documentação Zinha da nossa pi deve retornar o ID ao cadastrar um novo usuário eu tô vendo um ID aqui na resposta da requisição cur isso quer dizer que a api cadastrou o usuário Agora Como que eu faço para ter certeza absoluta olhando no banco de dados Então
a gente vai lá no mong db E aí ó eu posso fechar aqui essa janelinha e clicar em browse collections clicando aqui a gente pode ver a coleção onde foi salvo esse usuário né olha só collections users DB é o banco de dados e a coleção chama users e a título de curiosidade o mongo DB é um banco de dados não relacional diferente do tradicional do Convencional como SQL server MySQL Oracle ou post né o mongo DB é não relacional é um banco desnormalização diferente então no mong db a gente não tem tabelas a gente
tem collections ou coleções em português que no caso é users e user aqui é uma coleção e ao invés de ter registros como a gente tem num banco de dados tradicional tabela registros aqui a gente tem coleções documentos um novo documento foi inserido aqui ó que é o Quê o papito @k academy.io a senha criptografado que é muito legal e um ID cujo final é 3c 3D voltando pro terminal Olha o ID aqui ó 3c 3D então o nosso comando cur Está cadastrando via requisição http post o usuário na api isso quer dizer que a
api tá funcionando bem que ela passou nos testes funcionais ou seja ela está pronta para ser testada através de técnica de testes não funcionais que no nosso caso é avaliar a performance bacana para ficar claro aqui Que a pii tá funcionando eu vou cadastrar mais um usuário ó agora eu vou cadastrar o Fernando Fernando @q academy.io só para ficar claro aqui por desencargo de consciência tá mudei a massa de teste volto aqui pro terminal vamos rodar o teste.sh de novo processou E aí trouxe um novo ID 3c 3f vamos voltar pro banco de dados e
aqui em cima tem uma opção pra gente fazer refresh né recarregar a coleção E Agora Nós temos dois documentos agora ficou Claro Sem dúvida nenhuma que a nossa ap funciona e que ela cadastra usuários né ou seja o teste funcional tá ok a partir de agora nós vamos para os testes não funcionais e é aí que o k6 vai fazer sentido nesse treinamento e aí o que que nós vamos fazer vamos clicar aqui no menu superior em documentation clicando aqui nós teremos acesso à documentação do k6 vamos clicar em installation vamos clicar aqui nesse menu
lateral onde nós temos eh a documentação que ensina a Fazer a instalação da ferramenta beleza olha só que bacana se você tiver usando Linux com o bunto você executa esses comandos aqui para fazer a instalação caso você esteja usando Fedora ou centos que são derivados do Head Hat você vai executar esses comandos aqui caso você esteja usando Mac você faz a instalação do Home brew que é um gerenciador de pacotes do Mac feito pela comunidade e em seguida instala através do brew install k6 fechou agora se você estiver Usando Windows que é o meu caso
nós temos aqui algumas alternativas bem interessantes né Nós temos aqui a instalação via chocolate que é um gerenciador de pacotes do Windows muito famoso e que eu recomendo você estudar e explorar a ferramenta ok também podemos usar o winget que é um outro gerenciador de pacotes do Windows feito pela comunidade também e que por sinal é bem bacana mas eu Eu particularmente prefiro o choco tá ou então fazer uma instalação Alternativa que é a o download do Instalador oficial a última versão do Instalador oficial Ok bom você deve ter percebido aqui que em nenhum dos
sistemas operacionais nós temos uma opção de instalar o k6 via npm npm install k6 porque o k6 não é feito em node o k6 usa a sintaxe do JavaScript para criar ar os testes porém ele não é feito em node ele é feito em golang a sintaxe do JavaScript foi uma opção dos desenvolvedores e que por sinal eu acho Que foi super acertada tá então que fique bem claro que o k6 não roda na plataforma node Ah mas então por que que nós instalamos o node em aulas anteriores porque a nossa api Alvo do nosso
treinamento foi feito em node a api sim roda em node mas o k6 não precisa do node para funcionar Tá bom e nesse caso aqui no meu caso eu vou recomendar a instalação através do pacote oficial que é super simples next next finish instala a ferramenta então Eu vou clicar aqui embaixo ó no official installer já fez o download aqui bonitinho ó é o arquivo MSI Vamos abrir esse executável E aí o que nós teremos aqui é um passo a passo né olha só que bacana um setup Wizard né eu vou clicar em next vou
aceitar os termos de uso vou clicar em next mais uma vez diretório de destino pãozão next mais uma vez install vai pedir permissão de administrador eu vou dar essa permissão e pronto já temos O k6 instalado super simples mesmo bacana Bom agora vou clicar em finish e vou testar a instalação do k6 então aqui no terminal ó na segunda aba eu vou digitar k6 menos menos version não deu nada que que o Bash falou aqui ó que o comando k6 não foi encontrado por quê Porque eu já estava com o terminal aberto antes da instalação
do k6 e no Windows nós temos essa particularidade né eu preciso fechar o programa e abr El de novo para carregar as novas Configurações onde o sistema operacional tem acesso ao k6 e e dá o acesso pra ferramenta beleza pro software que no caso é o terminal tá então tudo bem eu vou fazer o seguinte ó eu vou fechar terminal vai desligar api não tem problema vou abrir o terminal de novo perfeito na primeira aba eu já vou acessar aqui ó a pastinha do curso e a pastinha da api já vou deixar api no ar
de novo né porque a gente vai usar ela daqui a pouco vou abrir uma segunda aba E nessa segunda aba eu vou voltar pra pasta do projeto ó C aqui Academy curso 6 básico agora eu vou digitar k6 menos menos Version para testar a instalação do k6 na verdade não é menos menos version é só menos V tá k6 Men v e olha só que bacana ele traz aqui pra gente o c né a cli do k6 O que diz pra gente que o k6 realmente está instalado e funcionando bonitinho tá mais uma vez o
k6 não é node ele foi feito em golang e o usa a sintaxe do JavaScript para criar Os testes isso quer dizer que não dá para importar um pacote node no script k6 não dá para fazer isso tá k6 não é node beleza JavaScript é só uma sintaxe no universo do k6 agora nós vamos voltar pra documentação do k6 e aqui no menu lateral nós temos essa opção aqui ó Running k6 clicando aqui nós temos uma documentação mostrando como usar a ferramenta esse aqui é um código básico mas é um código onde a gente já
entende um pouco ah da sintaxe do k6 que no caso É o próprio JavaScript a gente importa aqui o módulo http Aqui estamos importando o módulo slip e aqui a gente cria uma função que vai significar um teste né Essa função representa o teste o que que esse teste vai fazer ele vai executar uma requisição get na URL do do k6 teste. k6.io não RL de teste do k6 e depois ele vai aguardar por um segundo através do slip né curiosidade isso aqui não é teste funcional tá então os slips vão fazer sentido pra gente
porque os Slips dentro desse contexto significam Thinking time que é a simulação de um usuário pensando eu vou entrar mais nesse detalhe mais para frente tá bom o que que eu vou fazer aqui eu vou vir aqui ó no nosso código Vamos abrir o código lá no visual Studio code eu vou limpar a tela aqui no terminal e vou abrir o visual Studio code porque eu tinha fechado né mas não tem problema então aqui ó nós teremos a estrutura do projeto né onde nós temos o arquivo sh Onde a gente fez o primeiro teste preliminar
da api vou até fechar e Aqui nós temos a pasta de testes dentro dessa pasta testes eu vou criar aqui por exemplo um hello.js né k6 JavaScript extensão JS tá bom voltando aqui pra documentação eu vou copiar eu vou copiar esse código do jeito que tá aqui e vou colar aqui no meu script no meu arquivo hello.js tá só que a diferença é que eu vou apontar pra Api api e api que nós estamos testando Alvo do nosso teste eu não vou testar na URL básica do k6 né porque a gente tem que fazer um
teste aqui mais próximo da realidade Beleza então eu não vou fazer muito by thebook aqui não tá embora seja um curso básico eu também vou tentar fugir do by thebook tá então vou passar aqui ó http sem o s né sem o o SSL porque a gente tá rodando local 2 p bar bar local host na porta 3333 Deixa eu só Confirmar a porta 33 33 isso mesmo tá que que acontece quando a gente acessa ao RL pura vamos testar aqui no navegador só para você ver ó quando a gente acessa api somente passando a
RL sem chamar a rota signup ele mostra aqui pra gente ó api user app o nome do aplicativo é api user feita pelo Papito eu e versão 1.2 e é ainda uma versão Beta então isso aqui já tem uma resposta interessante tá então nós estamos passando aqui o endereço da P local e um Slip de 1 segundo eu vou apertar Crol s para salvar vou fechar o teste sh de novo né E aí voltando aqui pra documentação a gente tem o comando fazer a execução do script Olha só k6 Run script.js no noss o arivo
chama hello.js então bem É só a gente mudar o nome do arivo né aqui no termin segundinha vez que eu esteja com AP no ar que que eu vou fazer aqui na segunda aba eu vou entrar na pasta teste testes no plural e vou digitar o comando k6 Run Hello.js teclando Enter o k6 vai executar um teste Olha que da hora vai executar um teste na api users que tá rodando local no meu e no seu computador tá deixa eu diminuir um pouquinho o zoom pro relatório ficar mais fácil pra gente analisar beleza olha só
que da hora então a gente executou aqui o comando k6 Run hello.js ele Ele trouxe aqui um cabeçalho do k6 mostrando a ferramenta em execução bem bonitinho aqui ele tá Falando que a execução foi local e que o script que tá sendo executado é o hello.js output não tem nada ele não gerou nenhum output a nível de arquivo mas ele gerou outputs no terminal e é interessante pra gente analisar né então aqui ele rodou um cenário um cenário e no máximo uma vu que que é vu aqui chama virtual users Se acostume com esse termo
virtual users são os usuários virtuais que ele vai executar aqui fazendo as simulações Então se eu tivesse aqui 10 vus eu teria uma simulação de 10 usuários fazendo chamada get na api simultaneamente para isso que serve o teste de performance bacana E aqui embaixo a gente tem informações bem relevantes a nível ah de métricas da execução desse teste super simples que a gente fez né Nós temos aqui várias métricas legais eu vou deixar aqui embaixo uma tabelinha com a descrição de cada métrica que você tá vendo aqui na Tela tá só que eu vou falar
especialmente de três três não vou falar especialmente de 1 2 3 4 5 6 métricas Tá mas eu vou deixar aqui embaixo um uma tabelinha com a descrição de todas fechou mas vamos lá vamos falar especialmente da métrica data receive Aqui nós temos a quantidade de dados que foi recebido na requisição http Opa volta aqui nós temos a quantidade de bytes que foram recebidos na requisição http que foi implementada no script que No caso são 323 bytes né Isso foi o que o servidor devolveu na requisição get e o que foi enviado pro servidor foram
80 by Beleza então essa requisição get gerou essa quantidade de bytes tanto para enviar quanto para receber e a informação de bytes ela é muito importante porque ela influencia demais na performance tá bom e em seguida uma outra informação que é super importante e que eu olho muito é o http hack duration Aqui nós temos o tempo total da Requisição tanto para enviar quanto para receber os dados que está totalmente conectado com os bytes que foram enviados e recebidos aqui beleza e aí nós temos também iteration que que são as iterations basicamente os cenários no
caso um único cenário que foi uma requisição get né E aí mostra aqui pra gente vus né as virtual users tem aqui mínimo um no máximo um porque nós rodamos um teste apenas com uma única um único usuário virtual beleza eu ia falar Máquina virtual mas não tem nada a ver com máquina virtual vu virtual users usuário virtual que é o que simula a quantidade de usuários simultâneos nos testes de performance beleza as demais métricas eu vou deixar aqui embaixo numa tabelinha para você ler porque fica bem prático bacana Inclusive eu deixo o link com
a documentação oficial para você comparar também fechou bom com isso nós fizemos o nosso primeiro teste usando o k6 é um teste válido para avaliar Performance Claro que não mas interessante pra gente entender como que a ferramenta funciona se a gente abrir aqui a documentação exatamente onde a gente parou olha só legal nós temos aqui ó uma instrução mostrando como que a gente faz para executar com 10 usuários simultâneos Além disso definindo aqui uma duração de a nível de tempo tá eu falei usuários né mas não é usuários usuários beleza Vamos pegar esse comando e
copiar Vou copiar o comando todo e vou colar lá no terminal Lembrando que a api precisa estar em uso tá bom e olha só o que eu vou fazer agora eu vou dar aqui o nome para hello.js senão não vai rodar né E vamos entender o script tá então a gente tá falando pro k6 executar ó estamos falando pro CS executar com 10 virtual users ou seja 10 execuções simultâneas em paralelo ao mesmo tempo 10 requisições get ao mesmo tempo só que esse teste vai durar 30 segundos Então Nós vamos ter 10 usuários fazendo get
na api durante 30 segundos Então não vai ser 10 testes ou 10 requisições vai ser 10 em 30 segundos isso pode variar de acordo com a resposta da aplicação mas o fato é que nós vamos ficar 10 segundos mandando requisição get 10 segundos não 30 segundos mandando requisição get com 10 usuários simultâneos vamos ver o resultado tá então Olha só vamos teclar enter aqui pra gente ver o que que vai acontecer Agora que as coisas começam a ficar interessantes Olha só nós temos 10 usuários ao mesmo tempo mandando requisição get e esse teste vai durar
30 segundos ó tá mandando requisição várias requisições get 10 usuários ao mesmo tempo mandando terminou mais 10 terminou mais 10 terminou mais 10 durante 30 segundos Então nós vamos ter aqui um resultado bem diferente do resultado do teste da aul anterior bem diferente mesmo tá olha só terminou Olha que Bacana já mudamos aqui a quantidade agora nós não temos bytes nós temos kbes porque foram muito mais informações enviadas e muito mais informações recebidas e se a gente olhar o http hack duration olha só que bacana agora nós temos informações mais relevantes né a gente tem
aqui ó a média de 6.94 mos na duração de cada requisição e Olha quantas iterações ocorreram aqui ó iterations 300 iterations isso quer dizer que no total foram enviadas 300 Requisições get praticamente uma requisição por segundo porque nós temos aqui 10 usuários ao mesmo tempo num teste que durou 30 segundos se esse teste tivesse durado eh 10 segundos nós teremos aqui basicamente 100 requisições get o que eu quero que você entenda é que esse teste mandou paraa api 300 requisições get durante 10 segundos Por que 300 porque nós executamos com 10 usuários simultâneos isso é
o ponto chave dessa Aula para você entender né nós fizemos realmente um teste de performance aqui né 10 usuários simultâneos mandando requisição get bacana bom se a gente olhar aqui na questão do duration a gente vê aqui que a média foi de 6.94 msos e tivemos picos de 114 msos tudo menos de meio segundo tá tudo menos de meio segundo as requisições duraram aqui menos de meio segundo Beleza ainda assim a gente teve praticamente uma requisição por segundo À medida que a aplicação e o k6 foi enviando e gerenciando essas requisições tá Aparentemente a api
tá com uma boa perform mas o fato é que nós estamos mandando uma requisição http que não tá fazendo consulta no banco e que não tá processando Basicamente nada assim até que existe um processamento mas um processamento super simples eu vou até fazer o teste manual para você entender eu vou abrir uma nova aba aqui no Navegador e vou acessar local host na rota principal ele traz pra gente aqui as informações da api simples assim então não é um tipo de funcionalidade de digamos assim que tem e eh um nível de processamento pesado né diferente
do cadastro onde a api processa as informações que são enviadas via post salva no banco de dados e dá uma resposta para para quem tá fazendo a requisição né que pode ser um software pode ser um Postman um Insônia ou o Próprio k6 né então o que eu quero que você entenda é que a performance tá muito boa porque nós estamos fazendo um teste básico numa rota que não tem muito processamento porém Será que a performance vai ficar boa quando a gente começar a mandar requisição na rota signup que envia muito mais informações e que
recebe dados uma vez que é processado e persistido no banco de dados esse cadastro aí as coisas começam a ficar mais interessantes não é verdade Se de repente Em algum momento dessas 300 requisições alguma retornou com erro A gente não ficou sabendo porque nós não temos nenhuma validação no nosso código mas nós vamos resolver isso agora Então olha só que legal o que eu vou fazer aqui nessa linha cinco a gente tem a requisição get eu vou guardar essa requisição o resultado dessa requisição na variável na variável não na constante has que é de resposta
né então agora eu tô guardando esse resultado em algum Lugar né e a título de curiosidade no JavaScript você não é obrigado a colocar o ponto e vírgula e eu particularmente não gosto portanto eu vou tirar mas isso aqui é gosto tá então voltando aqui pro nosso código nós temos a constante R que vai capturar o resultado de cada requisição e agora nós vamos fazer a validação usando a função check como que eu uso essa função aqui nós temos a importação do k6 onde a gente pega o objeto slip que é usado Aqui embaixo eu
vou pegar mais um objeto aqui que é o objeto check é através desse objeto que eu consigo fazer validações esse cheque é de checagem tá é como se fosse um assert lá no teste ional automatizado tá então o que que eu vou fazer aqui ó eu vou chamar o check passando o r que é o resultado E aí eu passo uma vírgula abro e fecho parênteses para montar um objeto aqui e teclo enter para criar o bloco em JavaScript dentro desse bloco eu vou Definir a minha expectativa tá a nível de texto mesmo então eu
coloco aqui ó abre e fecha Chaves e coloco assim ó status Should Be 200 o status code deve ser 200 é como se fosse um caso de teste tá E aí eu coloco aqui ó dois pontos e aí eu coloco abre e fecha parênteses para pegar R o objeto R eu posso chamar de R também mas eu vou chamar de R o que que é esse r esse R é o o o parce que vai ser feito através de R então ele vai pegar o resultado de R que vem aqui da Requisição get e vai
mandar pro objeto R aqui tá E aí o que que eu vou fazer em seguida eu vou fazer a validação através de r. status pegando o o a propriedade status de cada requisição e perguntando se é 200 então que 2000 não 200 Então o que eu tenho aqui é um código JavaScript que ao Executar a requisição get em seguida verifica se o status code é 200 só depois ele faz o slip de 1 segundo tá bom e detalhe essa verificação aqui vai Fazer com que todos os 10 os ários simultâneos durante 30 segundos Ou seja
no total 300 requisições 300 testes isso aqui multiplicado por 300 no final tá vai fazer com que todas as esses 300 testes tenham uma verificação para saber se o status code é igual a 200 Agora sim nós temos um teste de performance mais elaborado porque além de mandar as 300 requisições nós vamos verificar se todas elas foram processadas com sucesso e isso é muito Importante pra gente beleza Então vou salvar o script cont control s e vou voltar lá no terminal né ah dá uma olhada Tira uma foto né uma foto é mental mesmo desse
relatório tá olha aqui quantas métricas tem Beleza agora eu vou fazer o seguinte eu vou limpar a tela e rodar mais uma vez com a duração de 30 segundos agora que o nosso script tem a validação né Vamos lá ó tá rodando aqui bonitinho ó 10 usuários simultâneos durante 30 segundos né ele Gera e olha só que interessante 30 segundos 10 usuários simultâneos Por que que dá exatamente 300 porque nós temos o slip então cada vez que ele manda uma requisição ele espera um segundo para ir para próxima então é importante a gente entender que
o slip aqui é fundamental para que tenhamos esse resultado de 300 tá olha só beleza terminou Qual que é a diferença desse relatório pro relatório anterior agora nós ganhamos mais uma métrica que é o checks que por sinal foi Processado 100% com o sucesso todas as 300 requisições que foram feitas aqui retornaram 200 100% de sucesso para todas as requisições isso aqui é muito legal Só que mais uma vez nós estamos testando uma requisição simples que retorna basicamente eh um status quo de 200 e um e um Jason super simples não tem um processamento pesado
então a performance tá aceitável né e mais um detalhe agora a gente tem aqui um check ó que é um cenário que foi validado é um Um Digamos que é um step que foi validado mediante ao script que foi executado tá nós temos aqui um cheque ó para todas as requisições né que no caso são 300 tivemos aqui o status code 200 garantindo que a api tá com uma boa performance e que tá funcionando com essas requisições simultâneas O que é muito legal beleza Bom agora eu vou fazer o seguinte tá olha só que curioso
agora o que eu vou fazer aqui é tipo é é como se fosse um ataque ddos né um Ataque realmente eu tô vou simular um ataque eu vou simplesmente comentar o slip comentando o slip esse script vai arrebentar a p ele vai mandar muita requisição ele não vai ter o fen time de 1 segundo que é simular o usuário pensando alguma coisa desse tipo ele vai arrebentar ele vai arregaçar a api ele vai mandar muitas requisições serão 10 usuários simultâneos mas mas mandando muitas requisições sem ter o time de 1 segundo tipo manda em vários
Milisegundos vai arregaçar vamos ver o que que vai acontecer ele vai arrebentar apis disso você pode ter certeza tá agora vamos rodar agora não tem o slip Então vai mandar muito mais do que 300 requisições ó tá tá processando aqui ó meu vai mandar o valor que ele vai mandar de de iterações de iterations é absurdamente maior do que 300 requisições ele vai realmente arrebentar com a api tá deixa eu até clicar aqui na Outra aba para ver se a pi não caiu ainda ou se ela vai aguentar esse nível de processamento tá olha só
finalizou 100% de é é checagem de status cod 200 mas olha quantas iterations foram mandadas Olha quantas requisições get foram enviadas pra api 57.23 a gente arregaçou a api a gente destruiu a api e ainda assim a api processou todas essas 57.000 com sucesso retornando 200 Caramba então esse Dev Que fez essa api é o monstro do desolver né porque a gente arregaçou aqui fez uma praticamente um ataque né e ainda assim processou com um sucesso vamos levar em consideração o seguinte ponto de vista a gente tá rodando local dentro da mesma rede dentro do
mesmo computador né a PIS in node tem uma boa performance e ainda assim a gente tá testando uma rota que não tem um nível de processamento pesado basicamente só devolve uma informação e não processa nada dentro do do do Próprio códo código da pi por isso que tá indo bem isso provavelmente não deve ocorrer quando a gente for pros testes de cadastro mas é importante você entender esse ponto de vista tá então quer dizer que a gente deve fazer teste de performance sem o slip honestamente não tá eu acho que o slip ele é importante
porque no mundo real quando a gente tem uma aplicação rodando no mundo real a gente não tem eh um ataque né assim pode acontecer um ataque de hacker Que é mais ou menos isso que você viu aqui tá Tá mas isso não é um um comportamento natural no ambiente de produção que a gente tem Realmente são usuários simultâneos acessando lendo o conteúdo numa página numa aplicação mobile e e e e e interagindo com a aplicação sem ser uma máquina real entrando com um monte de informação tá E então é importante a gente entender esse ponto
de vista os slips são fundamentais para que tenhamos o Thinking time tá bom E por fim aprendemos aqui a fazer validações através da função check do k6 para ganhar tempo eu vou pegar o arquivo Hello e vou copiar e colar dentro da pasta testes E aí o visual Studio code vai gerar o arquivo Hello copy né eu vou pegar o Hello copy vou clicar com o botão direito do mouse rename e Vou definir o seguinte nome signup JS agora eu posso fechar o Hello para não dar confusão e temos aqui um novo arquivo com uma
estrutura básica Beleza beleza Bom primeiramente eu vou criar aqui em cima ó uma constante que vai ter o nome URL e essa constante vai receber o seguinte valor http dois pontos bar Barra local host host na porta 33 33 com a Rota signup deixa eu escrever direito né signup perfeito então nós já temos aqui a constante que representa a URL da api com a Rota que vai ser testada beleza bom agora aqui ó invés de get eu vou mandar um post E aí eu passo aqui a URL só que eu tenho mais Informações que precisam
ser enviadas aqui não somente a URL E aí o que que eu faço logo depois da Constante URL eu vou criar a massa de teste então eu vou criar a constante payload que é a carga que representa a carga de solicitação os dados que serão enviados para Api para que tenhamos o cadastro de usuário tá então a constante payload vai receber o seguinte valor Jason P string fy isso aqui é um recurso nativo do JavaScript Jason é o módulo nativo do JavaScript e String fy é uma função desse módulo nativo Jason que que isso aqui
faz transforma um objeto Jason em uma string mantendo o seu formato a sua representação E aí o que que eu vou colocar dentro de parente um objeto Jason dentro de Chaves que vai ser o seguinte eil com o valor por exemplo Papito Papito @ iu.com né E a senha ví password com o valor pw1 23 como eu uso de costume em Vários treinamentos né só que a linha ficou muito grande né só que assim a linha aqui tá muito grande e eu preciso fazer um scroll Eita porque o meu visual Studio code tem um zoom
muito grande para ficar bom aqui na videoaula provavelmente no seu computador não ficou grande Ainda assim eu vou fazer o seguinte eu vou teclar enter aqui ó antes das chaves e depois das chaves com isso fica mais fácil para fazer a leitura e com a sintaxe correta tanto é Que eu vou clicar com o botão direito do mouse e vou escolher opção Format document para você ver que tá tudo certinho beleza E com isso eu tenho aqui a massa de teste que vai ser usada para fazer o cadastro através da api E aí o que
que eu vou fazer logo depois da URL aqui no post eu passo o payload né E aí Por garantia que que nós vamos fazer aqui nós vamos criar mais um objeto que vai ser muito interessante pra gente que é o headers no plural é o cabeçalho Então vai ficar assim headers é igual a abre e fecha Chaves porque aqui eu vou criar um objeto tá E aí eu vou criar aqui ó a chave headers também dentro de eh é string dentro de aspas simples para definir como string abre e fecha ou melhor dois pontos abre
e fecha Chaves e aqui dentro de headers que é tipo como se fosse um sub objeto eu vou colocar o seguinte ó content traço Type dois pontos application barjon perfeito com isso eu Tenho cabeçário da requisição eu vou mandar pra api O payload que é a massa de teste que eu quero cadastrar só que além disso eu também vou mandar no cabeçário da requisição as informações é qual que é o tipo de conteúdo que eu tô tratando Qual que é o tipo de conteúdo que eu espero como devolutivo tá que é o content Type application
json com isso eu tenho aqui uma estrutura básica para trabalhar com cadastro de usuário no k6 né e consumindo api beleza olha só que Interessante Vou salvar esse arquivo pra gente não perder o código e vou voltar aqui pro teste sh Aqui nós temos um um post exatamente igual ao post que a gente faz aqui no JavaScript A diferença é que no sh a gente tá usando cur né a gente tá usando aqui uma outra sintaxe e aqui no signup a gente tá usando a sintaxe do JavaScript é adaptada pro k6 né mas ambos terão
o mesmo efeito é claro que no teste.sh a gente manda uma requisição Única já no signup do k6 a gente pode simular aqui vários usuários simultâneos duração entre outras coisas que nós vamos ver mais para frente beleza show de bola né E aí o que que nós vamos fazer agora executar o teste mas antes disso é importante a gente entender só mais um pontinho aqui tá esse teste também pega o resultado guarda in e também verifi status code tá isso aqui é muito importante pra gente essa validação beleza bom Guarda essa Informação que que eu
vou fazer agora eu vou salvar o arquivo aqui garantir que o arquivo Tá salvo né porque já tava E aí eu vou voltar lá no terminal eu vou limpar a tela E aí se eu digitar LS agora eu vejo que tem o arquivo Hello e o arquivo sign up.js tá que que eu vou fazer aqui ó eu vou rodar o k6 por 30 segundos com 10 usuários simultâneos apontando para signup.com vai subir é 10 trads 10 usuários simultâneos por segundo mandando Requisição post pra api por 30 segundos tá Por que que eu tô dando um
time e tô explicando isso aqui para você porque se a gente voltar pro script veja que a nossa massa de teste é única então já que eu tenho uma massa de teste única e fixa o que provavelmente deve acontecer Ou talvez não é que tenhamos aqui 300 usuários cadastrados não é isso que vai acontecer vai mandar 300 post nós nós estamos aqui com o slip habilitado estamos passando Aqui como parâmetro 10 virtual users rodando por 30 segundos então a gente já entendeu que matematicamente falando vão ser feita 300 iterações Teoricamente 300 cadastros agora será que
isso realmente vai acontecer vamos testar aqui pra gente ver o resultado ó enter e olha só começou tá testando né já passou aqui 5 segundos 6 7 Segundos 8 9 segundos já rodou aqui um pouco mais de 100 cenários né de 100 requisições Post e tá testando né tá testando aqui bonitinho o c está mandando ver né vamos ver o resultado desse trosso aqui acabando acabou Olha só tivemos aqui nem foi 300 tá porque o fato de ser 300 lá no teste de get apontando pra rota básica é é realmente dava 300 porque era uma
rota mais simples onde o resultado era mais rápido aqui nós já estamos testando post que tem processamento persiste dados no banco e faz validações Então não deu 300 deu 278 iterações Mas tá tudo certo beleza tá tudo certo aqui ó 10 virtual users bonitinho agora vamos subir aqui em cima pra gente ver o que que aconteceu deixa só diminuir um pouquinho o zoom pro relatório ficar alinhadinho né isso agora ficou bonito né olha só deu erro de todas as requisições todas falharam todas as requisições foram executadas com falha então ele fez o Teste na api
mand da requisição po mas tudo falhou tudo falhou as 278 iterações falharam ou seja nenhuma retornou 200 Por que que isso aconteceu vamos descobrir então a gente faz o seguinte ó eu venho aqui antes do check antes da verificação eu vou colocar um console.log has tá Opa h. Body vamos pegar aqui o corpo da aquisição que provavelmente Traz a resposta e e vamos ver o que que ele trouxe tá que o status code é diferente de 200 a gente já sabe né mas vamos ver aqui o que que ele trouxe na resposta Ah no formato
Jason só pra gente entender o que que tá acontecendo E aí obviamente que eu não vou fazer mais um teste deixa eu dar um um Clear aqui ó deixa eu limpar a tela obviamente que eu não vou fazer um teste de eh 30 segundos dessa vez eu vou fazer um teste mais simples porque eu quero entender o Que que tá retornando Então eu só coloco aqui ó k6 Run signup para V dar uma única máquina virtual uma única interação e super rápido tá só pra gente pegar o problema Olha só o problema aqui ó olha
só o problema duplicate e-mail então o e-mail está duplicado por quê Porque essa massa de teste já foi usada anteriormente beleza ó e-mail duplicado né isso aqui é um teste performance só que a nossa api tem regra de negócio e a gente tem que Adaptar o nosso teste performance para atender algumas regras de negócio Ah mas o teste de performance é um teste não funcional Sim concordo ele é um teste não funcional mas é um teste para validar um software que tem funcionalidades Então embora tenhamos requisitos não funcionais é importante a gente entender que a
aplicação tem funcionalidade e eu não posso desligar essa regra de negócio para fazer um teste performance beleza inclusive deves Já falaram para mim vamos desligar as regras de negócio e aí você foca na perform assim não porque no mundo real as regras de negócio estão ligadas e nós temos no mundo real um software com vários usuários acessando no mundo inteiro Então eu tenho que me adaptar para atender a regra de negócio para poder fazer o teste não funcional que é o teste performance é claro que não é aqui que eu vou validar e-mail duplicado é
lá no teste funcional mas eu tenho que Me adaptar com essa regra para fazer o teste de performance que é o não funcional acho que deu para entender né então beleza que que eu vou fazer aqui eu eu vou fazer a solução vai ser bem simples A princípio né eu vou fazer o seguinte eu vou acessar o banco de dados que é o mongo Deb Vamos acessar o banco né por isso que é importante no treinamento eu trazer um software real tá vamos lá Se eu tivesse Pego aqui e e e criado esse curso para
você testar o Teste. k6.io meu ia ficar show você não ia passar por esse problema só que na sua empresa quando você fosse colocar o test para rodar você ia passar por essa dificuldade e a documentação do vocês não vai trazer de uma forma tão Clara é uma solução para resolver esse tipo de problema isso é experiência né por isso que é importante aqui na k Academy a gente construir treinamentos usando aplicação própria porque isso proporciona uma melhor experiência pro Aluno beleza para você né então vamos lá eu vou clicar aqui em start free mesmo
sabendo que eu já tenho conta só para ele ir pra página de cadastro e aí aqui embaixo a gente tem o link para fazer o login né E aí a gente vai pra página de login inclusive é até interessante deixar no favoritos né a página de login para facilitar o acesso né Vamos lá eu vou logar aqui Papito não Papito não acho que é Fernando @q academy.io né Depois eu vou Colocar aqui minha senha Espero que esteja certa porque às vezes eu confundo dessa vez eu confundi Então vou tentar mais uma vez acho que agora
vai hein tá demorando um pouquinho é porque talvez foi né Beleza deu tudo certo e aí ele vai entrar no dashboard do banco a gente acessa o cluster e do banco de dados da nossa pi E aí nós vamos resolver de forma simples né para dizer o mínimo Olha só user api k6 perfeito Vou clicar aqui em brows collections e basicamente o que eu vou fazer é dar um drop no banco tá vou vir aqui ó users temos aqui ó dois usuários que foram agora eu fiquei Pô fiquei na dúvida ah não o papito yaru
tá aqui perfeito achei que eu não tava achando aqui o usuário Falei pô deu duplicado de e-mail duplicado e o usuário não tá aqui tá aqui já tinha sido cadastrado anteriormente Então tá tudo certo o que que eu vou fazer eu vou dropar a Collection eu posso eu posso dropar o banco ou a Collection tanto faz tá no caso aqui eu vou dropar só a Collection que já tá bom demais eu confirmo o nome da Collection da coleção clico em drop E aí Zerou o banco né perfeito agora esse usuário não existe mais no ambiente
né que que eu vou fazer aqui eu vou vir aqui ó no terminal vou limpar a tela e antes de qualquer coisa já limpei a tela aqui mas antes de rodar o k6 eu preciso voltar aqui na aba onde nós temos api Rodando eu preciso tirar a api do ar comtrol c e colocar a api no ar de novo por quê Porque esse procedimento vai recriar a estrutura de dados com base nas implementações da api incluindo as definições de banco de dados isso é muito importante tanto é que voltando aqui ó pro pro mongo DB
eu vou dar um refresh E aí a gente tem ó a coleção criada a coleção criada sem nenhuma informação e isso é fundamental porque é a aplicação que define a estrutura de Dados com as suas devidas configurações se eu não fizer isso eu vou cometer um erro grave é é na aplicação então toda vez que eu limpar uma coleção eu preciso tirar a aplicação do ar e colocar de novo pra aplicação criar a coleção com as suas devidas configurações beleza agora sim eu volto aqui no terminal Onde nós estamos rodando o teste e aí eu
vou fazer o seguinte k6 Run signup eu vou rodar uma única iteração com um único usuário virtual tá Teclando enter vamos ver o que que vai acontecer o teste deve funcionar essa é a ideia né ó deu para ver que cadastrou porque ele trouxe aqui pra gente ó o resultado que tá no console.log que foi implementado agora pouco né então a gente viu aqui que o e-mail é o e-mail da massa e esse aqui é o ID do usuário lá no banco de dados né só que tá falhando né tá falhando no status code porque
na verdade quando a gente cadastra um novo usuário na pi o status Code não é 200 é 201 que é sucesso porém alguma coisa foi criada no servidor então tudo bem que que eu vou fazer aqui ó eu vou vir aqui no código no nosso teste e vou mudar o status code para 201 que é o status code correto tá bom Ó s para salvar vamos rodar o teste mais uma vez Lembrando que eu não fiz nenhuma limpeza no banco né E olha só o que acontece ele retorna duplicate mail tá certo n porque o
usuário já existe lá no banco então eu vou fazer todo o processo De novo ó eu vou clicar em refresh vou limpar a coleção Vou apagar a coleção inteira Vou dropar a coleção inteira não existe mais e aí eu volto no terminal na primeira aba tiro o Api do ar coloco o Api no ar de novo para recriar a estrutura de dados volto aqui no teste limpo a tela e rodo o k6 com uma única interação agora vai dar sucesso e vai validar o status code 201 perfeitamente tá Olha que bonitinho 201 filé né agora
testou bonito bacana bom Se eu tentar rodar de novo é óbvio que o que vai acontecer é duplicate e-mail por quê Porque eu só posso ter um único e-mail é um único usuário Com um único e-mail né é o e-mail é uma chave única beleza Fechou então vamos fazer o seguinte olha só que bacana eu vou dar um refresh e vou fazer todo o processo de novo eu tô fazendo e refazendo para ficar muito claro Qual que é o objetivo aqui tá vou apagar a Collection apago a Collection no banco Perfeito volto no terminal primeira
aba tiro o Api do ar coloco api no ar para recriar a estrutura de dados e agora eu venho aqui ó e executo o k6 com 10 virtual users 30 segundos de duração que que vai acontecer agora vamos ver enter eu só posso ter um único usuário com o mesmo e-mail olha só que bacana esse resultado que tá retornando aqui pra gente deu para ver que a regra de negócio funciona né mesmo a gente fazendo um teste de performance que é um Teste não funcional e a regra de negócio ela se aplica a um teste
funcional E aí E agora como é que a gente resolve o problema vamos lá vamos esperar terminar aqui olha só que bacana quantas iterações foram executadas nesse teste performance 8 interações Ah mas por que que não foi 300 porque essas requisições duraram mais de 1 segundo né ele só vai multiplicar a quantidade de virtual users pelo tempo e trazer 300 que no Caso é 30 segundos com 10 virtual users só vai dar 300 se cada interação Demorar pelo menos um segundo só que aqui como são interações testando uma rota que tem um processamento maior muitas
passaram de 1 segundo por isso que deu 288 Mas tá tudo certo Tá tudo perfeito aqui beleza agora o mais interessante é que de todas essas requisições só uma passou Então esse teste é válido Com certeza super válido ó estamos garantindo qualidade então a regra de Negócio é atendida beleza isso aqui não é o teste funcional Quem garante a duplicidade o teste de duplicidade é o teste funcional que pode ser feito com Cypress com super teste e ou com qualquer outra tecnologia beleza mas aqui no k6 pelo menos na questão de performance a gente entende
e garante que só vai rodar um único usuário mesmo que a gente mande essas requisições e simultâneas por diversas vezes né o fato é que a pi tá trabalhando bem isso é um Bom sinal tá só cadastrou um único carinha um único Papito @gmail e o resto tudo retornou duplicado Ah mas eu gostaria de fazer um teste de performance para cadastrar vários usuários porque essa também é a ideia não é verdade eu quero cadastrar Sim esse também é um teste válido só que a gente tem que levar em consideração a regra de negócio que a
p tem E aí qual que é o caminho eu desligo essa regra de negócio e cadastro vários papitos @o.com acho que talvez não seja a melhor solução porque em produção a gente não desliga a regra de negócio quando vários usuários estão consumindo o nosso software não é verdade então eu preciso de 300 e-mails distintos para ter aqui um cadastro real mais próximo do real e para simular um um teste de performance no cadastro propriamente dito beleza essa é a ideia né só que a massa de teste está fixa que que eu vou fazer aqui vou
gerar uma massa de teste com 300 e-mails e distribuir na carga bom essa é uma opção interessante porém eu tenho uma solução mais prática e dinâmica que vai servir pra quantidade de virtual users que você desejar aí que está o pulo do gato Então vamos lá eu vou abrir aqui a documentação do Cis e aqui ó no campinho de busca eu vou buscar por uu ID isso aqui que que é u ID é um módulo que faz geração de identificador dinâmico quando a gente faz essa busca ele traz aqui essas duas Primeiras opções uuid v4
e generate uu ids Beleza vou falar ids a invés de ID Tá bom vamos clicar nessa primeira opção Só por curiosidade Tá clicando aqui ele traz pra gente o módulo uu ID tá esse módulo aqui é um módulo JavaScript que gera o identificador dinâmico pra gente a gente pode usar informação desse identificador para formatar um e-mail um e-mail fictício pra gente tá a gente pode construir isso e na verdade é isso que nós vamos fazer Porém esse módulo Aqui do jeito que você tá vendo esse código talvez não seja a melhor solução pra gente talvez
não na real não é a melhor solução e eu vou te explicar o porquê Porque se eu importar isso aqui no nosso código veja que nós estamos pegando o modo que vem da internet Ó JS libica 6.io E aí a gente vai ter o quê uma dependência de uma conexão com a internet no nosso teste de performance isso pode onerar a performance A ideia é a gente construir um identificador Dinâmico que não tenha nenhuma conexão externa para que tenhamos realmente conexões somente no software que está sendo testado que no caso é a nossa ap Então
essa solução realmente não dá mas é interessante a gente conhecer Beleza então vou o seguinte eu vou voltar aqui em cima pro Campinho de busca e vamos buscar pelo termo uu ID de novo e aí eu vou clicar aqui ó em generate uuids clicando Aqui nós temos uma documentação que mostra como a gente pode extrair o Módulo uuid e deixar ele interno dentro do nosso projeto por quê Porque esse módulo é node E como eu venho falando o c não trabalha com node ele não funciona na plataforma node Só que os módulos node na sua
A grande maioria são feitos em JavaScript por isso a gente pode usar isso como benefício para extrair esse módulo para um JavaScript simples e usar dentro do nosso projeto já que o k6 não roda em node Beleza então vamos fazer o seguinte a primeira coisa que eu vou Executar Esse comando aqui que vai fazer a instalação do módulo uu ID para node beleza mas nós não vamos usar o node Então vamos lá eu vou copiar esse comando desculpa que eu fiquei um pouco roco aqui vamos lá eu vou copiar esse comando vou abrir o terminal
e aqui mesmo na pastinha testes eu vou digitar npn install o ID tá é um comando de de instalação de pacote node nós vamos instalar um pacote node mas depois a gente tira isso tá olha só que bonitinho Instalamos aqui o pacote node agora perceba que no visual Studio code nós temos aqui a pasta node modules por quê Porque eu instalei um pacote node tá bom só que é aquilo que eu falo mais uma vez né eu vou falar isso por várias vezes por diversas vezes para ficar muito claro para você não adianta eu tentar
importar o pacote node aqui no nosso script não vai rolar tá então o que que a gente faz a gente segue aqui a documentação ó o browserify é o módulo Que consegue exportar o módulo node e transformar ele em JavaScript puro então eu vou copiar esse comando e vou colar aqui ó browserif só que ele vai falar ó o não existe né Por porque é um outro módulo node não existe então vou instalar que que eu vou digitar aqui ó npm install browser vamos instalar esse módulo que é o módulo que pega um código node
puro e Transforma ele no JavaScript puro tá é isso Beleza bom vamos esperar a instalação ele vai instalar isso na pasta node modules do nosso projetinho de teste aqui tá Isso é fato vai instalar bonitinho Olha só mais um pouquinho esse aqui é um pouco mais maior né tem ele ocupa mais espaço mas por isso que tá demorando mas não tem problema importante é instalar ó instalou bonitinho agora nós vamos Executar o comando de novo browser e faz só que que que eu vou colocar aqui eu vou acrescentar no começo npx tá porque eu instalei
ele local na pasta testes tá bom e o npx é para rodar o módulo node local do projeto teclando em ele vai fazer a geração desse arquivo aqui ó o ID Tá eu vou explicar para você de novo o browserify é um módulo que pegou o código node do módulo o id e transformou num código simples em JavaScript tá é isso que ele fez ele fez aqui uma Portabilidade bacana fechou que que eu vou fazer agora eu vou vir aqui ó no visual Studio code e agora eu posso apagar a pasta node modules sem medo
ó V apagar ela se o Windows deixar né porque às vezes o Windows não deixa bom nesse caso deixou tá apagou bonitinho vou apagar esse arquivo package Lock Jason que é coisa de node e vou apagar o package Jason que também é coisa de node E com isso nós ganhamos esse arquiv aqui ó Uuid.js perfeito beleza aqui dentro da pasta testes eu vou clicar com o botão direito do mouse New Folder e vou criar a pasta libs no plural porque isso aqui não deixa de ser uma biblioteca tá esse o ID então eu vou jogar
dentro de libs para separar né a gente tem testes e tem libs Então veja que nós estamos construindo aqui uma arquitetura de teste beleza bom veja que esse código ID é bem monstrão mas a gente não vai mexer nesse Código deixa do jeito que tá nem se preocupa com esse código vamos fechar até para não gerar confusão e pra gente não estragar o código tá beleza o código tá aqui bonitinho na pasta libs Agora sim a gente consegue importar esse módulo nativo em JavaScript e usar ele dentro do k6 bom agora que nós temos o
módulo dentro da pasta libs bonitinho olha só que legal que eu vou fazer aqui em cima eu vou importar o arquivo ó Import o ID vai ser o nome do objeto From aspas simples pon pon barra pon pon barra não ponto barra só um pontinho libs barra uu ID eu estou importando esse módulo JavaScript Beleza agora o que que a gente faz com isso olha só que legal eu vou vir aqui ó e vou fazer uma interpolação de string eu vou pegar o papitu e vou trocar as aspas simples por apóstrofo beleza por que apóstrofo
para eu conseguir fazer a interpolação e ao invés de Papito eu vou mudar por dólar abre e fecha Chaves e aqui eu coloco um Código JavaScript uuid v4 v4 é a função v4 abre e fecha parênteses tá porque é uma função é a função que vai gerar um identificador dinâmico e com isso eu tenho um e-mail dinâmico para cada iteração isso é muito legal tá a senha pode ser padrão mesmo beleza e aí eu vou fazer mais um ajuste invés de usar yahoo.com eu vou usar um domínio Isso é uma técnica que eu uso nos
meus testes de performance Tá eu vou usar um domínio Específico e único no ambiente de teste para eu poder remover depois esses usuários porque são apenas para teste de performance eu não quero deixar o meu ambiente de teste sujo então eu coloco mais ou menos assim ó Ka pon nome da empresa vou colocar aqui k Academy ó k Academy que é o nome da empresa pontocom.br olha só que bacana né Você pode colocar A nomenclatura que você quiser o mais interessante é que você Construa um domínio que seja único no Seu ambiente de teste para
você saber quais foram as entradas que vieram através do os testes de performance Essa é a ideia tá beleza bom o que que eu vou fazer aqui eu vou apertar CRL s para salvar e agora nós temos aqui um payload que gera e-mail diferente para cada iteração tá para cada nova requisição Vamos testar para ver se funciona então vou vir aqui no terminal vamos pegar aqui o histórico da última execução do k6 Ó k6 Run menos menos views 10 Duration 30 segundos signup PJS teclando enter vamos ver o resultado e deu ruim né ele falou
aqui que não conseguiu encontrar o módulo porque tá faltando a extensão isso aqui não é node né então tenho que colocar ponto JS senão não vai funcionar mesmo tá foi mal vamos testar de novo e acho que agora vai dar bom ó tá testando isso é um bom sinal tá e nós temos o console log então ele tá gerando aqui a os tá executando os testes de performance e também tá e eh eh Colocando aqui o resultado tá tem problema é interessante a gente ter deixado porque a gente vê que ele tá criando e-mail aos
dinâmicos mesmo ó para cada rodada é o novo e-mail é um e-mail diferente né que é o identificador é um guide a gente pode chamar isso de guide ou de identificador vamos chamar de identificador tá é o identificador único @k.k academy.com.br e olha só todos os testes passaram e nessa rodada quantas quantos cadastros Foram criados 100 cadastros tivemos aqui sem iterações olha só que da hora sem iterações sem cadastros né através desse modelo de e-mail aqui ó identificador monstrão @k.k academy.com.br Olha que bacana temos agora dados dinâmicos se a gente for lá no banco de
dados olha só que legal agora nós teremos aqui vários usuários deixa eu logar de novo né porque eu perdi a sessão mas não tem problema Agora senha tá salva tá mais fácil né Vamos logar no banco pra gente ver realmente os cadastros chegando lá que é muito bacana né Vamos lá ó eh beleza ó entrou collections já veio direto para collections o que é bom né que ele pegou a última sessão e olha só olha quantos cadastros nós temos aqui ó com e-mails dinâmicos Agora sim nós temos um teste de performance bacana porque realmente tá
cadastrando usuários distintos cada virtual user tem a sua Própria massa de teste única né bom olha só que legal o e-mail ficou monstrão né ó e-mail monstrão @k.k academy.com.br né Beleza tem um ponto aqui que me incomoda é o fato do e-mail estar monstrão tá muito grande isso aqui me incomoda um pouco não é um problema pro teste de performance porque o formato do email está correto não tem problema nenhum tá só que visualmente não me agrada tanto tá eu olho isso aqui e falo Ah meu tá meio grande não curti Não então dá para
dar uma melhorada que que a gente pode fazer olha só que legal eu vou copiar aqui o e-mail que foi gerado de qualquer teste mesmo tá vou copiar o valor e vou colocar aqui no nosso código só como base pra gente entender a estrutura Beleza eu vou tirar o @q academi qk academy.com.br Vou tirar isso e vou deixar somente o identificador selecionando tudo o visual Studio code conta pra gente quantas posições ele tem ó olha só tem 36 Posições 36 caracteres contando com os tracinhos então nós temos o identificador de 36 caracteres tá o que
eu quero aqui é somente o último conjunto de caracter somente esse último conjunto então se eu pegar do primeiro até o tracinho antes do último conjunto eu tenho aqui ó 24 posições beleza 24 posições por que que eu tô fazendo essa continha porque olha só que legal que eu vou fazer aqui na função v4 eu vou fazer o seguinte eu Vou chamar uma função Nativa do JavaScript que é a função substring e vou falar para ele cortar os primeiros 24 caracteres fazendo com que eu tenha somente o último bloco e ainda assim eu vou ter
dados dinâmicos e únicos na criação dessa massa tá cont control s para salvar e aí eu vou vir aqui no banco e vou fazer o seguinte eu vou apagar a coleção que é como se fosse uma tabela tá é que o banco de dados é não relacional Collection é como se fosse Uma tabela eu vou apagar Collection users vou dropar porque eu apaguei vou apagar os usuários que eu acabei de gerar através do teste performance isso para limpar o ambiente beleza e aí voltando aqui ó pra aba da aplicação eu vou tirar a aplicação do
ar coloco a aplicação no ar de novo para para recriar a estrutura de dados e agora eu vou rodar mais uma vez os testes de performance como nós temos o console P log o script vai trazer pra gente e Todas as massas que estão sendo criadas durante a execução e nós já estamos vendo aqui que agora ele tá montando e-mail somente com o último bloco do id dinâmico O que é interessante porque agora nós temos o e-mail um pouquinho mais enxuto é num formato um pouco mais fácil até pra gente fazer análise e tudo mais
né e agora faltam aqui ã 20 5 segundos né Para terminar 3 segundos 2 segundos e terminou os testes executou com sucesso só que tem uma informação Aqui que é bem curiosa olha só que interessante foram feitas nessa execução 90 iterations provavelmente foram cadastrados 90 usuários com 10 virtual users simultâneos durante 30 segundos Mas por que que o resultado agora foi 90 sinais opção anterior foi 100 temos que levar em consideração que a nossa pe mesmo estando local e testando local aponta para um banco de dados que está na nuvem e a conexão com a
internet influencia na quantidade de Iterações inclusive na no response time né na na resposta de cada requisição no tempo de cada requisição Se você olhar aqui no http duration veja aqui ó que nós tivemos uma média de dois 39 segundos para cada requisição e um mínimo de 2.02 segundos e um máximo de 4.8 segundos tiveram requisições aqui que demoraram 4.8 quase 5 segundos para dar uma resposta por isso que tivemos 90 interações porque as requisições aqui demoraram um pouco para ter a resposta Para mim passou de 2 segundos já não tá bom tem que ser
até 2 segundos então a perform da api não tá tão boa mesmo levando em consideração que o banco de dados está em um outro no data center não tá local no meu computador está na nuvem mesmo levando isso em consideração Ainda assim eu acho que a performance não tá boa Tá deveria responder em no máximo estourando 2 segundos Isso é uma boa resposta para uma API no ambiente produtivo no ambiente real Mas isso é Algo que a gente vai tratar mais paraa frente tá o que eu quero é que você entenda aqui é a quantidade
de iterations ela é gerada e influenciada por vários fatores né ah mas nos testes que a gente fez com massa de de teste Gu volta ah mas nos testes que a gente fez com massa de teste fixa antes de ter aqui o dinâmico lembra disso a gente teve aqui umas 280 interation na verdade por quê Porque só cadastravam-se Castros com sucesso todos Os e-mails sendo inseridos no banco então a gente tem o quê o maior processamento do software Então tudo isso é levado em consideração tanto é que se a gente for lá na no banco
de dados e dar um refres olha só que interessante nós tivemos realmente ó ó o total de documentos realmente 90 cadastros então assim o teste de performance tá rodando bem o o o o http hack duration que é o response time não tá tão bom Realmente ele não tá bom mas Ainda assim a aplicação tá funcionando e não tá devolvendo nenhum erro o que é interessante pra gente a aplicação não tá tão rápida a api não tá tão rápida porque ter no máximo aqui 4.8 segundos quase 5 segundos é um fator importante pra gente levar
em consideração que não passou no test de performance mas ainda assim todos os usuários foram cadastrados veja que nós executamos o k6 Run que é o comando básico né o comando principal apontando pro script de teste E no meio a gente tem aqui os argumentos o primeiro argumento é o menos menos vus para definir a quantidade de usuários virtuais em seguida menos menos duration para definir e o tempo de execução do teste tá tudo certo não tem nada errado aqui porém a gente pode internalizar esses dois parâmetros ao invés de passar ele na linha de
comando como argumento do comando do k6 a gente pode adicionar isso no Script e e no meu ponto de vista fica mais prático para dar manutenção Então vamos fazer o seguinte eu vou abrir aqui o nosso código signup.com options precisa ser Obrigatoriamente com esse nome tá E aí nós vamos fazer o seguinte essa constante vai ser um objeto JavaScript dentro desse objeto eu vou criar a chave vus onde eu vou passar o valor 10 né que é um inteiro beleza vírgula duration duration que no caso aqui é string então eu coloco aqui ó 30s de
segundos e com isso o meu script fica parametrizado Para sempre ser executado com 10 virtual users durante 30 segundos Ok então vamos apertar contrl s para salvar só que eu acabei de encontrar um probleminha aqui né um probleminha da aula anterior olha só ó o nome do objeto está errado eu coloquei aqui ó uui Não é esse o nome o nome correto é u ID veja que não tem problema ele conseguiu encontrar o objeto e chamar a função v4 né mas o ideal é a gente deixar o nome certinho então vou fazer essa correção tá
é uu e D né E aí eu corrijo aqui para uu e d para ficar tudo certinho alinhado e Bonitinho tá bom beleza agora nós temos a constante options para parametrizada para definir a quantidade de virtual users e a duração do teste tem só mais um ponto aqui que eu errei não é durations no plural é duration no singular ia dar ruim tá cont control s para salvar e agora sim deve estar correto né só executando pra gente ter certeza Então vou voltar aqui pro Terminal e agora eu vou executar o comando mais simples que
é C6 Run e passando aqui o arquivo signup JS né enter e vamos ver o resultado ó já eh parametrizada usuários simultâneos O que é muito bom pra gente Eu particularmente prefiro trabalhar dessa forma porque eu deixo a gestão de configuração de usuários virtuais e duração pro meu script E aí fica até mais fácil para executar na linha de comando tá isso Aqui é uma dica uma boa prática para você usar no seu dia a dia aí trabalhando com c Fique à vontade para usar da forma que você quiser Beleza agora olha só que curioso
dessa vez nós tivemos aqui 100 iterations por quê Porque a performance melhorou olha só que bacana dessa vez nós tivemos aqui uma média de 2.05 segundos ainda não é o ideal mas no máximo a requisição mais pesada foi executada em 2.11 então nós tivemos aqui uma melhora de performance isso é influenciado pela rede pela internet porque o banco de dados está na nuvem Então tudo isso influencia é claro que na sua empresa no mundo real você vai ter um ambiente mais controlado de repente o banco de dados local para você não ter essas perdas de
pacote perda de performance entre outras coisas tá é importante você levar a infraestrutura em consideração e nesse curso ambiente acadêmico por mais que eu Tenha tentado chegar no ambiente real trazendo para você um software de verdade para a gente testar a gente tem a questão do banco de dados estar na nuvem E por que que eu coloquei o banco de dados na nuvem para facilitar a preparação do seu ambiente e fica só como ponto de atenção aqui pra gente depois de duration de 30 segundos eu vou passar uma vírgula e vou criar a chave de
configuração thresholds essa aqui é a chave de configuração de limites na Execução do teste de performance dois pontos abre e fecha Chaves e dentro desse bloco eu vou definir aqui http underline hack duration E aí eu vou colocar o seguinte valor abre e fecha colchetes tá aspas simples e vou colocar assim ó P abre e fecha parênteses 95 O que que é esse p95 dentro de parênteses é que eu tô criando aqui uma configuração e para avaliar pelo menos no pelo menos não para avaliar 95% das requisições com Essa métrica aqui que é hack duration
tá e 95% das requisições tem que responder em até 2.000 mos ou seja em até 2 segundos Vamos colocar um comentário aqui ó 95% das requisições requisicoes vou colocar sem acentuação devem responder em até 2 segundos 2s 2 segundos é isso tá então isso aqui é uma regra de configuração de limite por que que eu tô adicionando essa regra vamos lá eu V Salvar esse script e vou Voltar aqui pro terminal onde eu tenho a última execução Ok na vida tudo tem limite tudo não algumas coisas da vida tem limite não tudo né algumas por
exemplo contente tem limite Paciência tem limite são as únicas duas analogias que eu lembrei Mas além deciência e conta corrente test de performance também tem limites né E olha só que curioso Aqui nós temos o http hack duration que é a métrica que eu acabei de Configurar um limite né E aí ela tem aqui uma média de response time de 2.05 segundos ou seja na média todas as aquisições na média responderam em até 2.05 segundos um pouco mais de 2 segundos no mínimo 2.02 segundos e no máximo 2.11 segundos Então se a gente for levar
em consideração se a gente levar em consideração essa métrica na última execução com a configuração de limite que eu acabei de Definir certamente os testes não vão passar a partir de agora e é isso que eu quero não podem passar por quê Porque a api tem que responder o cadastro em até 2 segundos não pode passar de 2 segundos e é claro que a partir de agora os testes vão falhar Porque vão levar em consideração a configuração de limites que a gente definiu aqui no código Beleza agora voltando aqui pro term final veja que nós
temos esses PS aqui né que é o percent Olha só vamos pegar Aqui o p de duration ó percent 90% das requisições responderam em 2.7 segundos e 95% das requisições responderam em 2.1 segundos mais informações para deixar claro de que ao executar o teste com essa configuração de limite o mesmo não vai passar Deu para entender então vamos lá eu vou salvar o script venho aqui no terminal vou limpar a tela e rodar o k6 mais uma vez Lembrando que agora ele gera e-mail Dinâmico então não tem problema né ele só Tá engordando o banco
de dados Mas a gente pode fazer limpezas periódicas Ok vamos lá falta e 18 segundos para terminar né Vamos esperar aqui Falta 15 agora tá testando bonitinho né os cadastros estão acontecendo só que o k6 vai levar em consideração a configuração de limite que a gente definiu a regra de response time bacana Vamos lá olha só que legal o teste agora tem Aqui uma configuração de limite definida por isso ele tá retornando erro erro aonde na métrica http duration ainda assim todos os testes devolvem 201 Isso é muito bom todos os testes estão devolvendo o
status code 201 porque todos os cadastros estão acontecendo porém a performance não tá boa por quê Porque definimos uma configuração de limite onde o response time tem que ser em até 2 segundos e isso não tá acontecendo porque 95% das requisições Responderam em 2.7 então a api não tá boa a nível de performance o cadastro Tá ok cadastra todo mundo mas ela tá lenta Essa é a verdade a nossa configuração de limite deixou claro que a nossa pi está lenta não responde na performance que a gente quer bacana mas isso é um erro simulado porque
na verdade ela tem uma performance muito melhor Bacana Então vamos fazer o seguinte ó eu vou vir aqui no código agora no código da api e nós temos aqui dentro de src um arquivo Chamado ponto env veja que eu coloquei um time out de 2 segundos de propósito agora eu vou colocar um timeout de zero um timeout de zero e vou salvar esse arquivo de configuração porque isso aqui foi um parâmetro que eu defini para deixar a pi lenta porque na verdade ela tem uma boa performance Essa é a realidade tá mas era interessante a
gente fazer esse tipo de configuração para você entender como que funcionam e as definições de limites do k6 Tá bom Então agora que eu defini a nova configuração onde ela não vai demorar para fazer os cadastros eu venho aqui na primeira aba cont control c para tirar do ar sobe agora através do comando yarn Dev onde vai levar em consideração a nova configuração de timeout beleza e aí voltando aqui pra segunda aba vamos rodar o k6 mais uma vez né e vamos ver agora qual que vai ser o resultado do teste veja que agora nós
temos muito mais interações com esses 10 usuários Simultâneos durante e e e 30 segundos muito mais cadastros por quê Porque a performance da pi melhorou drasticamente né a gente mexeu no código tiramos o timeout que é o bug fictício e agora a p responde muito mais e com isso a gente tem muito mais cadastro muito mais performance na nossa pii olha só que bacana é o mesmo tempo de duração 300 segundos só que agora nós tivemos o quê ó 280 iterações então tirando o bug de performance dobrou praticamente dobrou Praticamente quase triplicou a quantidade de
cadastros e olha só que curioso agora as a a a o o response time médio é em menos menos de meio segundo menos de meio segundo e o response time máximo é um pouco pouco mais de meio segundo e a porcentagem aqui ó de requisições com sucesso 95% das requisições executaram em 148 milésimos menos de meio segundo agora sim nós estamos com um api performando bastante mesmo que o banco de dados esteja na Nuvem por quê Porque a gente tirou o bug que faz com que ela ficasse lenta né E aí ela passa na métrica
de limite que no caso a gente usou aqui que é http hack duration Mas você pode configurar qualquer outra métrica no seu teste tem uma métrica aqui que é muito legal e que eu uso bastante nos meus testes que é essa aqui ó http hack failed que é a quantidade de requisições que falharam veja aqui que nesse caso nenhuma requisição falhou das 200 iterações Todas foram processadas com sucesso Mas é interessante definir aqui uma configuração de limite para avaliar com uma carga de usuários maior durante o uma duração ainda maior Por que não né então
a gente pode adicionar essa métrica como limite dentro do nosso teste de performance que que eu vou fazer aqui ó eu vou vir aqui no nosso código e aqui depois do http hack duration e antes do comentário eu coloco uma vírgula para adicionar mais uma Configuração E aí a gente abre uma linhazinha aqui e eu coloco http hack failed né Opa tudo minúsculo né filed pronto e aí o que que a gente Pode configurar aqui ó abre e fecha colchetes e dentro dos colchetes eu passo a seguinte eh definição de limite ó rate sinal de
menor 0.01 que que isso aqui quer dizer que 90 90 não 1% 1% das requisições requisicoes podem Eh ocorrer erro é isso então somente um por de todas as aquisições eu só posso ter 1% de erro eu não posso ter mais do que isso é uma regra interessante é uma regra de configuração de limite bem ousada e você vai dosando isso de acordo com e o software que você tá testando tá bom essas configurações de limites tem que ser levada em considerações no ambiente de teste que você tá testando o a própria qualidade do software
infraestrutura entre outras coisas e Normalmente eu defino essas configurações junto com o de infra e com o time de desenvolvimento ou time de arquitetura de software isso a gente tem que fazer em conjunto eu não vejo k a definindo isso sozinho precisa do time como um todo Até porque não foi o k que desenvolveu a api que tá sendo testada não foi o k que definiu o ambiente por aí vai portanto as definições de limite as configurações de limite devem ser feitas em conjunto com todo o time tá Que fique claro isso porque é importante
você levar isso em consideração e compartilhar responsabilidade beleza bom vamos salvar aqui ah e aí eu vou rodar mais uma vez o nosso teste de performance pra gente ver o resultado tá rodando muito rápido agora né Agora o negócio tá voando porque a gente tirou o timeout então a pii Tá aproveitando ali todo seu poder de processamento para fazer diversos cadastros e e e performando com bom Response time o que é muito legal tá falta agora praticamente 10 segundos para acabar vamos esperar mais um pouquinho pronto acabou perfeito então agora nós temos aqui além do
status code 201 Nós temos duas configurações de limite que Ambas estão passando né dessa vez nós tivemos 290 interações né ó 290 interações e nenhuma falhou tá E poderia falhar até no máximo 1% 0,1 na verdade é 1% tá esse esse 0 lá esse 0.01 é 1% tá é 1% Então 1% das aquisições podem falhar se 2% 1.1% falhar aí já não tá aceitável de acordo com a regra de configuração de limite Beleza pode ser um pouco estranho no começo no começo também era estranho para mim mas você vai se acostumando e eu espero que
eu tenha conseguido te explicar de uma forma clara como que isso aqui funciona vamos lá eu tô aqui na página de teste de fumaça na documentação oficial do k6 vamos traduzir aqui usando o próprio Translator do navegador para ficar mais didático tá Então olha só a descrição de teste de fumaça o teste de fumaça é um teste de carga regular né a tradução tá boa né configurado para uma carga mínima se você deseja executar um teste de fumaça com uma verificação de sanidade o que que é verificação de sanidade é você verificar se e aquilo
que é esperado funciona tá é tipo assim eh eu tenho que fazer um cadastro Como é o nosso caso aqui eu tenho que fazer um cadastro de Usuário Está cadastrando o usuário está retornando o o status qu de 2001 tá funcionando aquilo que o software deve fazer está acontecendo esse é o teste de sanidade e aí ele é feito com uma carga mínima para você não ficar perdendo tempo por horas e horas num teste de performance mais completo porque nesse ponto A ideia é verificar se as coisas estão funcionando por isso que fala que é
um teste de sanidade aqui beleza e aí isso deve de ser feito Toda vez que você Escrever um novo script de teste Ou seja a sanidade ela a gente valida a sanidade tanto no ambiente quanto no software né ou modificar um script que já existe então se você criou um novo teste performance ou modificou um teste de performance que você já tem É interessante fazer um teste de fumaça para verificar se tudo está funcionando né muito parecido com o teste de regressão beleza bom olha só que interessante aqui ó você deve executar Um teste de
fumaça para verificar se os seus scripts de teste estão corretos você não tem nenhum problema se tá tudo certinho né E para verificar se o seu sistema não gera nenhum erro quando está sobre uma carga mínima é exatamente isso que eu acabei de dizer né É você criar um teste uma rotina de teste uma bateria de teste mínima para garantir que tudo funciona perfeitamente e que não tem nenhuma anomalia técnica é isso E aí só para te dar mais contexto Por que que Isso aqui chama teste de fumaça Qual que é a ideia do teste
de fumaça olha só que curioso lá nos primórdios da Computação os técnicos de eletrônica desenvolveram aquelas placas né de circuito integrado e tudo mais e qual que era o primeiro teste o teste de fumaça só que era para saber se realmente ia sair uma fumaça de verdade eles ligavam o dispositivo e se saísse fumaça fumaça de verdade é porque o dispositivo tava ruim Tava mal feito tava com bug tava com algum defeito e Não dava para avançar pros próximos testes Esse é o termo real né do teste de fumaça que foi eh eh introduzido na
na informática contemporânea né na tecnologia contemporânea mas a ideia é a mesma então o script de teste de fumaça aqui no k6 é pra gente saber se sai uma fumaça uma fumaça virtual no sistema e o que que é esse essa fumaça é no sentido de que alguma coisa tá pegando fogo de alguma coisa não tá legal né Porque nas placas antigas se sai fumaça é porque tá Mal feito então A ideia é o seguinte rodei um teste performance de fumaça deu ruim quer dizer que pegou fogo quer dizer que saiu fumaça e não está
e o software ou script não está bom para avançar pros testes mais complexos Essa é a ideia deu para entender então como que a gente faz um teste de fumaça no nosso teste automatizado olha só é super simples Tá bom vamos lá que que eu vou fazer aqui ó eu vou pegar o nosso script signup PJS e vou criar uma cópia cont Control c cont control v e aí ele vai gerar o arquivo signup cop PJ S vamos renomear para signup traço Smoke E aí como que a gente transforma isso aqui num teste de fumaça
carga mínima um único usuário virtual e a gente pode colocar aqui ó um minuto né a gente aumentou um pouco a duração mas a carga é mínima então o que que vai acontecer aqui nós vamos ter um teste recorrente por 1 minuto 60 segundos com um único usuário simultâneo fazendo o cadastro se Durante um minuto tudo se comportar adequadamente levando em consideração o nosso response time de até 2 segundos se durante um minuto tudo se comportar adequadamente quer dizer que tanto a aplicação quanto o nosso script está funcionando bem e aí está pronto pra gente
avançar pro próximo tipo de teste Beleza então vamos lá eu vou salvar esse arquivo aqui ó e aí nós vamos rodar aqui no terminal que que a gente vai fazer Run é Ou melhor C Runap Smoke PJS teclando enter agora ele vai ficar executando Com um único usuário virtual por um minuto tem que funcionar perfeitamente se tudo funcionar adequadamente quer dizer que não saiu fumaça se acontecer algum problema aqui pegou fogo saiu fumaça aplicação ou o script tá ruim volta pra prancheta e a gente tem que analisar e entender onde tá onde tá o problema
bom certamente Isso aqui vai funcionar porque eu já testei anterior né mas essa É a ideia do teste de fumaça vamos esperar terminar aqui um minuto pra gente analisar o relatório fechou show de bola terminou rodou tudo com sucesso não tivemos nenhuma requisição com falha tivemos aqui 57 iterações né porque é um usuário virtual mas à medida que vai executando o próximo usuário virtual entra então nós tivemos aqui 57 cadastro 57 usuári né durante um minuto o que a gente não teve foi usuários simultâneos mas tivemos Aqui 57 usuários um por vez Ok E aí
todas as requisições retornaram 201 sucesso e o response time tá muito bom esse aqui é o teste de fumaça teste super simples carga mínima pra gente ver se tanto o script quanto a aplicação se comportam adequadamente então vou clicar aqui no no arquivo e vou apertar cont control c control V vai criar uma cópia eu vou fechar o arquivo original para não dar confusão vou pegar a cópia e vou renomear para signup load por que que eu Tô usando aqui o termo load porque nós vamos criar um teste de carga um load Test e para
fazer isso a gente usa o recurso de estágios do k6 então o que que eu vou fazer aqui dentro da Constante options eu vou apagar o vus e duration e vou substituir por stages plural dois pontos abre e fecha colchetes enter aqui no colchete que fecha eu coloco uma vírgula para não dar problema de sintaxe e dentro desse bloco eu vou definir os estágios né Vamos Definir aqui basicamente três estágios o primeiro estágio vai ter uma duração ó duration de 1 minuto e aí ele vai ter um target que que é o target a carga
de usuários simultâneos 100 isso quer dizer que o terá um minuto para colocar 100 usuários simultâneos durante a execução Beleza depois eu vou aqui iniciar um novo estágio ó que vai ter o duration de 2 minutinhos somente né E aqui nós vamos manter 100 usuários simultâneos E aí por fim nós vamos ter aqui o estágio final Duration que vai durar mais um minutinho que vai ter um target zero beleza Deixa eu formatar o código aqui perfeito Então essa aqui é a configuração de estágios para que seja possível construir uma execução de teste de carga load
test eu vou fechar o arquivo e vou fazer um desenho aqui só para você entender na prática o que que eu tô querendo fazer tá Então imagina que essa linha aqui é a linha do tempo do nosso teste de carga né E ela sumiu Pera aí agora sim ó essa aqui é a linha do tempo do nosso test de carga não Não repara no meu desenho que eu não sou muito bom de desenho tá E aí no primeiro minuto nós vamos ter uma carga aqui até chegar 100 usuários chegou a 100 usuários parou parou não
né ele para de fazer a carga e mantém por mais 2 minutos com essa carga de 100 usuários passou os 2 minutos começa a diminuir a carga até terminar o último minuto Então esse aqui é o gráfico do nosso teste de Carga exatamente isso que deve acontecer durante a execução do script signup load.js Bacana Então vamos lá vamos abrir o arquivo de novo signup load e olha só primeira a primeira estgio vai ter a duração de 1 minuto e E aí durante esse 1 Minuto tem que subir até 100 usuários depois entra no segundo estágio
onde o script se mantém fazendo vários cadastros com 100 usuários simultâneos terminou esses 2 minutos aí começa o estádio final Onde tem um minuto para ir Diminuindo a carga como se tivesse as como se as pessoas tivessem saindo do site ou saindo do da aplicação E por aí vai É tipo isso Beleza bom que que nós vamos fazer agora antes de rodar o teste eu vou abrir a documentação do k6 onde a gente fala um pouco mais sobre teste de carga sobre o load test tá E aí eu deixei aqui traduzido pelo próprio navegador para
ficar mais didático porque o idioma original da documentação é inglês Tá bom então vamos lá e o load Test ele se preocupa principalmente com a avaliação do desempenho at do seu sistema em termos de usuários ou solicitações simultâneas por segundo quando você quiser entender se o seu sistema está atendendo as metas de desempenho ou seja as metas de performance as métricas de performance Esse é o tipo de teste que você deve executar tá beleza Olha só o teste de carga ele é um tipo de teste de performance o desempenho usado para Determinar o comportamento do
sistema em condições normais e condições de pico Hã e ele é usado para garantir se o aplicativo tem um desempenho satisfatório quando os usuários acessam eh ao mesmo tempo então é isso que a gente fez aqui no Script a gente criou um estádio de um minuto onde a carga vai subindo e depois a gente estabiliza com essa carga que é o pico de acesso tá E aí ele se mantém por 2 minutos com a mesma carga de 100 depois ele vai Finalizando como se as pessoas I tivessem saindo do sistema aos poucos tipo já fez
tudo que tinha que fazer que no caso é o cadastro e depois vai saindo do sistema a medida que vai saindo do sistema a carga de usuário simultâneas vai diminuindo é isso Beleza vamos lá você deve executar Um test de carga para avaliar o desempenho do sistema sobre uma carga típica e a carga de pico aqui Você já viu que no segundo estágio a gente vai finalizar o pico de acesso e Vai estabilizar durante 2 minutos para testar exatamente com essa carga máxima de 100 usuários né H E aí o teste de carga também serve
para você verificar se o sistema continua atendendo os padrões de desempenho ao fazer alterações tanto no código que é no software quanto na infraestrutura imagina que você tá numa empresa que tem um software que roda num data center local certo e aí você vai para uma nuvem para uma aws a infraestrutura muda Totalmente é outra infraestrutura é outro conceito um teste de carga te ajuda a verificar se o sistema continua com a mesma performance com a mesma escalabilidade estabilidade por aí vai tá então é um teste muito importante para você fazer no seu dia a
dia beleza bom então sem mais delongas vamos vir aqui no terminal e vamos executar o nosso teste de carga Beleza então vamos lá ah k6 run ah signup traço load.js teclando enter Ah deixa eu fazer o Seguinte eu vou dar um cont contrl C para matar essa execução vou limpar a tela de novo e voltando aqui pro script de load eu vou tirar o console.log só para não sujar aqui o relatório a saída tá cont Control S E aí nós vamos rodar mais uma vez porque fica mais prático pra gente analisar tá agora sim vamos
rodar o arquivo de teste de carga olha só que legal já passamos aqui por 22 segundos e estamos no momento com 40 usuários simultâneos né esse primeiro Estágio que dura 1 Minuto tem a função de subir a quantidade de 100 usuários Ou seja é a simulação do pico né o pico é aquela subida de usuários aquela carga de usuários simultâneos que vai aumentando Ah no sistema tipo você manda o e-mail ao Market O e-mail PR ionar uma black friday E aí as pessoas começam a acessar o seu software para poder ver o que que tem
de promoção lá isso é uma simulação de pico né que a gente faz através do teste de carga bacana Olha só 55 segundos 94 usuários 95 96 tá chegando a 100 Beleza Chegou a 100 estabilizou agora vai ficar por 2 minutos fazendo vários cadastros com vários e-mails diferentes dinâmicos né é com 100 usuários simultâneos ponto de atenção o requisito não funcional dessa api é até 100 usuários simultâneos eu como desenvolvedor da p não garanto que vai performar acima de 100 usuários simultâneos por quê Porque além de ser um software acadêmico o ambiente Influencia na performance
veja aqui que eu tô rodando dentro de uma máquina virtual esse Windows que você tá vendo aqui no meu computador é uma máquina virtual que tem eh oito giga de memória RAM e tem um SSD o computador host é um SSD Então embora seja uma máquina virtual tem uma boa performance uma excelente performance diga-se de passagem mas eu não garanto a mesma performance rodando num Core 3 num Core 5 num computador com uma eh com que não Tem SSD ou que tem pouca memória RAM portanto 100 usuários é o suficiente para atender a grande quantidade
de alunos que a gente tem aqui na k Academy beleza Ah mas eu quero testar na a máquina eu tenho uma Eu tenho um Core 7 com SSD e 16 GB de Ram quero testar com 1000 fica à vontade mas o nosso requisito funcional pra gente trabalhar ou melhor o nosso requisito não funcional pra gente trabalhar no curso é até 100 usuários fechou e já estamos Passando aqui ó do dos 2 minutos ó já estamos terminando aqui 3 minutos e agora ele comeou indo pro último estágio né que tem um minuto também E aí ele
vai diminuindo a carga Olha que da hora ó tá diminuindo ó 84 83 82 né E tem até 4 minutos que é o seria o 4 minutos não tem mais um minuto que vai terminar com 4 minutos para diminuir a carga e O legal é que nesse ponto a quantidade de iterações ou seja de cadastros vai diminuindo também tá olha Só tá quase acabando falta praticamente e 12 segundos agora 10 segundos para terminar né estamos agora com 14 usuários simultâneos 12 11 10 já tá acabando olha só que bacana vai acabar com 4 minutos cravado
terminou Olha que bacana a performance da peita muito boa tá temos aqui todas as iterações todas respondendo 201 tivemos aqui um total de 16.99 6 iterações ou seja quase 17.000 cadastros nesse test de carga é muita coisa muita coisa e olha a a média De response time menos de meio segundo tá a pe foi bem desenvolvida não é uma pe complexa é uma p que foi desenvolvida pensando nos requisitos de performance por isso que tá performando bem tá atendendo totalmente os limites que foram definidos porque a gente tem aqui 95% das requisições respondendo a quase
1.20 milésimos né poxa isso aqui é menos de meio segundo Então tá perfeito beleza e e a a a requisição mais demorada foi 415 ainda assim menos de meio segundo a Performance dessa ap é muito boa né o número Acho que mais interessante aqui é a quantidade de iterations que representa todos os cadastros que foram feitos através desse test de carga né e a quantidade de Mb que foi enviada e que foi recebida aqui também beleza bom esse é o teste de carga com o k6 esse arquivo está aqui desde o começo do curso tá
mas vamos clicar nesse esse arquivo agora eu vou clicar aqui e olha só que bacana nós temos aqui uma documentação Zinha bem Simples né onde foram levantados né onde foram especificados requisitos funcionais e requisitos não funcionais perceba que aqui ó nos requisitos funcionais nós temos esse x esse x quer dizer que isso aqui foi testado então todos os requisitos funcionais foram atendidos Ok Bacana esse curso aqui envolve muito mais teste não funcional do que funcional mas é importante eu passar pelos requisitos funcionais pelos testes funcionais e só depois testar o Não funcional Beleza agora vamos
descer mais um pouquinho aqui porque nós temos os requisitos não funcionais vamos analisar um por um olha só que bacana o cadastro deve ocorrer em até 2 segundos perfeito né ah o cadastro sem sucessos devem ocorrer também em até 2 segundos tranquilo Ah deve poder cadastrar até 100 usuários simultâneos fizemos esse teste na aula passada e aparentemente esse requisito não funcional foi atendido não é verdade e por fim temos Aqui ó a margem de erro no cadastro deve ser de pelo menos 1% isso quer dizer que sobre uma carga de usuários simultâneos eu posso ter
no mínimo um 1% de requisições com erro o ideal é não ter nenhuma mas o o analista de requisitos aqui foi um pouco gente boa né ele deix ele deixou claro aqui que se tiver pelo menos 1% de erro o sistema é é passa é aceitável E se a gente analisar o nosso script de teste de carga a gente tem aqui ó um limite uma configuração de Limite apontando para essa métrica aqui ó http hack failed onde só pode ter no mínimo 1% das requisições com erro ou seja esse script de teste de carga foi
construído com base nos requisitos não funcionais da documentação do aplicativo Isso é claro beleza bacana e nós fizemos o teste e de carga que atende os requisitos não funcionais na aula anterior Ok então o que que nós vamos fazer nessa aula nós vamos fazer um teste que vai Extrapolar os requisitos não funcionais e esse tipo de teste é o teste de stress ou em inglês stress testing né a ideia do teste de stress é tentar extrapolar aquilo que os limites dos requisitos não funcionais a gente sabe que ele que que api G GG aqui volta
a gente sabe que api funciona muito bem com até 100 usuários simultâneos Mas e se eu colocar 1000 será que vai funcionar se funcionar perfeito né E esse é o teste de stress é o que a gente ao extremo a gente tentar Extrapolar os limites que foram especificados para a aplicação Vamos abrir aqui a documentação de teste de estress do próprio k6 né olha só que bacana o que diz na documentação o que que é um teste de stress né o teste de stress é um tipo de teste de carga né Ele é um tipo
de teste de carga usado para determinar os limites do sistema o objetivo desse teste é verificar a estabilidade e confiabilidade do sistema sob condições extremas exatamente isso Que eu falei então a ideia do teste de stress é eu extrapolar os limites que foram definidos nos requisitos não funcionais e se não passar tudo bem a gente já sabe que esse é o limite e a infraestrutura vai trabalhar de acordo com os limites porém se o teste passar e ir além dos limites a aplicação tem uma performance além do esperado o que é muito bom não é
verdade Então vamos lá vamos descer aqui embaixo porque a gente tem um exemplo de Teste de stress bem legal ó Inclusive eu recomendo você fazer a leitura completa dessa documentação que por sinal eu vou deixar o link aqui embaixo para facilitar para você tá olha só que bacana essa configuração de Estágios que nós temos aqui ó na documentação a gente tem o seguinte ó um teste que vai durar ou melhor um estágio inicial de 2 minutos que já começa com 100 usuários simultâneos Lembrando que o limite da nossa p é 100 tá E aí vai
ficar 5 Minutos rodando vários cadastros com 100 usuários simultâneos então ele tem 2 minutos para subir os 100 usuários subi os 100 usuários aí fica 5 minutos com essa mesma quantidade de carga 5 minutos mandando ver fazendo vários cadastros de usuários durante 5 minutos com 100 usuários simultâneos né Sem V users beleza depois passa por um outro estágio que é de 2 minutos onde ele vai aumentar a carga ele vai fazer um Ramp up né Isso é o que a gente chama de Ramp up vai Ficar durante 2 minutos subindo mais 100 usuários ou seja
vai para 200 simultâneos subiu essa carga de 200 permanece agora por mais 5 minutos com essa carga de 200 usuários simultâneos isso já fez com que o bom só esses essa configuração de estádio que a gente já tá vendo aqui com base na nossa P já faz com que e a a quantidade de usuários simultâneos Vá ao extremo do esperado e configurado e e e especificado na aplicação não é verdade beleza vai ficar 5 minutos com 200 usuários simultâneos depois mais 2 minutos de Ramp up onde vai colocando mais usuários aos poucos né tem 2
minutos para colocar mais 100 e por aí vai né então o que a gente tá vendo aqui é uma configuração que a gente pode chamar de Ramp up a cada 5 minutos tem uma carga de 2 minutos para subir mais 100 usuários e aqui embaixo a gente tem um gráfico que facilita bastante o entendimento ó olha só que bacana esse aqui é o gráfico dessa Configuração de Estágios que você tá vendo aqui vamos analisar esse gráfico olha só que bacana de zero até os primeiros 2 minutos subiu 100 usuários E aí fica aqui ó durante
5 minutos com 100 usuários simultâneos depois mais um aí faz um Ramp up né que é o qu subir mais 100 usuários durante 2 minutos e fica 5 minutos estressando com 200 usuários simultâneos terminou esses 5 minutos que que vai acontecer mais um Ramp Up 2 minutos Subindo mais 100 E aí começa a estressar o sistema durante 5 minutos fazendo vários cadastros com 300 usuários simultâneos e por fim mais um Ramp up de mais 100 usuários que vai para 400 e fica ali durante 5 minutos estressando a aplicação fazendo cadastros com 400 usuários simultâneos terminou
esses 5 minutos tem mais um tempo para ir diminuindo a carga até finalizar é isso que nós vamos fazer nessa aula nós vamos fazer exatamente esse tipo de teste com Essa estratégia a cada 2 minutos a gente sobe sem usuários e fica 5 minutos estressando o sistema Beleza então isso aqui vai extrapolar os limites da aplicação concorda comigo então vamos lá que que eu vou fazer aqui ó eu vou pegar essa configura antes disso Calma Vamos lá tô muito ansioso aqui calma primeiro eu vou pegar o arquivo signup load que é o arquivo onde nós
temos aqui o teste de carga né eu vou clicar nele contrl ctrl v que fiz uma cópia vou fechar o arquivo Original e ficar somente com a cópia aberta aqui na cópia eu vou renomear para signup stress né porque esse aqui vai ser o arquivo de teste de stress perfeito temos um novo arquivo Agora sim eu venho aqui na documentação e Posso copiar somente os estágios tá vou copiar do jeito que tá na documentação porque tá ótimo pro nosso cenário aqui vou copiar os estágios e vou substituir aqui ó pelos estágios que vieram lá do
teste de performance Tá então vamos lá control C control V substituir os estágios tá então essa configuração que veem da documentação ela tem Ramp Ups de 2 minutos para subir de 100 em 100 e 5 minutos de stress fazendo uma conta de padaria aqui olhando aqui os números todo esse teste de stress deve demorar 38 minutos 38 minutos é bastante tempo então o que eu vou fazer é executar o teste vou pausar o vídeo 38 minutos depois eu vou voltar aqui na gravação pra gente analisar o resultado E aí você Faz a mesma coisa aí
na sua casa quando você executar o teste você dá um pause aqui no vídeo e espera terminar aí no seu computador né então vamos lá eu vou salvar esse arquivo pra gente não perder o código até porque é isso que a gente quer executar esses estágios aqui e aí eu vou abrir o terminal aqui no terminal Deixa eu digitar um LS só pra gente ver que o arquivo foi criado bonitinho ó signup stress PJS que que eu vou fazer aqui k6 Run Signup stress estress PJS teclando enter vai iniciar os testes de stress vai estressar
e muito a nossa api veja aqui que nós temos de zero até 400 V users no total Lembrando que a cada 2 minutos sobe 100 e fica 5 minutos estressando teremos aqui em média de 38 minutos de execução como eu falei agora a pouco então eu vou pausar aqui o vídeo e eu retorno assim que essa execução finalizar você pode pausar e aproveitar Para tomar uma água tomar um café ou então acompanhe aqui em Real Time porque isso é bem curioso também beleza até daqui a pouco bom 38 minutos depois tivemos aqui o resultado do
teste vamos analisar porque o teste não passou ele reprovou o teste de stress reprovou a nossa ap vamos entender aonde que ocorreram os gargalos E por que o teste foi reprovado Beleza então vamos lá primeiramente é interessante a gente analisar que nós executamos realmente o Teste em um pouquinho mais de 38 segundos coisinha mínima mas foi exatamente esse o tempo total do teste de stress tá tivemos aqui pico o pico máximo de 400 usuários simultâneos né os V users beleza e tivemos aqui um total de 212 16620 interações provavelmente tudo isso de cadastro tivemos muitos
cadastros na API de usuários Beleza agora olha só que curioso eh Todas as verificações de status code retornaram 201 e aqui embaixo a gente vê ó que na métrica checks tivemos 100% de cadastros com sucesso embora o teste não tenha passado na sua totalidade tivemos aqui cadastros com sucesso e isso é super interessante pra gente tá veja aqui que nenhum cadastro falhou tivemos mais de 200.000 iterações e mais de 200.000 cadastros de usuários né a quantidade de cadastros quantidade de Iterations basicamente isso então todos os usuários que foram executados nesse teste de stress foram cadastrados
isso é interessante para caramba tivemos aqui um total de 74 MB recebidos e 43 MB enviados beleza bom agora Olha só aonde que está o gargalo na métrica http hack duration que é o response time tivemos aqui ó um pico máximo ó de 5.41 segundos para a pi responder o retorno de um cadastro então houveram cadastros que passaram de 2 segundos Fazendo com que essa métrica falhasse porque a a o nosso requisito não funcional é que os cadastros devem ocorrer em até 2 segundos só que tiveram cadastros que ocorreram em mais de dois no máximo
ali 5.41 segund porém a nossa média aqui tá muito boa é uma média de 1.42 segundos por cadastro então a média tá muito boa olha só que curioso nenhuma requisição http falhou todos os cadastros foram realizados mesmo que lentos em relação à nossa métrica por Conta de ter realmente requisições que duraram um pouco mais de 5 segundos mas ainda assim todos os cadastros foram realizados com sucesso Poxa isso aqui tá bom demais a pi falhou no teste de stresse mas ainda assim ela demonstra que tem uma boa estabilidade uma boa estabilidade até porque o requisito
não funcional dela é diz que ela vai escalar muito bem com 100 usuários simultâneos porém a gente colocou quatro vezes a quantidade De usuários simultâneos que ela aguenta e ela performou performou não performou muito bem não é verdade então assim a nossa pi tem uma boa qualidade no que diz respeito à performance mesmo tendo falhado no teste de stress Tá bom então esse é o teste de stress que você pode fazer no seu dia a dia qual que é o teste de stress extrapolar os limites com base nos requisitos não funcionais da sua aplicação E
aí como que eu faço para apresentar esse resultado para o Desenvolvedor Ou de repente pro meu time como um todo ou paraa minha diretoria eu vou tirar um print aqui do console e mandar pro pro time ou pra diretoria ou se de repente a aplicação não performou eu vou chamar o Dev para sentar aqui comigo e mostrar para ele o resultado do teste bom chamar o Dev eu acho que faz muito sentido porque é interessante ele fazer parte inclusive do processo de execução mas quando a gente fala de relatório a nível gerencial ou até mesmo
A nível de apresentação Talvez o terminal não seja a melhor escolha e obviamente que não é eu não vou tirar um print disso aqui jogar num PowerPoint para mandar e-mail para todos os envolvidos no projeto não é verdade existe tem diversas maneiras de emitir um relatório de teste de performance com o k6 como esse é um treinamento introdutório um treinamento básico eu vou mostrar uma forma muito simples de gerar esse relatório mas embora seja Simples uma forma muito poderosa porque consegue coletar todas essas informações e armazenar em um arquivo separado sem que ele esteja no
terminal até porque se eu digitar Clear e teclar enter vai limpar a tela e eu vou perder eh todo o resultado da última execução portanto é muito interessante a gente colocar o relatório de teste em um outro formato para isso nós vamos usar esse plugin aqui ó k6 Reporter esse aqui é um plugin desenvolvido por terceiro ele não é Oficial do k6 porém ele é muito prático e agrega muito valor pro nosso projeto de testes de performance eu vou abaixar aqui mais um pouquinho e olha só primeiramente eu tenho que importar esse módulo JavaScript Lembrando
que o k6 não é node Então veja que ele importa realmente um arquivo JavaScript que está dentro do próprio repositório do k6 olha só que bacana ele importa aqui via Raw isso é muito interessante porque eu posso também pegar esse bundle PJS Copiar localmente pro meu projeto mas nesse caso eu vou usar aqui e a recomendação da própria documentação E se eu clicar nesse ícone aqui ele vai copiar esse código de importação pra área de transferência do meu computador e com isso eu consigo colar no meu arquivo vamos começar pelo arquivo mais simples que é
o hello.js então eu vou colocar essa importação aqui em cima mais ou menos na linha quatro e com isso ele importa o Módulo que faz geração de relatório em HTML e aí o que que eu faço eu volto pra documentação e vou copiar esse código de Export Tá então vamos lá eu vou clicar aqui no ícone para copiar ó cliquei copiou e vou colar logo eh depois da importação tá E antes do do código que implementa o teste propriamente dito tá Então olha só que bacana o que que a gente tem aqui a gente tem
uma função que vai fazer a sumarização pera aí que colocou um Tool Chip aqui deixa eu teclad s Que beleza agora ficou bom para eu te mostrar Então olha só nós temos aqui um handle summary que é a função que vai fazer a a que vai agregar o resultado dentro de um relatório no formato HTML e depois ele faz um return criando o arquivo com esse nomezinho aqui ó summary P HTML e depois chamando a função HTML report pegando o valor de data que é basicamente todo o resultado que também é gerado no console uma
vez que o teste É finalizado simples assim então vamos lá eu vou salvar o arquivo hello.js Ctrl S vou vir aqui no terminal né Já Limpei a tela que que eu vou fazer k6 Run hello.js teclando enter vai rodar um teste super rápido aqui né testezinho muito rápido mesmo só pra gente ver se o plugin funciona né E olha só que bacana no final ele gerou o seguinte ó generating HTML summary report olha só que bacana Beleza agora vamos abrir esse esse arquivo Então vou vir aqui no Projeto ó e veja que ele gerou o
arquivo dentro da própria pasta de execução né que que eu vou fazer eu vou abrir essa pastinha aqui no meu explorador de arquivos do meu sistema operacional e vou abrir o arquivo html no meu navegador e olha só que bonitinho Eu tenho esse relatório é muito parecido com o console com aquele relatório que é saído no console não é verdade Porém Aqui eu tenho uma informação Onde eu posso Armazenar gerar histórico enviar pro também pro desenvolvedor anexar num relatório e Powerpoint com informações eh com uma camada de apresentação um pouco mais elegante né tem aqui
todas as informações e e de uma forma mais elegante beleza eu posso até criar na empresa um servidor http um servidor web para armazenar todo o histórico de teste de performance ao longo do tempo eu posso trabalhar junto com o time de infraestrutura para armazenar esses Relatórios o que por sinal eu acho muito legal tá Então olha só que bacana nós temos aqui exatamente o mesmo relatório com as mesmas métricas com os mesmos valores porém no formato HTML Ok bom o que que eu vou fazer agora eu vou voltar aqui pro nosso projeto e vou
selecionar tanto a importação quanto a função que gera o relatório vou copiar e vou adicionar esse código no nosso teste de stress ó aqui a partir da linha cinco mais ou menos tá E aí eu vou salvar Porque eu quero rodar um teste de stress ou seja um teste que gera bastante informação interessante gerando e o relatório no formato HTML Beleza se você quiser mudar o nome basta colocar aqui ó outro nome por exemplo report né Coloquei até tá errado ó report log HTML sei lá né eu vou deixar samar mesmo porque eu acho que
é um nome Bacana aqui faz muito sentido em relação a aquilo que a gente tá fazendo que é a sumarização de todas as requisições http Que ocorreram por conta de um teste de stress no caso desse arquivo né Lembrando que é um teste que vai demorar em média aí de 38 minutos então eu vou salvar o arquivo vou colocar para rodar mais uma vez o teste de stress porém agora gerando o relatório no formato HTML e aí daqui 38 minutos nós vamos ver o resultado Então já salvei o arquivo perfeito volto aqui pro terminal vou
limpar a tela como de costume eh k6 Run signup traço stress PJS opa pera Aí que deu ruim invés de colocar Run eu escrevi tan escrevi errado tá vendo ó com T nada a ver né R Run agora tá certinho o k6 vai começar a executar os testes Lembrando que é um teste de 38 minutos então vai demorar aí um um um um considerável não é verdade que que eu vou fazer eu vou Pausar a gravação né E daqui 38 minutos quando terminar eu retorno aqui pra gente poder analisar o resultado no formato HTML tchau
tchau teste de stress finalizado né Depois de 38 minutos e temos aqui ó uma informação dizendo que o relatório foi gerado no formato HTML é interessante a gente entender que o k6 Deixa claro que tivemos falhas aqui ó e algumas falhas em elação as métricas que foram pré-definidas no arquivo e nós vamos conseguir olhar isso no detalhe abrindo o relatório que agora está no formato HTML Então vamos lá eu vou abrir aqui ó no navegador vou dar um refresh Porque aqui nós temos resultado da última Execução e olha só que curioso nós tivemos aqui ó
mais de 200.000 requisições no total né e a falha que ocorreu Foi por conta do hack h e o http hack duration né que é o o valor total né o valor total da requisição desde a ida até a volta onde nós tivemos aqui Picos com um pouco mais de 5 segundos Lembrando que o aceitável é pelo menos aí 90% das requisições retornando em até 2 segundos é como eh nós analisamos na aula passada no geral a api tá muito boa Ainda assim é um ponto que a gente pode levar em consideração é claro que
mais de 200.000 requisições em 30 8 segundos é um valor a ser analisado sim com certeza é um valor que deve ser analisado junto com o arquiteto junto com o time de infraestrutura para poder entender se realmente a gente deveria mandar tantas requisições nesse tipo de teste mas é aquilo o teste performance independente da ferramenta agora eu vou falar sobre teste performance mesmo tá e Independente da ferramenta é um teste que tem que ser feito em conjunto não é só responsabilidade do qa é responsabilidade do Dev do arquiteto do time de infraestrutura que vai provisionar
e fornecer para você todo o ambiente para poder ser executado né deu para ter uma boa noção sobre teste de performance especialmente com a ferramenta C6 que está e tendo aí uma boa visibilidade no mercado em relação ao seu concorrente que é o jmeter Espero Que você tenha gostado um forte abraço tchau tchau [Música]