2017-12-04 3 views
1

Dies ist, wie ich Testplan ein:JMeter Extrakt Link regulären Ausdruck in die nächste Anfrage mit leeren Werte übergeben mit

HTTP Request -> Regular Expression Extractor mehrere Links zu extrahieren - Das ist richtig zu extrahieren - Aber einige der verlinkten Seiten sind blank RegularExpressionExtractor --- <a href="(.*)" class="product-link">

Beanshell Sampler - Leer- oder Nullwerte zu filtern - Dies funktioniert

BeanShell Sampler

log.info("Enter Beanshell Sampler"); 
matches = vars.get("url_matchNr"); 
log.info(matches); 

for (Integer i=1; i < Integer.parseInt(matches); i++) 
{ 
    String url = vars.get("url_"+i); 
    //log.info(url1); 
    if(url != null @and url.length() > 0) 
    { 
     log.info(i+"->" + url); 
     //return url; 
     //vars.put("url2", url); 
     vars.put("url2", url); 
     //props.put("url2", url); 
     log.info("URL2:" + vars.get("url2")); 
    } 
} 

ForEach-Controller ForEach Controller

Test Plan

Das Problem, das ich bin vor ist ForEach-Controller läuft durch alle Werte einschließlich Blank oder NULL - Wie kann ich die Schleife nur für die nicht null Leerwerte laufen

Antwort

1

Sie sollten Ihren regulären Ausdruck ändern, um einen leeren Wert auszuschließen

Anstatt einen Wert zu verwenden i ncluding leer mit * Zeichen

<a href="(.*)" class="product-link"> 

+ Zeichen mit nur nicht leere Strings finden:

<a href="(.+)" class="product-link"> 
1

Wie bereits erwähnt, sollten Sie Ihre Regex ändern!

Sie können es direkt ersetzen durch

<a href="(.+)" class="product-link"> 

oder mehr so ​​etwas wie dieses Zwangs:

<a href="^((https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?)$" class="product-link"> 

, die ein regulärer Ausdruck nur übereinstimmen URLs ist.

https://code.tutsplus.com/tutorials/8-regular-expressions-you-should-know--net-6149

Die erste Erfassungsgruppe ist alle Option. Es erlaubt der URL mit "http: //", "https: //" oder keiner von ihnen zu beginnen. Ich habe ein Fragezeichen nach dem s, um URLs zu erlauben, die http oder https haben. Um diese ganze Gruppe optional zu machen, habe ich nur ein Fragezeichen am Ende von hinzugefügt.

Als nächstes folgt der Domänenname: eine oder mehrere Zahlen, Buchstaben, Punkte oder Hypen gefolgt von einem weiteren Punkt, dann zwei bis sechs Buchstaben oder Punkte. Der folgende Abschnitt enthält die optionalen Dateien und Verzeichnisse. Innerhalb der Gruppe möchten wir eine beliebige Anzahl von Schrägstrichen, Buchstaben, Zahlen, Unterstrichen, Leerzeichen, Punkten oder Bindestrichen zuordnen. Dann sagen wir, dass diese Gruppe so oft abgestimmt werden kann, wie wir wollen. Ziemlich viel ermöglicht dies mehrere Verzeichnisse zusammen mit einer Datei am Ende übereinstimmen. Ich habe den Stern anstelle des Fragezeichens verwendet, weil der Stern null oder mehr, nicht null oder eins sagt.Wenn dort ein Fragezeichen verwendet werden soll, kann nur eine Datei/Verzeichnis gefunden werden.

Dann wird ein Schrägstrich zugeordnet, aber er kann optional sein. Schließlich enden wir mit dem Ende der Zeile .

String, Spiele:

http://net.tutsplus.com/about

String, der nicht passt:

http://google.com/some/file!.html (ein Ausrufezeichen enthält)

Viel Glück !!!

0

ForEach Controller funktioniert nicht mit JMeter Properties, Sie müssen das "Input Variable Prefix" zu url_2 ändern und Ihr Test sollte wie erwartet funktionieren.

Beachten Sie auch, dass since JMeter 3.1 it is recommended to use Groovy language for any form of scripting so in Betracht ziehen, auf JSR223 Sampler und Groovy Sprache bei nächster verfügbarer Gelegenheit zu migrieren.

Groovy has much better performance während Beanshell zu einem Engpass werden kann, wenn es um immense Lasten geht.

+0

In Beanshell Sampler Ich habe diese \t für (Integer i = 1; i 0!) \t \t { \t log.info (i + "->" + url); \t //l1=__javaScript(url.length); \t //log.info("Length:"+l1); \t // Rückkehrurl; vars.put ("URL2", URL); //props.put("url2 ", url); log.info ("URL2:" + vars.get ("url2")); \t} } In ForEachController Input-Variable Ich bin mit $ {url2} und Output Variable url_out aber seine nicht funktioniert –

+0

Natürlich wird es nicht funktionieren, würde ich vorschlagen, meine Antwort so oft neu zu lesen, wie es sein wird, erforderlich, um zu sehen, was Sie am "Input Variable Prefix" –

+0

setzen sollte Verwenden von URL_2 funktioniert super. Jetzt möchte ich das weiter ausdehnen und die URL in eine andere Thread-Gruppe verwenden und mehr als 1 Threads verwenden. Ich benutzte diese Option https://www.blazemeter.com/blog/knit-one-pearl-two-how-use-variables-different-thread-groups und übergibt den Wert erfolgreich an den HTTP-Sampler, aber ich muss verwenden die Eigenschaft Wert in die für jeden Controller, die ich nicht verstehe, dann habe ich diese Option versucht https://stackoverflow.com/questions/707832/how-do-i-pass-a-variable-from-one-thread-group- zu einem anderen-in-jmeter einige, wie das auch nicht funktioniert hast du einen einfacheren Weg? –

Verwandte Themen