使用正则表达式的JMeter提取链接传递到具有空值的下一个请求

时间:2017-12-04 06:17:49

标签: regex foreach controller jmeter beanshell

这就是我设置测试计划的方法:

HTTP请求 - &gt;正则表达式提取器提取多个链接 - 这是正确提取 - 但一些链接是空白 RegularExpressionExtractor --- <a href="(.*)" class="product-link">

BeanShell Sampler - 过滤空值或空值 - 这很好用

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

我面临的问题是ForEach Controller运行所有值,包括BlankNULL - 如何仅针对非空值空白值运行循环

3 个答案:

答案 0 :(得分:1)

您应该更改正则表达式以排除空值

使用*符号

代替使用包含空的任何值
 <a href="(.*)" class="product-link">

使用+符号查找非空字符串:

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

答案 1 :(得分:1)

如前所述,你应该改变你的正则表达式!

您可以直接替换

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

或者更像这样的限制:

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

这是一个只匹配网址的正则表达式。

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

  

第一个捕获组是所有选项。它允许URL开始   使用“http://”,“https://”或两者都不是。我有一个问号   在s之后允许具有http或https的URL。为了要做   这整个组可选,我刚刚添加了一个问号到底   它

     

接下来是域名:一个或多个数字,字母,点或超量   然后是另一个点,然后是两到六个字母或点。下列   section是可选的文件和目录。在集团内部,我们   想要匹配任意数量的正斜杠,字母,数字,   下划线,空格,圆点或连字符。然后我们说这个小组可以   可以根据需要进行多次匹配。相当多,这允许多个   目录与最后的文件一起匹配。我用过   明星而不是问号,因为明星说零或   更多,不是零或一。如果只在那里使用问号   一个文件/目录就可以匹配。

     

然后匹配一个尾部斜杠,但它可以是可选的。最后我们   以行尾结束。

     

匹配的字符串:

     

http://net.tutsplus.com/about

     

不匹配的字符串:

     

http://google.com/some/file!.html(包含感叹号)

祝你好运!!!

答案 2 :(得分:0)

ForEach控制器不能与JMeter属性一起使用,您需要将“输入变量前缀”更改为url_2,并且您的测试应该按预期开始工作。

另请注意since JMeter 3.1 it is recommended to use Groovy language for any form of scripting因此,请考虑在下一个可用机会上迁移到JSR223 Sampler和Groovy语言。

Groovy has much better performance而Beanshell可能成为巨大负载的瓶颈。