Jmeter - 如何从网页获取唯一网址

时间:2015-02-26 11:23:56

标签: jmeter http-request

我是jmeter的新手,我无法找到答案。我想打电话给网站上的所有内部链接。教程帮助我收集所有链接。然而,其中一些是重复的。我想只打电话给唯一的链接 - 所以1个链接1个电话。

我正在调用我的网页,通过正则表达式提取器,我正在收集所有链接。结果我有变量存储链接。但不幸的是,其中一些是重复的,因此我不止一次调用一些链接。

有人知道怎么做吗?

1 个答案:

答案 0 :(得分:0)

假设你的链接来自正则表达式提取器,你应该有类似的东西:

LINK=http://foo.bar
LINK_1=http://foo.bar
LINK_2=http://example.com
LINK_3=http://example.com
LINK_matchNr=3

JMeter没有提供适当的测试元素来消除这种情况下的重复,但你仍然可以通过一些脚本来解决它。

为了做到这一点

  1. 在正则表达式提取器
  2. 之后添加Beanshell PostProcessor
  3. 将以下代码放入PostProcessor的“脚本”区域:

    int matches = Integer.parseInt(vars.get("LINK_matchNr"));
    Set links = new HashSet();
    
    for (int i = 1; i <= matches; i++) {
    
      links.add(vars.get("LINK_" + i));
      vars.remove("LINK_" + i);
    }
    
    int counter = 1;
    for (String link : links) {
      vars.put("LINK_" + counter, link);
      counter++;
    }
    
  4. 所以你的测试计划如下:

    Beanshell PostProcessor

    PostProcessor中的Behellhell代码

    • LINK_
    • 开头遍历所有JMeter变量
    • 将它们的值存储到Java HashSet中,它不能包含重复值,因为它是基于散列的。因此,将默默忽略所有重复的变量值
    • 在迭代时删除变量
    • 从HashSet构建新变量

    所以最后你会有初始形式的JMeter变量,但没有重复。

    重要提示:以上Beanshell代码假定您在正则表达式提取器中使用LINK作为“参考名称”,请确保将其更改为LINK或更新Beanshell代码以匹配您的参考名称

    有关Apache JMeter中Beanshell脚本的高级信息,请参阅How to use BeanShell: JMeter's favorite built-in component指南。