JMeter, как НЕ дать сбой 500 внутренних ошибок сервера - PullRequest
27 голосов
/ 20 марта 2012

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

Я хочу, чтобы некоторые из 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;
    }
}  

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

Ответы [ 4 ]

48 голосов
/ 29 марта 2012

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

Игнорировать состояние
УказываетJMeter, чтобы установить статус к успеху изначально.

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

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

38 голосов
/ 20 марта 2012

UPD: пожалуйста, найдите самое простое и «родное» решение ниже:


В случае, если вы хотите сделать некоторые хитрые вещи в коде, используйте следующий подход.

Доступ и изменение SampleResult для изменения состояния с «FAIL» на «PASS», если код 500 из вашего утверждения JSR223 или используется JSR223 PostProcessor вместо этого - все они имеют доступ к объекту SampleResult.

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

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

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

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

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

    /* the same is 
    prev.setSuccessful(true);
    prev.setResponseCodeOK();
    prev.setResponseMessageOK();
    */
}
0 голосов
/ 23 декабря 2015

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

0 голосов
/ 24 июня 2015

Используя утверждение BeanShell, заставьте HTTP Sampler проходить, а затем вместо этого выполнять / не выполнять обычный оператор утверждения 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;
}
...