H,我在JSR223断言中有这样的代码
import groovy.json.JsonSlurper;
import org.apache.jmeter.services.FileServer;
failureMessage = "";
sampleLabel = SampleResult.getSampleLabel();
isResponseCodeCorrect("204");
def isResponseCodeCorrect(String expCode)
{
String actualCode = prev.getResponseCode();
if(!expCode.equals(actualCode)){
failureMessage += "ERROR code: Expected <"+ expCode +"> but we got instead " + actualCode + ";";
}
}
问题可能是用groovy或Java创建一些代码库并将对象从执行的sampler注入(例如公共变量:ctx,vars,props,SamplerResult)吗?
目的是注入诸如SampleResult,AssertionResult之类的对象(以调用-> SampleResult.getSampleLabel()),AssertionResult.setFailureMessage(“ failureMessage);
AssertionResult.setFailure(true); )和自己的功能。
想要使包装器(某些对象)具有与Assertion一起播放的方法,将数据保存到CSV ...包装器将被导入到JSR223 Assertion中,然后我想调用一些特定的方法。
预期的包装器:
@groovy.transform.MapConstructor
class Foo {
SampleResult results,
AssertionResult assertionResult
isResponseCodeCorrect(String expCode) {
String actualCode = prev.getResponseCode();
if(!expCode.equals(actualCode)){
failureMessage += "ERROR code: Expected <"+ expCode +"> but we got instead " + actualCode + ";";
assertionResult.setFailureMessage(failureMessage);
assertionResult.setFailure(true);
log.error(sampleLabel + " Error is going to be saved to the logs");
PrintLogToFile();
}
}
}
JSR223断言:
import org.foo. wrapper
Foo wrapper = new Foo();
wrapper.isResponseCodeCorrect("200");
或一些有用的东西,以避免调用之间的代码重复
最佳答案
您可以将Groovy或Java代码编译为.jar file并将其放入JMeter Classpath
完成后,您将可以从任何JSR223 Test Element和/或__groovy() function访问.jar文件中的可用功能。
我只能想到您需要的一个类:JMeterContext可以像以下这样简单地获得其实例:
def ctx = org.apache.jmeter.threads.JMeterContextService.getContext()
完成后,您将可以访问所需的任何内容:
SampleResult
== ctx.getPreviousResult()
AssertionResult
== ctx.getPreviousResult().getAssertionResults()
vars
== ctx.getVariables()
props
== ctx.getProperties()
等等
如果需要,请查看How to Reuse Your JMeter Code with JAR Files and Save Time文章以获取更多详细信息。