Script conversion.js


const fs = require('fs');
const path = require('path');
const csvFilePath = path.join(__dirname, 'logs.csv');

function checkStatus(requestParams,response, context, ee, next) {
   
    if (response.statusCode !== 200 && response.statusCode !== 201 && response.statusCode !== 204 && response.statusCode !== 404 && response.statusCode !== 409){
        var endpoint = `${requestParams.method}:${requestParams.url}`
        console.log("Usuario error:"+context.vars.username)
        console.log("StatusCode: "+ response.statusCode)

        if (typeof requestParams.searchParams !== 'undefined'){
            endpoint = `${requestParams.method}:${requestParams.url}?${requestParams.searchParams}`
        }

        console.log("Endpoint: "+ endpoint)

        const csvLine = `${context.vars.username},${endpoint},${response.statusCode}\n`;
        fs.appendFile(csvFilePath, csvLine, (err) => {
            if (err) {
                console.error("Error writing to CSV:", err);
            } else {
                console.log("log saved to CSV");
            }
        });
    }
    return next();
}

async function loadMiu4Home(page, vuContext) {
  await page.goto("/");
  await page.getByPlaceholder("Usuario").fill(  vuContext.vars.USERNAME )
  await page.getByPlaceholder("Contraseña").fill( vuContext.vars.CLAVE )
  await page.click('text=Ingresar');
  await page.waitForURL();
  await page.screenshot({ path: 'home.png', fullPage: true });
}


async function loadMiu4Perfil(page, vuContext) {
  await page.goto("/");
  await page.getByPlaceholder("Usuario").fill(  vuContext.vars.USERNAME )
  await page.getByPlaceholder("Contraseña").fill( vuContext.vars.CLAVE )
  await page.click('text=Ingresar');
  await page.waitForURL();
  await page.goto("/perfil");
  await page.waitForURL();
  await page.screenshot({ path: 'perfil.png', fullPage: true });
}



module.exports = {
  loadMiu4Home,
  loadMiu4Perfil
}

Artillery Script

config:
  target: "https://mi-web.cl"
  engines:
    playwright:
      aggregateByName: true
      defaultNavigationTimeout: 300000
      showAllPageMetrics: true
      extendedMetrics: true
  phases:
    -
      arrivalRate: 1
      duration: 60
      name: Start
    - duration: 120
      arrivalRate: 10
      maxVusers: 275
      name: Warm up
    - duration: 300
      arrivalRate: 275
      maxVusers: 275
      name: Sustained load
    -
      arrivalRate: 1
      duration: 300
      rampTo: 0
      name: Ramp down load   
  processor: "./conversion.js"
  payload:
    path: './resources/user_miu4.csv'
    fields:
      - 'USERNAME'
      - 'CLAVE'
    order: sequence
    cast: false
    skipHeader: true
  http:
    timeout: 10000
    extendedMetrics: true


scenarios:
  - engine: "playwright"
    name: "--> Load Home MIU4"
    testFunction: "loadMiu4Home"
    weight: 9
  - engine: "playwright"
    name: "--> Load Perfil MIU4"
    testFunction: "loadMiu4Perfil"
    weight: 1

 


Categories: Software