Su aplicación funciona perfectamente en su computadora portátil. Las pruebas de unidad pasan. Las pruebas de integración pasan. Usted despliega a la producción, y de repente todo se detiene. Quinientos usuarios reales golpean su página de inicio simultáneamente, y su servidor comienza a devolver 503 errores. Su estrategia de caché cuidadosamente diseñado? Resulta que no funciona como pensaba. Esa consulta de base de datos que pensó que era rápido? Está creando un cuello de botella a escala.
Este es el escenario de pesadilla que todos los desarrolladores temen, pero la mayoría no lo prueban. Las pruebas de rendimiento no son opcionales - es la diferencia entre un lanzamiento exitoso y una página de emergencia de 3 AM. Esta guía de dos partes le mostrará exactamente cómo prevenir este escenario utilizando k6, la herramienta de prueba de carga moderna que es lo suficientemente potente para aplicaciones empresariales pero lo suficientemente simple como para funcionar en su tubería CI/CD.
Esto es Parte 1 de una serie de dos partes en el ensayo de carga con k6:
Las pruebas de rendimiento son críticas para cualquier aplicación de producción ASP.NET Core. Ya sea que esté construyendo un blog sencillo, una arquitectura de microservicio compleja o una aplicación empresarial, necesita saber cómo se comporta su aplicación bajo carga. ¿Manejará 100 usuarios simultáneos? 1,000? ¿Dónde están los cuellos de botella? ¿Funciona realmente su estrategia de almacenamiento en caché?
Esta guía completa le muestra cómo cargar las aplicaciones de prueba ASP.NET Core usando k6 - una de las herramientas de prueba de carga de código abierto más potentes disponibles. MinimalBlog como nuestra aplicación de ejemplo (un simple blog basado en Markdown con memoria y caché de salida), las técnicas y patrones mostrados aquí se aplican a cualquier aplicación ASP.NET Core.
Al final de esta serie de dos partes, sabrás cómo:
¿Por qué MinimalBlog como ejemplo? Es una aplicación ASP.NET Core 9.0 real con patrones comunes: Páginas Razor, almacenamiento en caché de memoria, almacenamiento en caché de salida, E/S de archivo y procesamiento de marcado. Los enfoques de prueba que aprenderá se aplican por igual a sus aplicaciones MVC, APIs Web, aplicaciones Blazor, o APIs mínimas.
k6 es una herramienta de prueba de carga moderna construida para desarrolladores. A diferencia de las herramientas más antiguas como JMeter o LoadRunner, k6 es:
Para MinimalBlog, k6 es ideal porque:
Opción 1: Uso de chocolate (recomendado)
choco install k6
Opción 2: Uso de Winget
winget install k6 --source winget
Opción 3: Instalación manual
k6.exe archivok6.exe a un directorio ya en PATHVerifique la instalación:
k6 version
Opción 1: Uso de Homebrew (recomendado)
brew install k6
Opción 2: Uso de MacPorts
sudo port install k6
Opción 3: Instalación manual
# Download and install the latest release
curl -O -L https://github.com/grafana/k6/releases/latest/download/k6-macos-amd64.zip
unzip k6-macos-amd64.zip
sudo cp k6-macos-amd64/k6 /usr/local/bin/
sudo chmod +x /usr/local/bin/k6
Verifique la instalación:
k6 version
Opción 1: Usar administradores de paquetes
Por Debian/Ubuntu:
sudo gpg -k
sudo gpg --no-default-keyring --keyring /usr/share/keyrings/k6-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D69
echo "deb [signed-by=/usr/share/keyrings/k6-archive-keyring.gpg] https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list
sudo apt-get update
sudo apt-get install k6
Por Fedora/CentOS/RHEL:
sudo dnf install https://dl.k6.io/rpm/repo.rpm
sudo dnf install k6
Opción 2: Uso de Snap
sudo snap install k6
Opción 3: Instalación manual
# Download the latest release
curl -O -L https://github.com/grafana/k6/releases/latest/download/k6-linux-amd64.tar.gz
tar -xzf k6-linux-amd64.tar.gz
sudo cp k6-linux-amd64/k6 /usr/local/bin/
sudo chmod +x /usr/local/bin/k6
Opción 4: Uso de Docker
docker pull grafana/k6:latest
# Run a test
docker run --rm -i grafana/k6:latest run - <script.js
Verifique la instalación:
k6 version
Antes de sumergirnos en las pruebas, vamos a entender la estructura básica de una prueba de k6:
import http from 'k6/http';
import { check, sleep } from 'k6';
// Test configuration
export const options = {
vus: 10, // Virtual users
duration: '30s', // Test duration
};
// Setup function (runs once before test)
export function setup() {
// Prepare test data
return { baseUrl: 'http://localhost:5000' };
}
// Main test function (runs for each VU)
export default function(data) {
const response = http.get(data.baseUrl);
// Assertions
check(response, {
'status is 200': (r) => r.status === 200,
'response time < 200ms': (r) => r.timings.duration < 200,
});
sleep(1); // Wait between iterations
}
// Teardown function (runs once after test)
export function teardown(data) {
// Clean up
}
Conceptos clave:
Antes de probar su aplicación, vamos a entender los cinco tipos principales de pruebas de carga y cuándo utilizar cada uno:
graph TD
A[Performance Testing Types] --> B[Smoke Test]
A --> C[Load Test]
A --> D[Stress Test]
A --> E[Spike Test]
A --> F[Soak Test]
B --> B1[1-2 VUs<br/>30s-1min<br/>Basic Functionality]
C --> C1[Normal Load<br/>5-15 minutes<br/>Verify SLAs]
D --> D1[Gradual Increase<br/>10-30 minutes<br/>Find Breaking Point]
E --> E1[Sudden Spike<br/>5-10 minutes<br/>Test Recovery]
F --> F1[Normal Load<br/>Hours/Days<br/>Memory Leaks]
style B stroke:#90EE90
style C stroke:#87CEEB
style D stroke:#FFD700
style E stroke:#FF6347
style F stroke:#DDA0DD
Finalidad: Verificar los trabajos del sistema bajo carga mínima
Cuándo usar:
Características:
Finalidad: Evaluar el rendimiento bajo la carga normal esperada
Cuándo usar:
Características:
Finalidad: Encuentra el punto de ruptura del sistema
Cuándo usar:
Características:
Finalidad: Comportamiento de prueba bajo picos repentinos de tráfico
Cuándo usar:
Características:
Finalidad: Encontrar fugas de memoria y degradación con el tiempo
Cuándo usar:
Características:
graph LR
A[Start] --> B{Smoke Test Pass?}
B -->|No| C[Fix Issues]
C --> A
B -->|Yes| D{Load Test Pass?}
D -->|No| E[Optimize]
E --> D
D -->|Yes| F{Stress Test}
F --> G{Found Limit?}
G -->|Yes| H[Document Capacity]
G -->|No| I[Increase Load]
I --> F
H --> J{Spike Test Pass?}
J -->|No| K[Improve Resilience]
K --> J
J -->|Yes| L{Soak Test}
L --> M{Memory Stable?}
M -->|No| N[Fix Memory Leaks]
N --> L
M -->|Yes| O[Production Ready]
style O stroke:#90EE90
Con tantas herramientas de prueba de carga disponibles, ¿por qué debería elegir k6? Comparemos k6 con las alternativas más populares:
Apache JMeter es el veterano de las herramientas de prueba de carga (desde 1999).
Característica: k6 JMeter |---------|----|---------| | Instalación binario único, sin dependencias Requiere Java, instalación más pesada | Definición de prueba Código JavaScript XML o GUI | Uso de los recursos Peso ligero (Go) Peso pesado (Java) | Integración CI/CD Excelente (CLI-first) Requiere plugins | Curva de aprendizaje Fácil para los desarrolladores Steeper, centrado en la interfaz gráfica | Apoyo al Protocolo HTTP, WebSockets, gRPC Broader (FTP, JDBC, SMTP, etc.)
Cuándo usar JMeter en su lugar:
Por qué k6 es mejor para la mayoría de las aplicaciones ASP.NET Core:
Locust es una herramienta de prueba de carga basada en Python, popular en tiendas de Python.
Característica k6 Locust |---------|----|---------| | Idioma JavaScript Python | Desempeño Muy rápido (go runtime) Más lento (Python GIL) | Facilidad de uso Simple JavaScript Pythónico, fácil | Pruebas distribuidas k6 Nube (pagado) Incorporado (gratuito) | Interfaz de usuario de la web Excelente interfaz de usuario en tiempo real | Exportación de métricas Muchos formatos CSV, web UI
Cuándo usar Locust en su lugar:
Por qué k6 es mejor para la mayoría de las aplicaciones ASP.NET Core:
Gatling es una herramienta basada en Scala con excelentes informes.
Característica k6 Gatling |---------|----|---------| | Idioma JavaScript Scala/Java | Informes Básico (+ extensiones) Hermosos informes HTML incorporados | Curva de aprendizaje Fácil Moderado (Scala DSL) | Desempeño # Excelente # # Excelente # # Excelente # # Excelente # # Excelente # # Excelente # # Excelente # # Excelente # # | Código abierto Completamente abierto Abierto con complementos de empresa | Servicio en la nube k6 Cloud Gatling Enterprise
Cuándo usar Gatling en su lugar:
Por qué k6 es mejor para la mayoría de las aplicaciones ASP.NET Core:
Artillería es otra herramienta de prueba de carga JavaScript.
Característica: Artillería. |---------|----|---------| | Definición de prueba Código JavaScript YAML + ganchos JS | Desempeño Más rápido (Go) Más lento (Node.js) | Facilidad de uso Basado en código YAML basado en configuración | Construido para Pruebas de carga Carga + pruebas funcionales | Aserciones Umbrales excelentes Expectativas básicas | Extensibilidad Extensiones Plugins
Cuándo usar Artillery en su lugar:
Por qué k6 es mejor para la mayoría de las aplicaciones ASP.NET Core:
wrk es una herramienta de benchmarking HTTP ligera.
|---------|----|---------| | Facilidad de uso API de alto nivel C de bajo nivel + Lua | Escenarios Soporte de escenario rico Basic HTTP sólamente | Métricas Comprensivo Básico | Guión # JavaScript # # Lua # | Caso de uso Pruebas de carga completa Parámetros rápidos
Cuándo usar wrk en su lugar:
Por qué k6 es mejor para la mayoría de las aplicaciones ASP.NET Core:
Playwright y Cipreses son herramientas de automatización del navegador que a veces se utilizan para las pruebas de carga.
Característica de Playwright/Cypress |---------|----|---------| | Enfoque Protocolo-nivel HTTP Navegador real | Desempeño Miles de VUs Decenas de navegadores | Uso de los recursos Peso ligero Pesado (navegadores) | Ejecución de JavaScript # No # # Sí # | Caso de uso primario Pruebas de carga E2E pruebas funcionales
Cuándo usar Playwright/Cypress en su lugar:
Por qué k6 es mejor para la mayoría de las aplicaciones ASP.NET Core:
Elija k6 cuando desee:
k6 es perfecto para:
Considere alternativas si necesita:
Ahora que usted entiende lo que es k6, cómo instalarlo, los tipos de pruebas de rendimiento disponibles, y por qué k6 es una gran opción para las aplicaciones ASP.NET Core, usted está listo para empezar a escribir pruebas reales.
Continuar a Parte 2: Aplicación práctica donde cubriremos:
© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.