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
Possue versões - Windows - Linux - Mac
# Após a instalação execute em qualquer termimal:
$ npx serverest@latest
# Para Iniciar a API
Requisito:
- chocolatey
Installing Chocolatey
# 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
📁/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
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)
}
}
}
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']
}
}
}
}
export class BaseChecks{
checkStatusCode(response, expectedStatus = 200){
check(response, {
'status code check' : (r) => r.status === expectedStatus,
})
}
}
export const ENDPOINTS = {
LOGIN_ENDPOINT: '/login',
USER_ENDPOINT: '/usuarios',
PRODUCTS_ENDPOINT: '/produtos',
CARTS_ENDPOINTS: '/carrinhos'
}
const payloadLogin = {
"email": user.email,
"password": user.password
}
const resLogin = baseRest.post(ENDPOINTS.LOGIN_ENDPOINT, payloadLogin)
# 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
# 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
$ k6 run {nome_do_arquivo.js}