JSR223 后处理器无法在拆解线程组下工作

问题描述 投票:0回答:1

我创建了一个测试计划并添加了设置线程组,其中使用不同的 HTTP 请求和相应的 JSR223 断言验证了一些先决条件。失败断言相关数据,即采样器名称和期望值放置在属性中,名称以 failedSampler_ 开头。下面是代码。

import org.apache.jmeter.util.JMeterUtils;
import org.apache.jmeter.assertions.AssertionResult;

// JSR223 Assertion (Groovy)
String expectedValue = "test"; // Replace with your expected value
String jsonString = prev.getResponseDataAsString();


def jsonSlurper = new groovy.json.JsonSlurper()
def jsonObject = jsonSlurper.parseText(jsonString)
log.info(jsonObject.toString());

boolean matchFound = false;

// Iterate over the hits array and get the ab_name from each _src document
    jsonObject.data.record.hits.each { hit ->
        String actualValue = hit._name;
    log.info("Actual value is: " + actualValue);

    if (expectedValue.equals(actualValue)) {
        matchFound = true;
    }
}

if (!matchFound) {
    String sampleName = SampleResult.getSampleLabel();
    String failureMessage = "Assertion failed for sample: " + sampleName +
        "\nExpected value: " + expectedValue +
        "\nNo matching actual value found";
    props.put("failedSampler_" + sampleName, expectedValue);
    log.error(failureMessage);

        // Create a new AssertionResult
    AssertionResult result = new AssertionResult("${expectedValue} Not Found");
    result.setFailure(true);
    result.setFailureMessage(failureMessage);
    prev.addAssertionResult(result);
    prev.setSuccessful(false);
}

为了验证清理部分,有一个拆解线程组,其中 JSR223 后处理器配置为删除 props 数据。但它并没有清除道具数据,并且在下次运行时道具也会显示上次运行的数据。 TearDown 线程组下 JSR223 后处理器的代码如下。

import org.apache.jmeter.reporters.ResultCollector
import org.apache.jorphan.collections.SearchByClass


def engine = engine = ctx.getEngine()
def test = engine.getClass().getDeclaredField('test')

test.setAccessible(true)

def testPlanTree = test.get(engine)

SearchByClass<ResultCollector> listenerSearch = new SearchByClass<>(ResultCollector.class)
testPlanTree.traverse(listenerSearch)
Collection<ResultCollector> listeners = listenerSearch.getSearchResults()

listeners.each { listener ->
    def files = listener.files
    files.each { file ->
        file.value.pw.close()
    }
}

log.info('Before clear:' +props.size()) 
props.clear()
log.info('After clear:' +props.size()) 

注意: 目前setup 和tearDown 线程组之间没有定义普通线程组。需要实现的目的是,所有失败断言的期望值应保存在带有采样器名称的 prop 中,并且可以在正常线程组中访问,以对在设置线程组中验证的丢失数据执行某些操作。

测试计划如下图

JMeter setup & tearDown Configurations

groovy jmeter performance-testing jsr223 post-processor
1个回答
0
投票

JSR223 后处理器仅在采样器的上下文中执行。如果线程组中没有 Sampler - 它不会运行。

您需要将其转换为 JSR223 Sampler 或将另一个 Sampler 添加到拆解线程组,例如 Debug SamplerDummy Sampler 或其他

© www.soinside.com 2019 - 2024. All rights reserved.