我们可以通过Beanshell
控制Jmeter的组件吗?我想通过一个标志禁用所有断言。我该怎么做?
如果除beanShell
以外的任何其他解决方案,请告诉我。
答案 0 :(得分:1)
最简单的方法是使用Taurus工具作为包装器运行JMeter测试,它自然支持JMeter测试,而且它提供了一些不错的扩展。
特别是在您的情况下,您可以使用Modifications for Existing Scripts功能,允许启用或禁用测试元素
---
scenarios:
modification_example:
script: /your/jmeter/testplan.jmx
modifications:
disable: # Names of the tree elements to disable
- Response Assertion
- Duration Assertion
答案 1 :(得分:0)
据我所知,您无法使用BeanShell
解决方法如下:
processAssertions
配置元素中创建User Defined Variable
变量。${processAssertions}==true
,因此当您将processAssertions
值设置为true
时,将会评估断言仅。设置true
以外的任何值,使JMeter为忽略断言。使用Bean Shell断言:
前提条件:在processAssertions
TRUE
(设置为User Defined Variables
)
import org.apache.jmeter.assertions.ResponseAssertion;
log.info("hello");
try{
ResponseAssertion obj = new ResponseAssertion();
if(${processAssertions}==TRUE) { // value accessed from UDV
log.info("inside if");
obj.Enabled=false;
SampleResult.setSuccessful(true); // set sample result to PASS, set to false to mark it failure.
}
} catch(Exception e) {
}
参考文献:
答案 2 :(得分:0)
除了之前的答案,我还有两种方法:
1)将断言包装到If控制器中,然后 - 是的,设置一个标志var&检查If块。
2)通过JMeter API以编程方式运行JMeter - 在这里您可以以编程方式访问TestPlan中的每个元素。 虽然这种方式的记录非常糟糕,而API模型本身远非明确。
UPD:做后者的方法的一些线索1)以下是主要参考:http://jmeter.apache.org/api/index.html
2)实例化引擎和加载属性:
StandardJMeterEngine jmeter = new StandardJMeterEngine();
JMeterUtils.loadJMeterProperties("/path/to/jmeter.properties");
3)实例化SaveService并加载你的计划(是的,保存服务是对此负责的)
SaveService.loadProperties();
File yourplan = new File("/path/to/yourplan.jmx");
HashTree planTree = SaveService.loadTree(yourplan);
4)在这里您可以访问&使用你的计划元素,通过HashTree,在子哈希树中检索测试元素(对于元素,参见第1页中提到的参考文献)&更改它们和/或测试结构(强制转换为TestElement必须足够enabling/disabling)。
5)完成后,剩下的就是直截了当:
jmeter.configure(planTree);
jmeter.run();
那应该是它。