我断言回复的代码:
import groovy.json.JsonSlurper
sleep(5000)
def ResponseMessage = messageExchange.response.responseContent
def jsonString = new JsonSlurper().parseText(ResponseMessage)
assert !(jsonString.isEmpty())
assert jsonString.code == 200
Jmeter的错误:
> 2017/05/15 21:37:20 ERROR - jmeter.timers.JSR223Timer: Problem in
> JSR223 script JSR223 Timer javax.script.ScriptException:
> javax.script.ScriptException: groovy.lang.MissingPropertyException: No
> such property: messageExchange for class: Script19 at
> org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:155)
> at javax.script.AbstractScriptEngine.eval(Unknown Source) at
> org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:220)
> at org.apache.jmeter.timers.JSR223Timer.delay(JSR223Timer.java:42)
> at
> org.apache.jmeter.threads.JMeterThread.delay(JMeterThread.java:806)
> at
> org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:458)
> at
> org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:418)
> at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:249)
> at java.lang.Thread.run(Unknown Source) Caused by:
> javax.script.ScriptException: groovy.lang.MissingPropertyException: No
> such property: messageExchange for class: Script19 at
> org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:346)
> at
> org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:152)
> ... 8 more Caused by: groovy.lang.MissingPropertyException: No such
> property: messageExchange for class: Script19 at
> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53)
> at
> org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:52)
> at
> org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:307)
> at Script19.run(Script19.groovy:5) at
> org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:343)
> ... 9 more
我已经为常规支持导入了必需品罐,但仍然有关于messageExchange
的错误。
答案 0 :(得分:2)
Soap UI和JMeter在任何方面都不兼容。 Soap UI有一个名为import React from 'react';
import ReactDOM from 'react-dom';
import ReactSoundcloud from 'react-soundcloud-embed';
import ArtistList from '../../data/artistlist.jsx';
let artistlist2017 = ArtistList.data;
// Artist Section
class Artists extends React.Component{
render(){
var artistPrint = artistlist2017.map(function(artist, index){
return (
<div className="each_artist" key={index}>
<img
src={artist.src} alt=""
/>
<h1>{artist.name}</h1>
<h3>{artist.description}</h3>
<ReactSoundcloud url={"https://soundcloud.com/icebound/dusty-breaks-at-the-bottom-of-the-random-crates"}/>
</div>
);
});
return (
<div>
<div className="artist_block">
<div>
<div className="rotate_left_header">
<h2>
2017 Featured Artists
</h2>
</div>
<div className="artists">{artistPrint}</div>
</div>
</div>
</div>
);
}
};
export default Artists;
的内置对象,JMeter没有。从MessageExchange定义来看,它们似乎在讨论之前的请求结果。所以我的猜测是JMeter中的等价物是一个名为messageExchange
的对象。
prev
您还应该将Groovy后处理器用于要从中获取结果的对象,而现在看起来您正在使用计时器。
答案 1 :(得分:1)
您是否可能将JMeter与SOAPUI混淆?
由于您没有在脚本中的任何位置定义messageExchange
,因此调用脚本的人应该设置它。情况并非如此,因此出现错误消息。据我记得,SOAPUI设置了messageExchange
属性,JMeter显然没有。
答案 2 :(得分:1)
我认为你不需要在这种情况下使用Groovy,可以通过JSON Path Assertion来处理这种情况
所以你可以通过添加JSON Path Assertion作为你请求的子节点并一如既往地配置它来杀死两只鸟:
$.code
Validate against expected value
框将200
放入&#34;期望值&#34;输入字段
您可以使用JMeter Plugins Manager安装JSON Path Assertion,查找&#34; JSON插件&#34;在&#34;可用插件&#34;标签
如果您仍需要在Groovy中执行此操作,获取父样本响应数据的正确方法是:
使用以下代码将响应数据作为JSON获取并验证code
属性值:
def ResponseMessage = SampleResult.getResponseData()
def jsonString = new groovy.json.JsonSlurper().parse(ResponseMessage)
if (!jsonString.code.equals("200")) {
AssertionResult.setFailure(true)
AssertionResult.setFailureMessage("Response code was: " + jsonString.code)
}