Search code examples
jmeterlistenerresponseperformance-testingjsr223

JMeter request using JSR223 - 0 and empty response instead of real values


Request in JSR223 Sampler works correctly, but here are Sampler result and Response data with 0 and empty values: View Results Tree - JSR223 Sampler - Sampler result

enter image description here

Metrics in Sample result in red rectangle are equal to 0. No response data (both headers and body) are available to see.

Is it possible to get somehow real numbers instead of 0 0 0 0 0 0 for metrics in Sampler result tab and to have visible response in Response data tab?

JSR223 Sampler code: enter image description here


Solution

  • As per reference documentation, you can call those methods:

     SampleResult.connectEnd();
     SampleResult.latencyEnd();
     SampleResult.sampleEnd();
     SampleResult.setResponseData(driver.getPageSource(), "UTF-8");
    

    You can use SampleResult javadocs to see all method or subclasses or custom class of yours.

    Note SampleResult is a variable name that JMeter binds into element, not the class, so:

    • don't prefix it with org.apache.jmeter.samplers.SampleResult, just use SampleResult
    • don't import org.apache.jmeter.samplers.SampleResult

    Edit (after you added your JSR223 Sampler code):

    To fill latency and connect time, use:

    • SampleResult.setConnectTime()
    • SampleResult.setLatency()

    As you can get values from Webdriver#executeScript() using such code that exploits Timing API:

    long pageLoadTime= (Long)js1.executeScript("return (window.performance.timing.loadEventEnd-window.performance.timing.responseStart)");
    long latency= (Long)js1.executeScript("return (window.performance.timing.responseStart-window.performance.timing.navigationStart)");
    long endtoEndRespTime= (Long)js1.executeScript("return (window.performance.timing.loadEventEnd-window.performance.timing.navigationStart)");
    long connectTime= (Long)js1.executeScript("return (window.performance.timing.connectEnd -window.performance.timing.connectStart)");