Подтвердить что ты не робот

JMeter как НЕ сбой 500 Внутренние ошибки сервера

Я использую JMeter как инструмент unit test, в параметризованных вызовах, где я ожидаю, что некоторые ответы будут 500 внутренних ошибок сервера. Я использую BeanShell Assertions для проверки ответов.

Я хочу, чтобы некоторые из 500 внутренних ошибок сервера НЕ были помечены как сбои, если ответ содержит указанный текст. Все 500 ошибок сервера отмечены как сбои. Возможно ли изменить поведение?

Ниже приведена выдержка из утверждения BeanShell.

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;
    }
}  

Спасибо и с уважением

4b9b3361

Ответ 1

Самое простое решение ниже:

если вы хотите делать другие вещи в коде, тогда: Доступ и изменение SampleResult - чтобы изменить статус с "FAIL" на "PASS", если код равен 500 - из вашего BeanShell Assertion/BSF Assertion или используйте BeanShell PostProcessor/BSF PostProcessor вместо этого - все они имеют доступ к объекту SampleResult.

1. Утверждение BeanShell

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

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

2. Постпроцессор BeanShell
Вместо этого используйте prev - для доступа к объекту SampleResult сэмплера, к которому прикреплен один постпроцессор:

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

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

Ответ 2

Другим возможным решением является использование Ответ на ответ с отмеченным флажком "Игнорировать статус" , добавленным в ваш сэмплер:

Игнорировать статус
Поручает JMeter сначала установить статус на успех.

Общий успех образца определяется путем объединения результат утверждения с существующим статусом Response. Когда Выбран флажок "Игнорировать статус", статус ответа принудительно успешно, прежде чем оценивать утверждение.

HTTP Ответы со статусами в диапазонах 4xx и 5xx обычно рассматриваются как безуспешными. Флажок "Игнорировать статус" можно использовать для установки статус успешно до выполнения дальнейших проверок. Обратите внимание, что это приведет к устранению любых предыдущих ошибок утверждения, поэтому убедитесь, что это значение установлено только для первого утверждения.

Ответ 3

Добавьте запрос ответа на запрос после запроса, который вы хотите передать, и установите флажок "Игнорировать статус".

Ответ 4

Используя утверждение BeanShell, принудительно пропустите HTTP-пробоотборник, а затем передайте/сбой в регулярном выражении утверждения Beanshell:

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;
}