Modelos abertos e fechados em testes de performance com k6.

Published: (February 23, 2026 at 07:35 PM EST)
4 min read
Source: Dev.to

Source: Dev.to

Conceitos básicos

Em um teste de performance, o modelo define como o sistema controla a chegada e a saída de usuários virtuais (VUs) durante o ciclo de execução.

  • Modelo fechado – O número de VUs é fixo. Cada VU inicia a próxima iteração somente quando a anterior termina. A concorrência permanece constante.
  • Modelo aberto – Novos VUs chegam a uma taxa constante, independente do que os VUs já ativos estejam fazendo. Esse comportamento se aproxima mais do que ocorre em sistemas reais, onde usuários chegam continuamente.

A escolha do modelo muda completamente a semântica do teste planejado. Em alguns cenários queremos controlar quantos usuários estão ativos ao mesmo tempo; em outros, queremos garantir que uma determinada taxa de requisições (RPS) seja mantida, independentemente do número de usuários necessários para atingi‑la.

Modelo Fechado

Exemplo de script

export const options = {
  scenarios: {
    modelo_fechado: {
      executor: 'constant-vus',
      vus: 50,
      duration: '1m',
    },
  },
};

export default function () {
  // sua lógica de teste
}

Consequência: se o sistema ficar lento, a taxa de requisições cai automaticamente, pois as VUs aguardam a resposta antes de iniciar uma nova iteração. O pool de usuários ativos nunca cresce além do valor configurado.

Quando usar

  • Aplicações internas corporativas – grupo fixo de funcionários acessa o sistema simultaneamente.
  • Sistemas com sessões controladas – plataformas de streaming com limite de conexões por conta.
  • Testes de resistência (Soak Tests) – objetivo de manter carga constante por longos períodos e observar o comportamento ao longo do tempo.

Executores disponíveis (modelo fechado)

ExecutorDescrição
constant-vusMantém um número fixo de VUs durante todo o teste.
ramping-vusAumenta ou diminui gradualmente o número de VUs.
per-vu-iterationsCada VU executa um número fixo de iterações.
shared-iterationsUm pool de VUs compartilha um número total fixo de iterações.

Modelo Aberto

Exemplo de script

export const options = {
  scenarios: {
    modelo_aberto: {
      executor: 'constant-arrival-rate',
      rate: 100,            // 100 VUs por unidade de tempo
      timeUnit: '1s',
      duration: '1m',
      preAllocatedVUs: 50, // VUs pré‑alocadas antes do início
      maxVUs: 200,          // número máximo de VUs que podem ser criados
    },
  },
};

export default function () {
  // sua lógica de teste
}

Comportamento: se o sistema ficar lento, o k6 precisará de mais VUs para manter a taxa configurada.

Quando usar

  • APIs REST públicas – múltiplos clientes realizam requisições continuamente.
  • E‑commerces e portais web – usuários chegam de forma independente.
  • Testes de pico (Spike Tests) – simular aumento repentino e intenso de tráfego.
  • Testes de capacidade (Capacity Tests) – descobrir quantas requisições por segundo o sistema sustenta antes de degradar.

Executores disponíveis (modelo aberto)

ExecutorDescrição
constant-arrival-rateMantém uma taxa fixa de iterações por unidade de tempo.
ramping-arrival-rateAumenta ou diminui gradualmente a taxa de chegada.

Comparação resumida

CaracterísticaModelo FechadoModelo Aberto
O que é controladoNúmero de VUsTaxa de chegada de iterações
Comportamento sob lentidãoTaxa de requisições caiNúmero de VUs aumenta para manter a taxa
RealismoMenor (adequado a ambientes controlados)Maior para sistemas web com tráfego orgânico
Tipos de testeSmoke, Soak, Load, StressLoad, Spike, Capacity
Executores k6constant-vus, ramping-vus, …constant-arrival-rate, ramping-arrival-rate

Atenção ao escolher o modelo

Muitos times ainda utilizam o modelo fechado para todos os testes por ser o padrão e o mais simples de configurar. Em sistemas web com tráfego orgânico, isso pode mascarar problemas sérios de performance.

Cenário ilustrativo:

  • O sistema começa a responder lentamente devido a sobrecarga.
  • Modelo fechado: as VUs ficam aguardando respostas, a taxa de requisições cai automaticamente, reduzindo a pressão sobre a aplicação e gerando uma falsa impressão de estabilização.
  • Modelo aberto: novos usuários continuam chegando na taxa configurada, expondo a degradação real da aplicação.
// Modelo fechado: a taxa de requisições cai quando o sistema fica lento
executor: 'constant-vus', vus: 100

// Modelo aberto: a pressão é mantida, e o sistema é exposto
executor: 'constant-arrival-rate', rate: 100, timeUnit: '1s'

Sistema em produção

Use o modelo fechado quando o número de usuários simultâneos é o que importa, e o modelo aberto quando a taxa de chegada de requisições é o fator crítico.

Gostou do conteúdo e quer saber mais sobre testes de performance com K6?
Confira meu curso na Udemy!

Teste de performance com K6 ✨

0 views
Back to Blog

Related posts

Read more »

DevOps and Vibe Coding: A Journey

Things to Do Map Your Application - Map your application on paper, in a spreadsheet, or using graphics/flowcharts. This is the first step. - Understanding the...

OpenAI just raised $110 billion. Wow

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment's permalink. Hide child comments as we...