2017-11-16 2 views
0

Ich bin neu in Jmeter BeanShell Scripting/Java und derzeit Problem mit Skript unten.Jmeter Bean-Shell - Matching Korrekte Regex-Array-Wert und Speichern von Gruppen-ID/Instanz in eine benutzerdefinierte Variablen

Verwenden von Regular Expression Extractor Ich bin in der Lage Array aller möglichen Werte zu ziehen. Zum Beispiel: 10 Datumswerte und die Variable werden als ${RegExValue_All} (Vorlage: $1$; Match: -1) definiert

Beispielwert:

01/01/2017 
01/01/2017 
01/01/2017 
04/01/2017 
05/01/2017 
07/01/2017 
07/01/2017 
08/01/2017 
10/01/2017 
10/01/2017 

Jetzt versuche ich, einen Beanshell Skript zu schreiben bestimmtes Datum entsprechen und ziehen Sie seine Ordinalzahl/Index/Iterationszahl heraus und speichern Sie sie in einer benutzerdefinierten Variable ${Matched_Iteration_Value}, die derzeit leer ist. Wenn ich den unten stehenden Code verwende, kann ich die korrekten erforderlichen Werte vergleichen, da ich für die Schleifenzählung 10 eingestellt habe, aber die Ordinal/Index/Iterationsnummer nicht speichern und verschiedene Fehler erhalten kann.

Auch ich möchte Code, um die Ausführung zu stoppen, sobald die erste Übereinstimmung erhalten wird und seine Iteration Nummer in einer Variablen gespeichert werden, die ich in nachfolgenden Anfragen verwenden muss.

import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.text.ParseException; 
import java.util.Date; 
matches = (vars.get("RegExValue _All")); 
for (int i=1; i<=20; i++) { 
    if (vars.get("cPIGValueDate_All_" + i).equals("07/01/2017")) { 
     log.info("Variable: cPIGValueDate_All_" + i + " is the Correct PIG"); 
     vars.putobject("Matched_Iteration_Value ",i); 
    } 
} 

Antwort

0

Ihr Skript und Erklärung sind etwas widersprüchlich, also muss ich einige Dinge übernehmen:

  • Das Regex-Extraktor mit Referenz Name konfiguriert ist: RegExValue. So mit Spiel: -1, wenn sie mehr als 1 Tag findet, wird es sie als Variablen mit Namen RegExValue_1, speichern RegExValue_2
  • Dass Sie RegExValue _All nicht kümmern, da Sie es abrufen, aber nicht überall verwendet wird, und es ist nicht Teil Ihrer Frage
  • Dass Sie Termine als Daten (und nicht als Strings) vergleichen wollen, da Sie
  • Dass Ihr Datum ist im Format dd/MM/yyyy

so verschiedene datumsbezogenen Klassen importiert

  1. Zunächst sollte die Schleife selbst auf der Variablen RegExValue_matchNr basieren, die automatisch von JMeter erstellt wird, wenn Regex mehr als eine Übereinstimmung hat. Dies ist besser als eine feste Kodierschleife auf 20.
  2. Sie können sowohl das erwartete als auch das tatsächliche Datum von der Zeichenfolge in Date mit SimpleDateFormat konvertieren.
  3. Dazu vergleichen sie als Daten
  4. Und schließlich speichern Variable und beenden Sie die Schleife, wenn die Reisedaten gleichen

Hier ist der Code sind:

import java.lang.Integer; 
import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

// 1. 
int count = 0; 
try { 
    count = Integer.parseInt(vars.get("RegExValue_matchNr")); 
} 
catch(Exception e) { } 

// 2. 
DateFormat format = new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH); 
Date expectedDate = format.parse("07/01/2017"); 

for(int i = 1; i <= count; i++) 
{ 
    Date actualDate = null; 
    try { 
     actualDate = format.parse(vars.get("RegExValue_" + i)); 
    } 
    catch(Exception e) { } 

    // 3. 
    if(actualDate != null && expectedDate.compareTo(actualDate) == 0) { 
     log.info("Variable: RegExValue_" + i + " is the Correct PIG"); 
     // 4. 
     vars.put("Matched_Iteration_Value", "" + i); 
     return; 
    } 
} 
Verwandte Themen