/jmeter-argentum

Simple aggregator for Apache JMeter

Primary LanguageJavaApache License 2.0Apache-2.0

###JMeter Argentum

This is simple and fast results aggregation module for Apache JMeter. It collects, aggregates and writes results for every second as json-object into file.

####User Interface ArgentumListener

Timeout is a delay time between executing samplers and aggregating. Aggregation timeout must be greater than timeout or response time of samplers. If sampler executed longer than this timeout, it would be skipped at the aggregation phase.

Output File is a file to store json-objects.

And you can use distributions, based on percentiles or intervals

Percentiles distribution is easy for human understanding, but more difficult for processor. Interval distribution divides the time at intervals, with lowering accuracy, but increases the performance of the calculation. You can use both of them with per sample distributions:)

####JSON Overview #####Without RT-distributions

{   "active_threads":8, //Active threads of JMeter
    "traffic":{
        "avg_request_size":0, //Average sampler request size
        "avg_response_size":0, //Average sampler response size
        "outbound":0, //Sum of all samplers requests sizes at this second
        "inbound":0 //Sum of all samplers responses sizes at this second
    },
    "avg_lt":60, //Average Latency
    "sampler_avg_rt":{
        "OK200":551, //Average response time for every samples
        "ERROR_WO_RC":1130,
        "ERROR502":399,
        "ERROR503":552
    },
    "second":1371502833, //UNIX timestamp
    "avg_rt":637, //Average response time
    "samplers":{
        "OK200":267368, //Map describes all sampler names and contains a count of samples
        "ERROR_WO_RC":133682,
        "ERROR502":133683,
        "ERROR503":133686
    },
    "rc":{
        "500":133682, //Map describes all sampler response codes and containt a count of them
        "200":267368,
        "502":133683,
        "503":133686
    },
    "th":668419 //Throughput
}

####Percentile Distribution With this distribution common json-object contains two sub-objects:

...
    "percentile":{ //One distribution for all samples
        "25.0":363,
        "50.0":508,
        "75.0":829,
        "80.0":893,
        "90.0":1133,
        "95.0":1571,
        "98.0":1835,
        "99.0":1923,
        "100.0":2010
    }
...

And distributions for every sampler:

    "sampler_percentile":{
        "ERROR503":{ //Distribution for sample with name "ERROR503"
            "25.0":329,
            "50.0":554,
            "75.0":777, //75th percentile
            "80.0":822,
            "90.0":911, //90th percentile
            "95.0":956,
            "98.0":983,
            "99.0":992,
            "100.0":1000 //Maximum response time of "ERROR503" sampler
        },
        "ERROR_WO_RC":{ //Distribution for sample with name "ERROR_WO_RC"
            "25.0":694,
            "50.0":1133},
            "75.0":1571,
            "80.0":1659,
            "90.0":1835,
            "95.0":1923,
            "98.0":1976,
            "99.0":1993,
            "100.0":2010
         },
         ... //other distributions
    }

####Cumulative Percentile Distribution Percentile distribution for the entire duration of the test. Don't warry about OOM. This aggregator not collects all of SampleResult:) It's magic:)

    ...
    "cumulative_percentile":{
        "25.0":363,
        "50.0":508,
        "75.0":828,
        "80.0":891,
        "90.0":1130,
        "95.0":1570,
        "98.0":1834,
        "99.0":1922,
        "100.0":2010
        },
    ...

And cumulative distributions separately for different samplers:

    ...
    "cumulative_sampler_percentile":{
        "ERROR503":{
            "25.0":328,
            "50.0":553,
            "75.0":777,
            "80.0":821,
            "90.0":911,
            "95.0":956,
            "98.0":983,
            "99.0":992,
            "100.0":1000 //ERROR503 sampler fits in 1000ms for all test time
        },
        "ERROR_WO_RC":{
            "25.0":689,
            "50.0":1130,
            "75.0":1570,
            "80.0":1658,
            "90.0":1834,
            "95.0":1922,
            "98.0":1975,
            "99.0":1993,
            "100.0":2010 //ERROR_WO_RC sampler fits in 2010ms for all test time
        },
        "ERROR502":{
            "25.0":350,
            "50.0":400,
            "75.0":450,
            "80.0":460,
            "90.0":480,
            "95.0":490,
            "98.0":496,
            "99.0":498,
            "100.0":500
            }
        },
    ...

####Interval Distribution JSON-object also may contains summary interval distribution

    ...
    "interval_dist": [
        {"to":5,"count":0,"from":0},
        {"to":10,"count":0,"from":5},
        {"to":100,"count":0,"from":10},
        {"to":500,"count":359533,"from":100}, //360k response with response time between 100 and 500 ms
        {"to":1000,"count":286426,"from":500},
        {"to":1500,"count":42055,"from":1000},
        {"to":2000,"count":41508,"from":1500},
        {"to":2500,"count":910,"from":2000}
        ],
    ...

You can determine the accuracy of this distribution. Just sets more intervals in text field.

Distributions for every sampler:

    ...
    "sampler_interval_dist": {
        "ERROR503":[ //Distribution for sampler with name "ERROR503"
            {"to":5,"count":0,"from":0},
            {"to":10,"count":0,"from":5},
            {"to":100,"count":0,"from":10},
            {"to":500,"count":326800,"from":100}, //326k responses between 100 and 500 ms
            {"to":1000,"count":261504,"from":500},
            {"to":1500,"count":38212,"from":1000},
            {"to":2000,"count":37645,"from":1500},
            {"to":2500,"count":804,"from":2000}
        ],
        "ERROR_WO_RC":[ //Distribution for sampler with name "ERROR_WO_RC"
            {"to":5,"count":0,"from":0},
            {"to":10,"count":0,"from":5},
            {"to":100,"count":0,"from":10},
            {"to":500,"count":326800,"from":100},
            {"to":1000,"count":261504,"from":500},
            {"to":1500,"count":38212,"from":1000},
            {"to":2000,"count":37645,"from":1500},
            {"to":2500,"count":804,"from":2000}
        ],
        "OK200":[ //Distribution for sampler with name "OK200"
            {"to":5,"count":0,"from":0},
            {"to":10,"count":0,"from":5},
            {"to":100,"count":0,"from":10},
            {"to":500,"count":326800,"from":100},
            {"to":1000,"count":261504,"from":500},
            {"to":1500,"count":38212,"from":1000},
            {"to":2000,"count":37645,"from":1500},
            {"to":2500,"count":804,"from":2000}
        ],
        ...
    },
    ...

####Performance

CPU: Intel(R) Core(TM) i7 CPU 930 @ 2.80GHz JVM: Oracle Hotspot 1.7u21 Apache Jmeter: 2.10

performance

google doc table