2016-11-03 4 views
1

Ich erstelle einen Jmeter scritp und die Scnerio, wo ich geschlagen werde, ist wie folgt: Zuerst versuchen, Login zu einer Anwendung mit Passwort 1, wenn Login fehlschlägt dann versuchen mit Passwort 2, wenn Login schlägt auch mit password2 fehl, dann sollte das Ergebnis fehlschlagen sonst passiere. Ich habe eine HTTP-Anfrage erstellt und Password1, Passwort2 sind benutzerdefinierte Variablen.JMeter authentifizieren Login mit zwei Passwörtern

+0

, wenn Sie das falsche Passwort ein, tut Server Rückkehr 403 Codefehler? oder 200 Erfolgscode mit einer Fehlermeldung im HTML-Body? Ihr Design hängt davon ab. –

+0

@Naveen Wenn wir ein falsches Passwort senden, wird 200 Erfolgscode mit einer Fehlermeldung im Hauptteil zurückgegeben. Ich habe regEx Extractor verwendet, um die Fehlermeldung zu erhalten und habe sie in einer Referenz gespeichert. –

Antwort

0

Haben Sie zwei Anfragen Req_1 und Req_2 und konfigurieren Sie sie mit 'Login' Aktion eins mit jedem Passwort. Verwenden Sie 'Regular Expression Extractor' oder andere, um die Antwort auf Req_1 zu analysieren und 'If Controller' zu verwenden, um festzustellen, ob es bestanden wurde oder nicht, und Req_2 nur dann zu senden, wenn die Anmeldung bei Req_1 fehlschlägt.

+0

Ich mache das gleiche. Ich habe Regular Expression Extractor in Req_1 verwendet und den Status "bestanden" oder "fehlgeschlagen" in einer Referenzvariablen mit dem Namen "StatusCode" gespeichert. Wird dann verwendet, wenn der Controller prüft, ob er bestanden wurde oder nicht, und dann Req_2 nur dann senden, wenn Req_1 fehlschlägt. Das ist in Ordnung. –

0

Sampler Beanshell auf den Testplan hinzufügen und den folgenden Code (Arbeits Code für die angegebene Website) hinzufügen:

import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.util.EntityUtils; 
import org.apache.http.NameValuePair; 
import org.apache.http.message.BasicNameValuePair; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.CloseableHttpResponse; 
import java.util.List; 
import java.util.ArrayList; 


HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httpPost = new HttpPost("http://httpbin.org/post"); 
List nvps = new ArrayList(); 
nvps.add(new BasicNameValuePair("username", "vip")); 
nvps.add(new BasicNameValuePair("password", "secret")); 
httpPost.setEntity(new UrlEncodedFormEntity(nvps)); 
HttpResponse response = httpclient.execute(httpPost); 
String responseString = EntityUtils.toString(response.getEntity()); 
String responseCode = String.valueOf(response.getStatusLine().getStatusCode()); 

String errorMessage = "secret"; 

if(responseString.contains(errorMessage)){ 
    log.info("first time failed"); 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httpPost = new HttpPost("http://httpbin.org/post"); 
    List nvps = new ArrayList(); 
    nvps.add(new BasicNameValuePair("username", "vip")); 
    nvps.add(new BasicNameValuePair("password", "secret")); 
    httpPost.setEntity(new UrlEncodedFormEntity(nvps)); 
    HttpResponse response = httpclient.execute(httpPost); 
    String responseString = EntityUtils.toString(response.getEntity()); 
    String responseCode = String.valueOf(response.getStatusLine().getStatusCode()); 
    if(responseString.contains(errorMessage)){ 
     log.info("second time failed"); 
     IsSuccess = false; 
     ResponseCode = "403"; 
     ResponseMessage = "Login failed with both the passwords"; 
    } 
} 
return responseString; 

obigen Skript zu „Script“ Textbereich im Beanshell Sampler.

Bild-Referenz: enter image description here

Hinweis: Ersetzen Sie die URL, Benutzername, Passwort und Fehlermeldung nach Ihren Wünschen. Fügen Sie ggf. Header hinzu.

Wenn Sie den HTTP-Sampler verwenden möchten, folgen Sie dem von @SaiMatam vorgeschlagenen Verfahren.

  1. hinzufügen Wenn Controller, vergleichen, ob die Fehlermeldung (Schreibbedingung in Feld Bedingung) empfangen wird.
  2. Keep the same sampler (change only the password) inside If Controller. Dieser Sampler würde nur ausgeführt werden, wenn die Bedingung erfüllt ist.
  3. Hinzufügen Response Assertion für den Sampler in If Controller. Add the error message in "Pattern to test" field. select "Not" checkbox in "Pattern Matching Rules". Dies stellt sicher, dass, wenn die Fehlermeldung empfangen wird, die zweite Anfrage als FAIL von JMeter markiert wird (wir überprüfen, dass die Antwort die gegebene Zeichenkette/das Muster nicht enthalten sollte), andernfalls wird sie als PASS markiert.

Referenzen:

  1. http://jmeter.apache.org/usermanual/component_reference.html#If_Controller
  2. http://jmeter.apache.org/usermanual/component_reference.html#Response_Assertion
+0

@Sai Das gleiche tun. Ich habe Regular Expression Extractor in Req_1 verwendet und den Status "bestanden" oder "fehlgeschlagen" in einer Referenzvariablen mit dem Namen "StatusCode" gespeichert. Wird dann verwendet, wenn der Controller überprüft, ob Req_1 bestanden wurde oder nicht, und Req_2 nur dann senden, wenn Req_1 fehlschlägt. Dies ist in Ordnung, aber was ich will, ist in der Ansicht Ergebnisse Baum Liste, es sollte nur eine Login-Anfrage, die entweder pass oder nicht bestanden werden sollte.Und es sollte bestanden werden, wenn eines der Passwörter funktioniert. Ich bin nicht mit Beanshell und JSR223 Post Post Prozessoren vertraut und fragte mich, ob es möglich ist, diese zu verwenden. Ich kenne Core Java. –

+0

können Sie mit BeanShell Sampler versuchen und Java-Code schreiben, um eine HTTP-Post-Anfrage mit HTTPClient-Bibliotheken zu senden. Ich werde die Antwort einmal posten. –

+0

Referenz für die Erstellung GET-Anfrage mit BeanShell-Sampler ist hier, http://Stackoverflow.com/a/36398252/2575259. Darauf kannst du aufbauen. –

Verwandte Themen