这就是我设置测试计划的方法:
HTTP请求 - >正则表达式提取器提取多个链接 - 这是正确提取 - 但一些链接是空白
RegularExpressionExtractor --- <a href="(.*)" class="product-link">
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
我面临的问题是ForEach Controller运行所有值,包括Blank
或NULL
- 如何仅针对非空值空白值运行循环
答案 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是可选的文件和目录。在集团内部,我们 想要匹配任意数量的正斜杠,字母,数字, 下划线,空格,圆点或连字符。然后我们说这个小组可以 可以根据需要进行多次匹配。相当多,这允许多个 目录与最后的文件一起匹配。我用过 明星而不是问号,因为明星说零或 更多,不是零或一。如果只在那里使用问号 一个文件/目录就可以匹配。
然后匹配一个尾部斜杠,但它可以是可选的。最后我们 以行尾结束。
匹配的字符串:
不匹配的字符串:
答案 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可能成为巨大负载的瓶颈。