CursosEmpresasBlogLiveConfPrecios

Counter Metric

Clase 12 de 27 • Curso de Performance Testing en Node.js con K6

Clase anteriorSiguiente clase
    Facundo Carroz

    Facundo Carroz

    student•
    hace 3 años

    Hola 🖐. Aquí la resolución del reto.

    Es un ejemplo que le falta mucha optimización pero sirve para entender lo visto en la clase 😄

    import http from 'k6/http'; import { Counter } from 'k6/metrics'; export const options = { vus: 10, duration: '20s' } const productsCallCounter = new Counter('products_call_counter'); const categoriesCallCounter = new Counter('categories_call_counter'); const usersCallCounter = new Counter('users_call_counter'); export default function(){ const randomEndpoint = random(0, 2);// Return random value between 0 and 2 let selectedEndpoint; switch(randomEndpoint){ case 0: selectedEndpoint = "products" productsCallCounter.add(1); break; case 1: selectedEndpoint = "categories"; categoriesCallCounter.add(1); break; case 2: selectedEndpoint = "users"; usersCallCounter.add(1); break; } const response = http.get("https://api.escuelajs.co/api/v1/" + selectedEndpoint); } function random(min, max) { return Math.floor((Math.random() * (max - min + 1)) + min); }
    Jefferson Dariel Hilario Jiménez

    Jefferson Dariel Hilario Jiménez

    student•
    hace 2 años

    Creo que esto funciona

    import http from "k6/http"; import { Counter } from "k6/metrics"; export const options = { vus: 10, duration: "20s" } const productsCounter = new Counter("called_products"); const categoriesCounter = new Counter("called_categories"); const userCounter = new Counter("called_users"); export default function(){ var endPoints =[ { url:"https://api.escuelajs.co/api/v1/products", counter:productsCounter }, { url:"https://api.escuelajs.co/api/v1/categories", counter:categoriesCounter }, { url:"https://api.escuelajs.co/api/v1/users", counter:userCounter } ] callRandomEndpoint(endPoints); } function callRandomEndpoint(arr){ let numeroAleatorioRango = Math.floor(Math.random() * 3); let randomEndPoint = arr[numeroAleatorioRango]; let response = http.get(randomEndPoint.url); randomEndPoint.counter.add(1); }
    Jefferson Riobueno

    Jefferson Riobueno

    student•
    hace 2 años

    Consulta si especifico 10 VUS y en interacciones sale 1589, quiere decir que hubo 1589 peticiones a esa url cierto?

    Irving Juárez

    Irving Juárez

    student•
    hace 6 meses

    Así es como yo resolveria el reto

    const productsCounter = new Counter('productsCounter', false); const categoriesCounter = new Counter('categoriesCounter', false); const usersCounter = new Counter('usersCounter', false); const endpointBase = "https://api.escuelajs.co/api/v1"; const endpoints = [ { name: "products", counter: productsCounter }, { name: "categories", counter: categoriesCounter }, { name: "users", counter: usersCounter } ] export default function() { const randomNumber = Math.floor(Math.random() * endpoints.length); let randomEndpoint = endpoints[randomNumber]; let response = http.get(`${endpointBase}/${randomEndpoint.name}`); randomEndpoint.counter.add(1); }
    Mateo Andrés Piana

    Mateo Andrés Piana

    student•
    hace 9 meses

    Una posible solución:

    import http from "k6/http"; import { Counter } from 'k6/metrics' export const options = { vus: 10, duration: "20s" } const productsCounter = new Counter("called_products") const categoriesCounter = new Counter("called_categories") const usersCounter = new Counter("called_users") export default function () { const randomNumber = Math.floor(Math.random() * 3) const urls = [ "https://api.escuelajs.co/api/v1/products", "https://api.escuelajs.co/api/v1/categories", "https://api.escuelajs.co/api/v1/users" ] const counters = [ productsCounter, categoriesCounter, usersCounter ] let _ = http.get(urls[randomNumber]) counters[randomNumber].add(1) } ```import http from "k6/http";import { Counter } from 'k6/metrics' export const options = {  vus: 10,  duration: "20s"} const productsCounter = new Counter("called\_products")const categoriesCounter = new Counter("called\_categories")const usersCounter = new Counter("called\_users") export default function () {  const randomNumber = Math.floor(Math.random() \* 3)  const urls = \[    "https://api.escuelajs.co/api/v1/products",    "https://api.escuelajs.co/api/v1/categories",    "https://api.escuelajs.co/api/v1/users"  ]  const counters = \[    productsCounter,    categoriesCounter,    usersCounter  ]  let \_ = http.get(urls\[randomNumber])  counters\[randomNumber].add(1)}
    William Schnaider Torres Bermon

    William Schnaider Torres Bermon

    student•
    hace 2 años

    K6 documentation: https://k6.io/docs/javascript-api/k6-metrics/counter/

    CRISTIAN DAVID ARENAS GOMEZ

    CRISTIAN DAVID ARENAS GOMEZ

    student•
    hace 3 años

    Hola 👨‍💻 gente les dejo mi solución al reto me guie por la solución del compañero Facundo que me pareció muy buena solo realice algunos cambios:

    // Importar los módulos necesarios de k6 import http from 'k6/http'; import { Counter } from 'k6/metrics'; import { check } from 'k6'; // Definir las opciones de configuración para la prueba export const options = { vus: 10, // Número de usuarios virtuales duration: '20s' // Duración de la prueba }; // Definir contadores para cada endpoint const productsCallCounter = new Counter('products_call_counter'); const categoriesCallCounter = new Counter('categories_call_counter'); const usersCallCounter = new Counter('users_call_counter'); // Función principal de la prueba export default function testEcommerceAPI() { // Seleccionar aleatoriamente un endpoint de la API const randomEndpoint = random(0, 2); let selectedEndpoint; switch (randomEndpoint) { // Endpoint "products" case 0: selectedEndpoint = "products"; productsCallCounter.add(1); break; // Endpoint "categories" case 1: selectedEndpoint = "categories"; categoriesCallCounter.add(1); break; // Endpoint "users" case 2: selectedEndpoint = "users"; usersCallCounter.add(1); break; } // Enviar una solicitud GET a la API con el endpoint seleccionado const response = http.get(`https://api.escuelajs.co/api/v1/${selectedEndpoint}`); // Verificar la validez de la respuesta check(response, { "status is 200": (r) => r.status === 200, // Estado 200 "has expected properties": (r) => r.json().hasOwnProperty("data") // Contiene la propiedad "data" }); // Obtener la duración y el tamaño del cuerpo de la respuesta const responseBodySize = response.body.length; const responseTime = response.timings.duration; // Imprimir información sobre la respuesta en la consola console.log(`Endpoint: ${selectedEndpoint} - Response size: ${responseBodySize} - Response time: ${responseTime}`); } // Función auxiliar para generar un número aleatorio en un rango específico function random(min, max) { return Math.floor((Math.random() * (max - min + 1)) + min); }
    manuel pineda

    manuel pineda

    student•
    hace 3 años

    Comparto mi solucion del ejercicio:

    import { Counter } from 'k6/metrics'; import http from 'k6/http'; import { randomIntBetween } from 'https://jslib.k6.io/k6-utils/1.4.0/index.js'; export const options = { stages: [{ duration: '10s', target: 10 }] }; const endpoints = [ { url: 'https://api.escuelajs.co/api/v1/products', counter: new Counter('product calls'), }, { url: 'https://api.escuelajs.co/api/v1/categories', counter: new Counter('categories calls'), }, { url: 'https://api.escuelajs.co/api/v1/users', counter: new Counter('users calls'), }, ] export default function () { const number = randomIntBetween(0, 2); const { url, counter } = endpoints[number]; const res = http.get(url); counter.add(1); }
    Jhon Edison Garcia Lopez

    Jhon Edison Garcia Lopez

    student•
    hace 3 años

    Aqui mi solucion:

    import http from "k6/http"; import { Counter } from "k6/metrics"; const apiUrl = "https://api.escuelajs.co/api/v1"; export const options = { vus: 10, duration: "20s", }; const productsCounter = new Counter("called_products"); const categoriesCounter = new Counter("called_categories"); const usersCounter = new Counter("users_categories"); export default function () { const counters = [ { url: `${apiUrl}/products`, counter: productsCounter }, { url: `${apiUrl}/categories`, counter: categoriesCounter }, { url: `${apiUrl}/users`, counter: usersCounter }, ]; const { counter, url } = counters[Math.floor(Math.random() * 3)]; http.get(url); counter.add(1); }
    Diego Vergara

    Diego Vergara

    student•
    hace 3 años

    Aqui mi solucion:

    import http from "k6/http"; const uri = "https://api.escuelajs.co/api/v1"; export const options = { vus: 1, duration: "10s", }; export default function () { let randomNumber = Math.floor(Math.random() * 3); const endPoints = { products: `${uri}/proucts`, categories: `${uri}/categories`, users: `${uri}/users`, }; const endPoint = Object.values(endPoints)[randomNumber]; console.log(endPoint); let response = http.get(endPoint); }
    Gerardo Alberto Soto Alvarez del Castillo

    Gerardo Alberto Soto Alvarez del Castillo

    student•
    hace 3 años

    Esta es la soluci[on que hice, creo que me faltaría guardar los counters y las url de la API en objetos para asi quitar los if anidados:

    import http from "k6/http"; import { Counter } from "k6/metrics"; export const options = { vus: 10, duration: '20s' } const categoriesCounter = new Counter("called_products"); const productsCounter = new Counter("counter_products"); const usersCounter = new Counter("users_counter"); export default function(){ let randomRequest = parseInt(Math.random()*3); if (randomRequest === 0){ let response = http.get('https://api.escuelajs.co/api/v1/categories'); categoriesCounter.add(1); } else if (randomRequest === 1) { let products = http.get('https://api.escuelajs.co/api/v1/products'); productsCounter.add(1); } else { let users = http.get('https://api.escuelajs.co/api/v1/users'); usersCounter.add(1); }; };

    Salida:

    Solucion_counters.png

Escuelas

  • Desarrollo Web
  • English Academy
  • Marketing Digital
  • Inteligencia Artificial y Data Science
  • Ciberseguridad
  • Liderazgo y Habilidades Blandas
  • Diseño de Producto y UX
  • Contenido Audiovisual
  • Desarrollo Móvil
  • Diseño Gráfico y Arte Digital
  • Programación
  • Negocios
  • Blockchain y Web3
  • Recursos Humanos
  • Finanzas e Inversiones
  • Startups
  • Cloud Computing y DevOps

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads