针对xml响应的JMeter响应断言验证失败

时间:2018-08-07 09:58:49

标签: perl jmeter

XML响应:

    String[] str = new String[] {"Value", "Sum3", "121", "data8input", "in:21::7", "7.00,9.01"};

    StringBuilder longStringBuilder = new StringBuilder();

    for (String s : str) {
        longStringBuilder.append(s).append(" ");
    }

    String longString = longStringBuilder.toString();

    String onlyNumbers = " " + longString.replaceAll("[^0-9.]", " ") + " ";
    onlyNumbers = onlyNumbers.replaceAll(" \\. ", "").trim();

    while (onlyNumbers.indexOf("  ") > 0) {
        onlyNumbers = onlyNumbers.replaceAll("  ", " ");
    }

    String[] array = onlyNumbers.split(" ");
    Double[] doubleArray = new Double[array.length];

    for (int i = 0; i < array.length; i++) {
        try {
            doubleArray[i] = Double.parseDouble(array[i]);
        } catch (NumberFormatException e) {
            e.printStackTrace();
            doubleArray[i] = 0.0;
        }
    }

    Arrays.sort(doubleArray);

    int numbersCount = doubleArray.length;

    Double[] finalArray;
    if (numbersCount >= 2) {
        finalArray = new Double[]{doubleArray[numbersCount - 2], doubleArray[numbersCount - 1]};
    } else if (numbersCount == 1) {
        finalArray = new Double[]{ doubleArray[0]};
    } else {
        finalArray = new Double[]{};
    }

    for (Double number : finalArray) {
        System.out.println(number);
    }

JMeter响应断言: 模式匹配规则:包含 测试模式:无声

失败原因:

<silent><send-sss destination="*1234">TEST mId=dev oId=XXXXXXXXX</send-sms></silent>

任何人都可以让我知道应该发生什么,但是断言它应该失败。我尝试使用几种模式,但对我而言不起作用。

2 个答案:

答案 0 :(得分:0)

Response Assertion中查找字符串的一部分,您需要在模式匹配规则中选择Substring

  

包含,匹配:Perl5样式的正则表达式

     

等于,子字符串:纯文本,区分大小写

如果您选择包含(表示正则表达式),则需要转义*,然后使用

\*1234

答案 1 :(得分:0)

对于XML响应类型,更适合使用XPath Assertion,它允许使用任意XPath queries检查响应。

如果要测试<silent>标记的存在,则只有相关的XPath查询将像//silent一样简单。

关于响应断言,其包含模式为PatternMatcher.contains(),因此它需要正则表达式,而不是简单的String,因此您应该使用类似.*silent.*作为模式。

有关使用JMeter断言定义自定义通过/失败标准的更多信息,请参见How to Use JMeter Assertions in Three Easy Steps文章。