web-dev-qa-db-fra.com

JMeter comment NE PAS échouer 500 erreurs de serveur interne

J'utilise JMeter comme outil de test unitaire, dans les appels paramétrés où je m'attends à ce que certaines des réponses soient 500 erreurs de serveur internes. J'utilise les assertions BeanShell pour vérifier les réponses.

Je souhaite que certaines des 500 erreurs de serveur internes ne soient PAS marquées comme des échecs si la réponse contient un texte spécifié. Les 500 erreurs de serveur sont marquées comme des échecs. Est-il possible de changer le comportement?

Vous trouverez ci-dessous un extrait de l'assertion 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;
    }
}  

Merci et salutations

30
Gazen Ganados

UPD: veuillez trouver la solution la plus simple et "native" ci-dessous:


Si vous voulez faire des choses délicates dans le code, utilisez l'approche suivante.

Accédez et modifiez SampleResult pour changer l'état de "FAIL" à "PASS" si le code est à 500 de votre JSR223 Assertion ou utilisez JSR223 PostProcessor à la place, ils ont tous accès à SampleResult Object.

1. Assertion JSR223

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

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

2. Postprocesseur JSR223
Utilisez prev à la place - pour accéder à l'objet SampleResult de l'échantillonneur auquel un post-processeur est attaché:

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

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

Une autre solution possible consiste à utiliser assertion de réponse avec l'indicateur "Ignorer l'état" coché ajouté à votre échantillonneur:

Ignorer l'état
Demande à JMeter de définir le statut sur succès initialement.

Le succès global de l'échantillon est déterminé en combinant le résultat de l'assertion avec le statut de réponse existant. Lorsque la case Ignorer le statut est cochée, le statut de la réponse est forcé à réussi avant d'évaluer l'assertion.

Les réponses HTTP avec des statuts dans les plages 4xx et 5xx sont normalement considérées comme infructueuses. La case à cocher "Ignorer l'état" peut être utilisée pour définir l'état avec succès avant d'effectuer d'autres vérifications. Notez que cela aura pour effet d'effacer les échecs d'assertion précédents. , assurez-vous donc que cela n'est défini que sur la première assertion.

48
Aliaksandr Belik

Ajoutez une "assertion de réponse" après la demande que vous souhaitez transmettre et cochez la case "Ignorer le statut".