SoapUI负载测试执行失败

5
我尝试从我的SoapUI测试用例中生成负载测试。它有许多测试步骤,其中前10个步骤涵盖了登录过程。 LoadTest 在一个Groovy脚本中停止,该脚本应该从前一个测试步骤的输出中获取参数值。当直接执行时,它可以正常工作,但在作为LoadTest执行时会出现错误。
groovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.lang.String# . Cannot resolve which method to invoke for [null] due to overlapping prototypes between: [class [B] [class [C] [class java.lang.String] groovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.lang.String# . Cannot resolve which method to invoke for [null] due to overlapping prototypes between: [class [B] [class [C] [class java.lang.String] error at line: 5

Groovy脚本会导致上述错误:

def tc1 = testRunner.testCase.getTestStepAt(context.currentStepIndex-1);
String rawData = new String(tc1.testRequest.response.rawResponseData);
Reger reger = new Reger(rawData); 

String myvar1 = reger.getNthMatch(/<myregex>/, 0);

请展示导致上述错误的脚本。 - Rao
@Rao:我更新了问题。 - plaidshirt
@Rao:你有没有其他解决办法? - plaidshirt
1个回答

2
您在这个字符串中的问题是:
String rawData = new String(tc1.testRequest.response.rawResponseData)

tc1.testRequest.response.rawResponseData 为空,为了避免异常,您可以将此字符串更改为:

String rawData = tc1.testRequest.response.rawResponseData?.toString()

这是一个空值安全的功能


我替换了那一行,但是用这个方法无法获取必要的变量。我检查了一下,如果使用这个方法,变量rawData是空的。 - plaidshirt
通常在这种情况下,您需要深入研究其他代码以检查发生了什么。如果该值不应为空,则需要找到其为空的原因。 - Evgeny Smirnov
toString() - 是 Object 类的方法,这意味着任何 Java 对象都有它。不同的对象可能有不同的实现方式,但最终它们都会返回一个新的 String(someValue)。? - Groovy 的安全导航运算符用于避免空指针异常,可以表示为 if(value != null){return value}else{return null}。因此,value?.toString() 实际上等同于 if(value!=null){ return new String(value)}else{return null}。 - Evgeny Smirnov
在许多情况下,当您需要避免NullPointerException抛出时,这会很有帮助。但是,要检查此值为null的原因,您需要调试代码。使用IDE调试器找出它在哪些情况下为null。 - Evgeny Smirnov
或者添加一些println:println tc1; println tc1.testRequest; println tc1.testRequest.response; println tc1.testRequest.response.rawResponseData 检查什么是null,什么不是null?在哪些情况下?如果您在多线程环境中运行此代码,请检查是否存在线程不安全的代码。等等等等。 - Evgeny Smirnov
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接