JMeter cómo NO fallar 500 Errores Internos del Servidor


Estoy usando JMeter como una herramienta de prueba unitaria, en llamadas parametrizadas donde espero que algunas de las respuestas sean 500 errores internos del servidor. Estoy usando Aserciones de BeanShell para comprobar las respuestas.

Quiero que algunos de los 500 errores internos del servidor NO se marquen como errores si la respuesta contiene un texto especificado. Los 500 errores del servidor están marcados como errores. Es posible cambiar el comportamiento?

A continuación se muestra un extracto del BeanShell Afirmación.

if (ResponseCode.equals("500")) {
    Failure = false;
    String respData = new String(ResponseData);

    if (! respData.contains("specific Text")) {
        Failure = true;
        FailureMessage = "500 Internal Server Error:  Unexpected Response.   " + 
            "Response Message: " + respData;
    }
}  

Gracias y Saludos

Author: Gazen Ganados, 2012-03-20

4 answers

UPD: por favor, encuentre la solución más simple y "nativa" a continuación:


En caso de que desee hacer algunas cosas complicadas en el código, use el siguiente enfoque.

Acceda y modifique SampleResult para cambiar el estado de "FAIL" a "PASS" si el código es 500 de su Aserción JSR223 o use Postprocesador JSR223 en su lugar - todos tienen acceso a SampleResult Objeto.

1. Aserción JSR223

if (ResponseCode.equals("500") == true) { 
    SampleResult.setResponseOK();  

    /* the same is 
    SampleResult.setSuccessful(true);
    SampleResult.setResponseCodeOK();
    SampleResult.setResponseMessageOK();
    */
}

2. JSR223 postprocesador
Use prev en su lugar-para acceder al objeto SampleResult del sampler al que se adjunta un post-procesador:

if (prev.getResponseCode().equals("500") == true) { 
    prev.setResponseOK();  

    /* the same is 
    prev.setSuccessful(true);
    prev.setResponseCodeOK();
    prev.setResponseMessageOK();
    */
}
 33
Author: Aliaksandr Belik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-17 17:12:05

Otra posible solución es usar Aserción de respuesta con la marca marcada "Ignorar estado"agregada a su sampler:

Ignorar estado
Indica a JMeter que establezca el estado en éxito inicialmente.

El éxito global de la muestra se determina mediante la combinación de resultado de la aserción con el estado de respuesta existente. Cuando el Ignorar estado casilla de verificación está seleccionada, el estado de la respuesta se ve obligado a éxito antes de evaluar el Afirmación.

Las respuestas HTTP con estados en los rangos 4xx y 5xx se consideran normalmente como fallido. La casilla de verificación" Ignorar estado " se puede usar para estado exitoso antes de realizar comprobaciones adicionales. Tenga en cuenta que esto tendrá el efecto de borrar cualquier fallo de aserción anterior, por lo que asegúrese de que esto solo se establezca en la primera aserción.

 44
Author: Aliaksandr Belik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-29 18:49:58

Agregue una "Aserción de respuesta" después de la solicitud que desea pasar y marque la casilla de verificación "Ignorar estado".

 -1
Author: محمود ابراهيم,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-23 17:33:27

Usando una aserción BeanShell, fuerza al Sampler HTTP a pasar y luego pasa / falla en una aserción Beanshell regular en su lugar:

if (ResponseCode.equals("500") == true) { 
    SampleResult.setResponseOK();  

    /* the same is 
    SampleResult.setSuccessful(true);
    SampleResult.setResponseCodeOK();
    SampleResult.setResponseMessageOK();
    */
}
String path = SampleResult.getURL().getPath();
if (!path.contains("anerror")) {
    Failure = true;
    FailureMessage = "URL Path: didn't contain \"anerror\"" +
        System.getProperty("line.separator") + "URL Path detected: " + path;
}
 -2
Author: djangofan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-23 21:58:40