GithubHelp home page GithubHelp logo

teste_performance_api's Introduction

NPM

Teste de Performance para API - K6

Status: 🚦 Desenvolvendo

Se concentra em testar os diversos verbos de uma API (GET, POST, PUT, DELETE)
o projeto está configurado para os seguintes tipos de teste, Smoke Test / Load Test / Stress Test.
Projeto desenvolvido exclusivamente para estudo próprio

Instalação da API

A Api deve ser executada localmente via NodeJS

Possue versões - Windows - Linux - Mac


# Após a instalação execute em qualquer termimal:
$ npx serverest@latest
# Para Iniciar a API

Instalação do Projeto

Requisito:

# clonar repositório 
git clone https://gitlab.com/edu_compass/sprints_compass.git
git checkout pb_sprint7

Instale o K6 usando o: choco install

# Começe instalando o K6
$ choco install k6

Instale as dependências do projeto usando o: npm install

# Instalar o Faker, para geração de massa de dados
$ npm install --save-dev @faker-js/faker

Ou se Preferir

$ npm intall
# Que irá instalar todas dependências do projeto

Oque cada pasta armazena

📁/data é onde deve ser armazenado todas as massas de dados geradas pelo faker sendo filtrados por static ou dynamic

📁/functions estão as funções executadas nos scripts de teste

📁/services possue a classe dos respectivos serviços/verbos da API como o GET e POST

📁/support/base onde estão os checks das possiveis response dos testes e tambem armazena algumas constantes do projeto como os ENDPOINTS

📁/support/config contem todas as options de environment desde a url padrão usada, até as options dos tipos de teste SMOKE,LOAD,STRESS

📁/tests está todos os testes do projeto com todas as rotas possiveis da API

Configuração

Em /services/baseRest.js

Pode-se adicionar mais verbos a gama de testes, seguindo o mesmo padrão dos demais

export class BaseRest extends BaseService{
    constructor(base_uri){
        super(base_uri);
    }
    get(endpoint, id = '', body = {}, headers = {}, params = {}){
        let uri = this.base_uri + endpoint + id;
        let options  = this.buildOptions(headers, params)
        return http.get(uri, JSON.stringify(body), options)
    }
    post(endpoint, body, token = '', headers = {}, params = {}){
        let uri = this.base_uri + endpoint;
        let options = this.buildOptions(headers = {}, params, token)
        return http.post(uri, JSON.stringify(body), options)
    }
    buildOptions(headers = {}, params = {}, token){
        return {
            headers: Object.assign({'Content-Type': 'application/json', 'monitor': 'false', 'Authorization': token}, headers),
            params: Object.assign({}, params)
        }
    }
}

Em /support/config/environment.js

Pode-se editar a baseUrl e as opitions dos tipos de testes

export const testConfig = {
    environment: {
        hml: {
            url: "http://localhost:3000"
        }
    },
    options: {
        smokeThresholdsLogin: {
            vus: 1,
            duration: '10s',
            thresholds: {
                http_req_duration: ['p(95)<2000'],
                http_req_failed: ['rate<0.01'],
                http_req_waiting: ['p(95)<1500'],
                http_req_connecting: ['p(95)<500'],
                iteration_duration: ['p(95)<2000'],
                checks: ['rate>0.9']
            }
        }
    }
}

É possivel adicionar mais thresholds seguindo a documentação do k6


Em /support/base/baseChecks.js

Estão as checagens dos testes Ex: status code

export class BaseChecks{
    checkStatusCode(response, expectedStatus = 200){
        check(response, {
            'status code check' : (r) => r.status === expectedStatus,
        })
    }
}

Tambem é possivel adicionar mais checks seguindo a documentação do k6


Em /support/base/constants.js

Estão os ENDPOINTS da API

Pode-se edita-los ou adicionar novos de acordo com os ENDPOINTS da API que irá ser testada

export const ENDPOINTS = {
    LOGIN_ENDPOINT: '/login',
    USER_ENDPOINT: '/usuarios',
    PRODUCTS_ENDPOINT: '/produtos',
    CARTS_ENDPOINTS: '/carrinhos'
}

Exemplo de uma chamada da API

const payloadLogin = {
        "email": user.email,
        "password": user.password
    }

    const resLogin = baseRest.post(ENDPOINTS.LOGIN_ENDPOINT, payloadLogin)

payloadLogin{ } contem um body com os campos email e senha que serão enviados para a API

Em seguida é chamada a classe baseRest com o metodo post

Passando como parametro o ENDPOINT e o payloadLogin ambos separados por virgula

Execução dos testes

Caso queira executar toda a bateria de testes do projeto

# Para entrar na pasta correta
$ /Proj_Base_K6/tests/

# Para executar o script
$ ./scriptIndexPrincipal.sh {parametro}
# Este parametro é para a geração de massa de dados do faker
# Que representa a quantidade de usuarios que o faker irá gerar na lista

Se preferir executar apenas uma rota especifica

# Para entrar na pasta correta
$ /Proj_Base_K6/tests/{endpoint}/
                      1-Login
                      2-Usuarios
                      3-Produtos
                      4-Carrinhos

# Para executar o script
$ ./scriptIndex{endpoint}.sh {parametro}
                Login
                Usuarios
                Produtos
                Carrinhos

Se quiser executar diretamente pelo k6 use o comando

$ k6 run {nome_do_arquivo.js}

Não esqueça da extensão do arquivo na hora da execução .sh ou .js

Assim que o(s) teste(s) forem finalizados serão gerados arquivos index.html com todas as metricas registrada durante a execução, podendo ser visualizada abrindo o arquivo .html que está localizado dentro da pasta de cada arquivo executado

teste_performance_api's People

Watchers

Eduardo Cesar avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.