精华内容
下载资源
问答
  • Jmeter测试报告

    2019-09-26 13:18:57
    客户端(Jmeter):2个CPU,每个2个核,4+8内存 500G硬盘 ----------------------------------------------------------------------------------------- 线程数 100 每个线程 100次 -----...

    服务器: 2个CPU,每个CPU 1个核,4G内存  20G硬盘

    客户端(Jmeter):2个CPU,每个2个核,4+8内存   500G硬盘

    -----------------------------------------------------------------------------------------

     线程数 100    每个线程 100次

    -----------------------------------------------------------------------------------------

    1、直接访问Auto

    聚合报告

     

    图形结果

     

    2、通过网关访问Auto

    聚合报告

    图形结果

     

    3、直接访问Busi

    聚合报告

     

    图形结果

     

    4、通过网关访问Busi

    聚合报告

     

    图形结果

     

     

    转载于:https://www.cnblogs.com/myfrank/p/7918582.html

    展开全文
  • Jmeter测试报告优化

    千次阅读 2017-06-26 16:59:25
    jmeter测试报告优化

    在执行jmx后如果看默认的测试结果,都是统计的一些数据,其中内容不够具体,所以想着优化下。

    其实可以自己编写一个格式脚本,然后放到jmeter的extras文件夹下,然后将ant的build.xml文件中的输出格式文件修改成自己定义的文件即可(我的是下载的前辈的,链接http://www.cnblogs.com/yangxia-test/p/5283139.html)

    首先要修改jmeter中的properties文件(路径D:\apache-jmeter-3.0\bin\jmeter.properties),定义哪些参数是需要输出成结果的,如下:

    jmeter.save.saveservice.data_type=true
    jmeter.save.saveservice.label=true
    jmeter.save.saveservice.response_code=true
    # response_data is not currently supported for CSV output
    jmeter.save.saveservice.response_data=true
    # Save ResponseData for failed samples
    jmeter.save.saveservice.response_data.on_error=false
    jmeter.save.saveservice.response_message=true
    jmeter.save.saveservice.successful=true
    jmeter.save.saveservice.thread_name=true
    jmeter.save.saveservice.time=true
    jmeter.save.saveservice.subresults=true
    jmeter.save.saveservice.assertions=true
    jmeter.save.saveservice.latency=true
    jmeter.save.saveservice.connect_time=false
    jmeter.save.saveservice.samplerData=false
    jmeter.save.saveservice.responseHeaders=false
    jmeter.save.saveservice.requestHeaders=false
    jmeter.save.saveservice.encoding=false
    jmeter.save.saveservice.bytes=true
    jmeter.save.saveservice.url=false
    jmeter.save.saveservice.filename=false
    jmeter.save.saveservice.hostname=false
    jmeter.save.saveservice.thread_counts=true
    jmeter.save.saveservice.sample_count=false
    jmeter.save.saveservice.idle_time=true

    然后将自己下载的.xsl文件(可自己进行修改)放入extras文件夹中(最后面的xsl代码直接复制粘贴即可),之后修改build.xml中的文件,修改内容如下:

    <target name="report">
            <xslt 
    classpathref="xslt.classpath"
    force="true"
    in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}" style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl">
    <param name="showData" expression="${show-data}"/>
                <param name="titleReport" expression="${ReportName}${time}"/>
                <param name="dateReport" expression="${ReportName}${time}"/>
    </xslt>
    <copy todir="${jmeter.result.html.dir}">
                <fileset dir="${jmeter.home}/extras">
                    <include name="collapse.png" />
                    <include name="expand.png" />
                </fileset>
            </copy>
    </target>


    下载的.xsl文件内容:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
        <xsl:output method="html" indent="no" encoding="UTF-8" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" doctype-system="http://www.w3.org/TR/html4/loose.dtd"/>
        <xsl:strip-space elements="*"/>
        <xsl:template match="/testResults">
            <html lang="en">
            <head>
                <meta name="Author" content="shanhe.me"/>
                <title>JMeter Test Results</title>
                <style type="text/css"><![CDATA[
                
                    * { margin: 0; padding: 0 }
                    html, body { width: 100%; height: 100%; background: #b4b4b4; font-size: 12px }
                    table { border: none; border-collapse: collapse; table-layout: fixed }
                    td { vertical-align: baseline; font-size: 12px }
                    #left-panel { position: absolute; left: 0; top: 0; bottom: 0; width: 300px; overflow: auto; background: #dee4ea }
                    #left-panel li.navigation { font-weight: bold; cursor: default; color: #9da8b2; line-height: 18px; background-position: 12px 5px; background-repeat: no-repeat; padding: 0 0 0 25px; background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAICAYAAAArzdW1AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sDEBQqGbO7BEcAAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd2l0aCBHSU1QZC5lBwAAAKRJREFUGNN1zM0KgkAYheF3RvtXSsGyWhRNaILS7bdt11W0KgJvoPwZp0UlBPUtz3nOJw7Hk7necv5dOA2Qaazo2vZP0LEt9olCVtqQROufKNmuqBuBNAYW4QzXGX6B0bDPcjGnMQYJ8Cg12U59oSzaUJQa4IUAXMclDHwAAn/MxPMw765FZd2QRgopBWmsKCrdfhXnS/4ZYElBXdyxewN008Y8AephLAkqz613AAAAAElFTkSuQmCC) }
                    #left-panel li.success { color: #565b60 }
                    #left-panel li.failure { color: red }
                    #left-panel li { list-style: none; color: black; cursor: pointer }
                    #left-panel li.selected { background-repeat: repeat-x; color: white; background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAUCAYAAABMDlehAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sDEBQxLTs5O2gAAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd2l0aCBHSU1QZC5lBwAAAEdJREFUCNc1y7ERgEAMA0GNUhIyGqM2uqKgtyWZhE9v53A/7/A6D7BkMDNgy2AroB2wHTCZv5UMOgFLG1bvd7XBckBlwCXjA5wMOF5iOX/MAAAAAElFTkSuQmCC) }
                    #left-panel div { line-height: 20px; background-position: 25px 3px; background-repeat: no-repeat; padding: 0 0 0 45px }
                    #left-panel div.success { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAOCAYAAADwikbvAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sDEBULEEc6wzcAAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd2l0aCBHSU1QZC5lBwAAAiNJREFUKM99kktIVGEYhp/jzJl08lI6logp2Y2EFkbtaqlFROsWrlq4ioJWQRs37VoUVItWkYEVRGSBlhleCpywDEWxTEuxcURTZ6YzxzP/5WshCOHUt36f93kXnyMi5Lsnb4clI4s4fhkXzp5w8mWcfHBvfEpUxVdCUUU6lUPNHuD86cYtBQX5GhPrM7hRg7GaSDRg2vuUd90WuOPVsOyqy6FFo2yOQHlU1S9z9dZT+S/8I7GCLlkAN4eyAf56mnT6Fy1HLnGuuYa++MS/4e74qMRqfXLaJ9BpfnsrLC0m2BYuoqwUbj/+274JD43OEqmexwvW8NUKXnaZtVSS1pNtAAyOvyC6v48HnUNb4Z7PH8UtTlIQWA5tb2RhYY7kz3l2FleytJYg/qWb8t2KZ/0PN+1hgI6uEUr2jpHKpGlquExVaS0VbjUZL7WxaqIXK6ADQ0n9GNfv9XCttWnD/O57t0TKFklnF3g5fJ/seoaa2D4O1x0F4PlgO9oIftbgFgYMfLgjACGqj0vlsddoUnj+Kt/mxunq72RP+UGqYjWMTA7R+b6dUCSEGEF5hoJQip6BaFs4HJtCyRrKs6wHCovDip/kys0WWpovMpOYBCtoT2N9B5uzWG0Zid8gnFrVFEQDtBaUrxEgXBimaEeER2/uIiK4roPOaMRYjBKsFly3fOO3G06dETGCWIsYjckprMphtEKMAQtgsMYi1mJMQHJ6xvkDKQoyphCzkl0AAAAASUVORK5CYII=) }
                    #left-panel div.failure { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAOCAYAAADwikbvAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sDEBUJOEC5CU8AAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd2l0aCBHSU1QZC5lBwAAAeVJREFUKM+NkDtok2EUhp8vl9ZLo/EyKI6KFgqCKC4OClrBWUQEcRRx1cGpk3WyInWrgoMZKkW8thYaEYQ0i7WC2ngrNDTERHJvkv/L/3//dxwc7F8jeOAsh/c973OOEhG61aPnaen7maXYt4MLZ4+pbppQt+F06jNH3QWOb8pxUs+SmJzjv83hxY8SVy3wNdtVneiHqe54IhLoB4/TUkyMyOrKj5yXoVtPZK02kLyYK7OnlqFWzgcCGtUC/YUJ3n5a/jd28tU7ORTN0myUA6Jms8bpWIa798elqzn1fokjThrpVBC3ETzNbYAuca59j/Hp+b/N869Tsk8tgVMCXQk+RlfQuk1/tMLMwzsSMCcm5zjhvoR2AdpF0GuwO4aqttS05ZSbZHhsBoAIwI83Cdkd/460XDAOG02d24MxvlR8dsUUh3f2UHaEtgdbWCHz4oZwcVCp66PP5FLhKjEc8DXaCMsNy8DYn/SnZ+L0hhWOb/F8yLs9fDtwk8j+VpqwrlC34PrgGEu2bhlYhZ1b8dncq3AMeBaUr/k6NUyk4ChKzu+N2hc6Bqody+WDG8g2fLatD7F3axjPgmvAtYJvIbouhhIRrl0ZktnkBGIt1gqeMXQ8D2MMiCIUCqFEsFhEQMSykCuqX0MzLAUJTzRsAAAAAElFTkSuQmCC) }
                    #left-panel div.detail { display: none }
                    #right-panel { position: absolute; right: 0; top: 0; bottom: 0; left: 301px; overflow: auto; background: white }
                    #right-panel .group { font-size: 12px; font-weight: bold; line-height: 16px; padding: 0 0 0 18px; counter-reset: assertion; background-repeat: repeat-x; background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAQCAYAAADXnxW3AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sDEBUkDq8pxjkAAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd2l0aCBHSU1QZC5lBwAAADdJREFUCNdVxrERwDAMAzGK0v47eS6Z927SpMFBAAbkvSvnRk5+7K5cVfLMyN39bWakJAjA5xw9R94jN3tVhVEAAAAASUVORK5CYII=) }
                    #right-panel .zebra { background-repeat: repeat; padding: 0 0 0 18px; background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAmCAYAAAAFvPEHAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sDEBYWFlNztEcAAAAdaVRYdENvbW1lbnQAAAAAAENyZWF0ZWQgd2l0aCBHSU1QZC5lBwAAABdJREFUCNdjYKAtePv5338mBgYGBpoQAGy1BAJlb/y6AAAAAElFTkSuQmCC) }
                    #right-panel .data { line-height: 19px; white-space: nowrap }
                    #right-panel pre.data { white-space: pre }
                    #right-panel tbody.failure { color: red }
                    #right-panel td.key { min-width: 108px }
                    #right-panel td.delimiter { min-width: 18px }
                    #right-panel td.assertion:before { counter-increment: assertion; content: counter(assertion) ". " }
                    #right-panel td.assertion { color: black }
                    #right-panel .trail { border-top: 1px solid #b4b4b4 }
                    
                ]]></style>
                <script type="text/javascript"><![CDATA[
                
                    var onclick_li = (function() {
                        var last_selected = null;
                        return function(li) {
                            if( last_selected == li )
                                return;
                            if( last_selected )
                                last_selected.className = "";
                            last_selected = li;
                            last_selected.className = "selected";
                            document.getElementById("right-panel").innerHTML = last_selected.firstChild.nextSibling.innerHTML;
                            return false;
                        };
                    })();
                    
                    var patch_timestamp = function() {
                        var spans = document.getElementsByTagName("span");
                        var len = spans.length;
                        for( var i = 0; i < len; ++i ) {
                            var span = spans[i];
                            if( "patch_timestamp" == span.className )
                                span.innerHTML = new Date( parseInt( span.innerHTML ) );
                        }
                    };
                    
                    var patch_navigation_class = (function() {
                    
                        var set_class = function(el, flag) {
                            if(el) {
                                el.className += flag ? " success" : " failure";
                            }
                        };
                    
                        var traverse = function(el, group_el, flag) {
                            while(1) {
                                if(el) {
                                    if(el.className == 'navigation') {
                                        set_class(group_el, flag);
                                        group_el = el;
                                        flag = true;
                                    } else {
                                        var o = el.firstChild;
                                        o = o ? o.className : null;
                                        flag = flag ? (o == 'success') : false;
                                    }
                                    el = el.nextSibling;
                                } else {
                                    set_class(group_el, flag);
                                    break;
                                }
                            }
                        };
                        
                        return function() {
                            var o = document.getElementById("result-list");
                            o = o ? o.firstChild : null;
                            if(o)
                                traverse(o, null, true);
                        };
                    })();
            
                    window.onload = function() {
                        patch_timestamp();
                        patch_navigation_class();
                        var o = document.getElementById("result-list");
                        o = o ? o.firstChild : null;
                        o = o ? o.nextSibling : null;
                        if(o)
                            onclick_li(o);
                    };
            
                ]]></script>
            </head>
            <body>
                <div id="left-panel">
                    <ol id="result-list">
                        <xsl:for-each select="*">
                            <!-- group with the previous sibling -->
                            <xsl:if test="position() = 1 or @tn != preceding-sibling::*[1]/@tn">
                                <li class="navigation">Thread: <xsl:value-of select="@tn"/></li>
                            </xsl:if>
                            <li οnclick="return onclick_li(this);">
                                <div>
                                    <xsl:attribute name="class">
                                        <xsl:choose>
                                            <xsl:when test="@s = 'true'">success</xsl:when>
                                            <xsl:otherwise>failure</xsl:otherwise>
                                        </xsl:choose>
                                    </xsl:attribute>
                                    <xsl:value-of select="@lb"/>
                                </div><div class="detail">
                                    <div class="group">Sampler</div>
                                    <div class="zebra">
                                        <table>
                                            <tr><td class="data key">Thread Name</td><td class="data delimiter">:</td><td class="data"><xsl:value-of select="@tn"/></td></tr>
                                            <tr><td class="data key">Timestamp</td><td class="data delimiter">:</td><td class="data"><span class="patch_timestamp"><xsl:value-of select="@ts"/></span></td></tr>
                                            <tr><td class="data key">Time</td><td class="data delimiter">:</td><td class="data"><xsl:value-of select="@t"/> ms</td></tr>
                                            <tr><td class="data key">Latency</td><td class="data delimiter">:</td><td class="data"><xsl:value-of select="@lt"/> ms</td></tr>
                                            <tr><td class="data key">Bytes</td><td class="data delimiter">:</td><td class="data"><xsl:value-of select="@by"/></td></tr>
                                            <tr><td class="data key">Sample Count</td><td class="data delimiter">:</td><td class="data"><xsl:value-of select="@sc"/></td></tr>
                                            <tr><td class="data key">Error Count</td><td class="data delimiter">:</td><td class="data"><xsl:value-of select="@ec"/></td></tr>
                                            <tr><td class="data key">Response Code</td><td class="data delimiter">:</td><td class="data"><xsl:value-of select="@rc"/></td></tr>
                                            <tr><td class="data key">Response Message</td><td class="data delimiter">:</td><td class="data"><xsl:value-of select="@rm"/></td></tr>
                                        </table>
                                    </div>
                                    <div class="trail"></div>
                                    <xsl:if test="count(assertionResult) > 0">
                                        <div class="group">Assertion</div>
                                        <div class="zebra">
                                            <table>
                                                <xsl:for-each select="assertionResult">
                                                    <tbody>
                                                        <xsl:attribute name="class">
                                                            <xsl:choose>
                                                                <xsl:when test="failure = 'true'">failure</xsl:when>
                                                                <xsl:when test="error = 'true'">failure</xsl:when>
                                                            </xsl:choose>
                                                        </xsl:attribute>
                                                        <tr><td class="data assertion" colspan="3"><xsl:value-of select="name"/></td></tr>
                                                        <tr><td class="data key">Failure</td><td class="data delimiter">:</td><td class="data"><xsl:value-of select="failure"/></td></tr>
                                                        <tr><td class="data key">Error</td><td class="data delimiter">:</td><td class="data"><xsl:value-of select="error"/></td></tr>
                                                        <tr><td class="data key">Failure Message</td><td class="data delimiter">:</td><td class="data"><xsl:value-of select="failureMessage"/></td></tr>
                                                    </tbody>
                                                </xsl:for-each>
                                            </table>
                                        </div>
                                        <div class="trail"></div>
                                    </xsl:if>
                                    <div class="group">Request</div>
                                    <div class="zebra">
                                        <table>
                                            <tr><td class="data key">Method/Url</td><td class="data delimiter">:</td><td class="data"><pre class="data"><xsl:value-of select="method"/><xsl:text> </xsl:text><xsl:value-of select="java.net.URL"/></pre></td></tr>
                                            <tr><td class="data key">Query String</td><td class="data delimiter">:</td><td class="data"><pre class="data"><xsl:value-of select="queryString"/></pre></td></tr>
                                            <tr><td class="data key">Cookies</td><td class="data delimiter">:</td><td class="data"><pre class="data"><xsl:value-of select="cookies"/></pre></td></tr>
                                            <tr><td class="data key">Request Headers</td><td class="data delimiter">:</td><td class="data"><pre class="data"><xsl:value-of select="requestHeader"/></pre></td></tr>
                                        </table>
                                    </div>
                                    <div class="trail"></div>
                                    <div class="group">Response</div>
                                    <div class="zebra">
                                        <table>
                                            <tr><td class="data key">Response Headers</td><td class="data delimiter">:</td><td class="data"><pre class="data"><xsl:value-of select="responseHeader"/></pre></td></tr>
                                            <tr><td class="data key">Response Data</td><td class="data delimiter">:</td><td class="data"><pre class="data"><xsl:value-of select="responseData"/></pre></td></tr>
                                            <tr><td class="data key">Response File</td><td class="data delimiter">:</td><td class="data"><pre class="data"><xsl:value-of select="responseFile"/></pre></td></tr>
                                        </table>
                                    </div>
                                    <div class="trail"></div>
                                </div>
                            </li>
                        </xsl:for-each>
                    </ol>
                </div>
                <div id="right-panel"></div>
            </body>
            </html>
        </xsl:template>
    </xsl:stylesheet>



    展开全文
  • Jmeter测试报告生成

    2019-09-29 22:00:19
    Jmeter测试报告生成  本文使用的 Jmeter 版本为 apache-jmeter-3.2 1. 命令行模式将 jtl 文件转成测试图表 注意: 这种方式只适用于jmeter3.0以后的版本 1.1 在测试的过程中将 jtl 转换成测试报告 可以执行如下...

    Jmeter测试报告生成

      本文使用的 Jmeter 版本为 apache-jmeter-3.2
    15201284_201710161713571ajDX.jpg
      1. 命令行模式将 jtl 文件转成测试图表
      注意: 这种方式只适用于jmeter3.0以后的版本
      1.1 在测试的过程中将 jtl 转换成测试报告
      可以执行如下命令:
      jmeter -n -t test_request.jmx -l test_result.jtl -e -o /home/csmijo/resultReport
      参数说明:
      -n : 非GUI 模式执行JMeter
      -t : 执行测试文件所在的位置及文件名
      -r : 远程将所有agent启动用在分布式测试场景下,不是分布式测试只是单点就不需要-r
      -l : 指定生成测试结果的保存文件, jtl 文件格式
      -e : 测试结束后,生成测试报告
      -o : 指定测试报告的存放位置
      ps:-o 指定的文件及文件夹,必须不存在,否则执行会失败,对应上面的命令就是 resultReport 文件夹必须不存在否则报错;如果存在,则文件夹必须为空;
      报告文件如下图所示:
    15201284_201710161713451Bfq4.jpg
      1.2 使用之前的测试结果,生成测试报告
      如果在执行压测脚本的时候没有指定生成测试报告,在测试结束之后,也可以通过如下的命令生成:
      jmeter -g log.jtl -e -o resultReport
      参数说明:
      -g : 指定已存在的测试结果文件
      -e : 测试结果后,生成测试报告
      -o : 指定测试报告的存放位置
      ps:-o 指定的文件及文件夹,必须不存在 ,否则执行会失败
      效果如上图
      2. 插件模式将 jtl 转成测试图表
      2.1 图表 plugin 的类型
      1.AggregateReport=JMeter's native Aggregate Report,can be saved only as CSV
      2.SynthesisReport=mix between JMeter's native Summary Report and Aggregate Report,can be saved only as CSV
      3.ThreadsStateOverTime=Active Threads Over Time
      4.BytesThroughputOverTime
      5.HitsPerSecond
      6.LatenciesOverTime
      7.PerfMon=PerfMon Metrics Collector
      8.DbMon=DbMon Metrics Collector,DataBase,get performance counters via sql
      9.JMXMon=JMXMon Metrics Collector, Java Management Extensions counters
      10.ResponseCodesPerSecond
      11.ResponseTimesDistribution
      12.ResponseTimesOverTime
      13.ResponseTimesPercentiles
      14.ThroughputVsThreads
      15.TimesVsThreads=Response Times VS Threads
      16.TransactionsPerSecond
      17.PageDataExtractorOverTime
      18.MergeResults=MergeResults Command Line Merge Tool to simplify the comparison of two or more load tests, need properties file (like merge-results.properties)
      2.2 不同 plugin类型的生成方式
      2.2.1 主要 plugin 类型
      这里使用JMeterPluginCMD来生成对应的图片或者 csv 统计文件。
      1.从官网下载:jpgc-cmd-2.1.zip: https://jmeter-plugins.org/wiki/JMeterPluginsCMD/
      2.解压文件,对应的文件分别放入jmeter安装目录的对应文件夹下,即解压后bin录下的文件都放入到jmeter安装目录的bin目录下,以此类推
      3.为了使用 JMeterPluginCMD 生成结果图片或 csv 文件,还需要依赖一下的组件:
      i.jpgc-filterresults-2.1.zip https://jmeter-plugins.org/wiki/FilterResultsTool/
      ii.jpgc-synthesis-2.1.zip https://jmeter-plugins.org/?search=jpgc-synthesis
      iii.GUI界面中的plugins manager中的jpgc-Standard set,其中共包含以下的文件:
      jpgc-dummy
      jpgc-fifo
      jpgc-graphs-basic
      jpgc-perfmon
      jpgc-tst
      jpgc-sense
      jpgc-functions
      jpgc-casutg
      jpgc-ffw
      4.然后就可以使用JMeterPluginsCMD.bat/sh生成图片或CSV文件了。比如生成性能测试结果图片或CSV文件的命令为:
      #生成图片
      JMeterPluginsCMD.bat --generate-png cpu.png --input-jtl cpu.jtl --plugin-type PerfMon
      #生成CSV文件
      JMeterPluginsCMD.bat --generate-csv cpu.csv --input-jtl cpu.jtl --plugin-type PerfMon
      5.添加完上述的文件就可以生成如下plugin类型的图表
      i.AggregateReport
      ii.SynthesisReport
      iii.ThreadsStateOverTime
      iv.PerfMon
      v.ResponseTimesOverTime
      vi.TransactionsPerSecond
    15201284_2017101617152316wDT.jpg
      2.2.2 其他类型的 plugin
      如果要生成如下plugin类型的图表:
      1.BytesThroughputOverTime
      2.HitsPerSecond
      3.LatenciesOverTime
      4.ResponseCodesPerSecond
      5.ResponseTimesDistribution
      6.ResponseTimesPercentiles
      7.ThroughputVsThreads
      8.TimesVsThreads
      就还需要添加如下的jar包到jmeter安装目录的lib\ext下:
      JMeterPlugins-Standard.jar
      https://jmeter-plugins.org/downloads/old/
      JMeterPlugins-Extras.jar
      https://jmeter-plugins.org/downloads/old/
      2.2.3 生成所有 plugin 类型的命令
      添加好上面的依赖文件后,就可以使用如下的脚本批量生成图表了。
    15201284_201710161715571Oqes.jpg

    >>每天充电一小时,搞定Python全栈测试开发

    转载于:https://www.cnblogs.com/jpfss/p/10774082.html

    展开全文
  • JMeter测试报告优化

    2016-04-18 15:28:30
    jmeter-results-detail-report_21.xslJMeter测试报告优化,结果信息比较简单,对于运行成功的case,还可以将就用着。但对于跑失败的case,就只有一行assert错误信息。
  • jmeter测试报告分析

    万次阅读 2018-01-02 15:41:13
    Jmeter报告解析 1、Aggregate Report 解析 Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为“聚合报告”。今天再次有同行问到这个报告中的各项数据表示什么意思,顺便在这里公布一下,以备大家查阅...
    Jmeter报告解析
      1、Aggregate Report 解析
      Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为“聚合报告”。今天再次有同行问到这个报告中的各项数据表示什么意思,顺便在这里公布一下,以备大家查阅。
      如果大家都是做Web应用的性能测试,例如只有一个登录的请求,那么在Aggregate Report中,会显示一行数据,共有10个字段,含义分别如下。
      Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
      #Samples:表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
      Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间
      Median:中位数,也就是 50% 用户的响应时间
      90% Line:90% 用户的响应时间
      Note:关于 50% 和 90% 并发用户数的含义,请参考下文
      http://www.cnblogs.com/jackei/archive/2006/11/11/557972.html
      Min:最小响应时间
      Max:最大响应时间
      Error%:本次测试中出现错误的请求的数量/请求的总数
      Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
      KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec
      基本知识:
      1、吞吐量:是指在没有帧丢失的情况下,设备能够接受的最大速率。
      2、存储的最小单位是字节Byte,对于存储单位,有以下几个单位,GB、MB和KB,那么这三者之间的换算关系是:1GB=1024MB,1MB=1024KB,1KB=1024Bytes。
      Bit :“位”,称为bit,也就是比特,有的时候也称为位。一个字节为8位二进制表示。
      Byte:“字节”,一个字节就是8比特。
      3、Mbps (million bits per second 兆位/秒) 代表每秒传输1,000,000比特。该缩写用来描述数据传输速度。例如:4Mbps=每秒钟传输4M比特。
      数据传输速率的单位,字母b(bit)是比特和字母 B (Byte)是字节。
      4、吞吐量与带宽的区分:吞吐量和带宽是很容易搞混的一个词,两者的单位都是Mbps.先让我们来看两者对应的英语,吞吐量:throughput ; 带宽: Max net bitrate 。当我们讨论通信链路的带宽时,一般是指链路上每秒所能传送的比特数。我们可以说以太网的带宽是10Mbps。但是,我们需要区分链路上的可用带宽(带宽)与实际链路中每秒所能传送的比特数(吞吐量)。我们倾向于用“吞吐量”一次来表示一个系统的测试性能。这样,因为实现受各种低效率因素的影响,所以由一段带宽为10Mbps的链路连接的一对节点可能只达到2Mbps的吞吐量。这样就意味着,一个主机上的应用能够以2Mbps的速度向另外的一个主机发送数据。
      5、方差和标准差都是用来描述一组数据的波动性的(集中还是分散),标准差的平方就是方差。方差越大,数据的波动越大。

    详细结果分析:用过LoadRunner的人应该都知道,LoadRunner会为我们提供一大堆图标和曲线。但是在Jmeter里,我们只能找到几个可怜的Listener来方便我们查看测试结果。但是,对于初学者来说,一些简单的结果分析工具可以使我们更容易理解性能测试结果的分析原理。所以,千万别小看这几个简单的Listener啊。

    A.Aggregate Report 聚合报告

    clip_image002

    我们可以看到,通过这份报告我们就可以得到通常意义上性能测试所最关心的几个结果了。

    Samples -- 本次场景中一共完成了多少个Transaction

    Average -- 平均响应时间

    Median -- 统计意义上面的响应时间的中值

    90% Line -- 所有transaction中90%的transaction的响应时间都小于xx

    Min -- 最小响应时间

    Max -- 最大响应时间

    PS: 以上时间的单位均为ms

    Error -- 出错率

    Troughput -- 吞吐量,单位:transaction/sec

    KB/sec -- 以流量做衡量的吞吐量

    B.View Results Tree 以树状列表查看结果

    clip_image003

    通过这个Listener,我们可以看到很详细的每个transaction它所返回的结果,其中红色是指出错的transaction,绿色则为通过的。

    如果你测试的场景会有很多的transaction完成,建议在这个Listener中仅记录出错的transaction就可以了。要做到这样,你只需要将Log/Display:中的Errors勾中就可以了。

    二、.jtl文件的分析

    在性能测试过程中,我们往往需要将测试结果保存在一个文件当中,这样既可以保存测试结果,也可以为日后的性能测试报告提供更多的素材。

    Jmeter中,结果都存放在.jtl文件。这个.jtl文件可以提供多种格式的编写,而一般我们都是将其以csv文件格式记录,这样做是因为csv文件格式看起来比较方便,更重要的是这样做可以为二次分析提供很多便利。

    我这里所说的二次分析是指除了使用Listener之外,我们还可以对.jtl文件进行再次分析。

    a.设置jtl文件格式

    我们从jmeter官方网站中下载下来的Jmeter解压后是可以直接使用的。但是,使用默认配置生成的jtl文件内容并不能满足我们的需要。于是我们必须进行必要的设置。在2.2版本中,如果要修改jtl设置必须要到jmeter.properties文件中设置;但是在2.3版本中,我们只需要在界面上设置就可以了。你只需要选择某个Listener,点击页面中的configure按钮。此时,一个设置界面就会弹出来,建议多勾选如下项:Save Field Name,Save Assertion Failure Message。

    b.jtl文件中的各项

    经过了以上设置,此时保存下来的jtl文件会有如下项:

    timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,Latency

    请求发出的绝对时间,响应时间,请求的标签,返回码,返回消息,请求所属的线程,数据类型,是否成功,失败信息,字节,响应时间

    其中聚合报告中的,吞吐量=完成的transaction数/完成这些transaction数所需要的时间;平均响应时间=所有响应时间的总和/完成的transaction数;失败率=失败的个数/transaction数

    温馨提示:在jmeter2.2和2.3版本中,都存在的一个问题是当我们重新打开jmeter,使用某个Listener来查看jtl文件时,jmeter是会报错的。因此当你使用命令行方式完成了一个场景的测试后,你得到的只是一堆保存在jtl文件中的原始数据。所以知道聚合报告中的各项的来源是可以方便大家摆脱测试工具来进行结果的分析。

    总的来说,对于jmeter的结果分析,主要就是对jtl文件中原始数据的整理,我是使用一些小脚本进行相关的分析的,不知道你打算怎么做呢?

    反正实践后,你总能找到一条属于自己的数据分析之路。

    测试结果的分析说明

    说明:

    Label:每个 JMeter 的 element (例如 HTTP Request )都有一个 Name 属性,这里显示的就是 Name 属性的值

    #Samples:表示你这次测试中一共发出了多少个请求,我的测试计划模拟 10 个用户,每个用户迭代 10 次,因此这里显示 100

    Average:平均响应时间 —— 默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以 Transaction 为单位显示平均响应时间

    Median:中位数,也就是 50 %用户的响应时间

    90% Line: 90 %用户的响应时间

    Min: 最小响应时间

    Max: 最大响应时间

    Error%:本次测试中出现错误的请求的数量 / 请求的总数

    [NextPage]

    Throughput:吞吐量 —— 默认情况下表示每秒完成的请求数( Request per Second ),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数

    KB/Sec:每秒从服务器端接收到的数据量,相当于 LoadRunner 中的 Throughput/Sec

    我分别模拟10、25、50、75和100个用户并发访问该页面,根据报告所得测试结果作出如下统计。注:时间单位是ms

    clip_image004

    用户数 #Samples Average Median 90%Line Min Max Error% Throughput KB/Sec

    10 642 672 688 125 125 719 00.0 14.8/sec 221.15

    25 250 1620 1687 1750 250 1781 00.0 14.5/sec 217.14

    50 500 3319 3438 3578 281 3657 00.0 14.2/sec 212.02

    75 750 4887 5109 5584 328 7094 00.0 14.5/sec 216.67

    100 1000 6244 6485 6672 250 6844 00.0 15.1/sec 225.43

    一般情况下,当用户能够在2秒以内得到响应时,会感觉系统的响应很快;当用户在2-5秒之间得到响应时,会感觉系统的响应速度还可以;当用户在5-10秒以内得到响应时,会感觉系统的响应速度很慢,但是还可以接受;而当用户在超过10秒后仍然无法得到响应时,会感觉系统糟透了,或者认为系统已经失去响应,而选择离开这个Web站点,或者发起第二次请求。故该系统的用户信息查询信息页面的在10到25人并发访问时,系统响应速度很快,25人到50人并发访问时速度还可以,50人到100人并发访问就比较慢了。


    展开全文
  • 文本来学习下,如何输入HTML格式的JMeter测试报告。前面已经介绍, 如果要做性能测试,需要在GUI上设计好你的Test Plan,设置各种场景和负载值,包括多少个线程,多少个用户,循环多少次。设置好了保存,然后用...
  • jmeter测试报告优化

    2018-05-17 01:04:00
    1.下载jmeter.results.shanhe.me.xsl 将该文件拷贝到jmeter\extras目录下 2.修改jmeter.results.shanhe.me.xsl 这里直接拷贝 jmeter-results-detail-report_21.xsl 的部分代码 <?xml version="1.0" ...
  • jmeter测试报告图表导出

    千次阅读 2019-04-18 16:01:41
    1.首先确保X:\apache-jmeter-5.1.1\bin中的jmeter.properties文件中的配置和下面的相同 这里是引用jmeter.save.saveservice.bytes = true # Only available with HttpClient4 #jmeter.save.saveservice.sent_bytes...
  • jmeter测试报告套路

    2019-09-25 12:09:28
    各位: 以下是本周第一次双师压测结果,后续优化后会更新优化结果。 配置: 压测环境: staging压测服务器配置4核16G,数据库4核8G ...一、基准测试 学生端 教师端 结论:学...
  • jmeter测试报告自定义生成

    千次阅读 2018-12-13 17:36:12
    一.上图看报告样式: 点击通过可以过滤出可以全部通过的用例,点击失败可以过滤出失败的用例 二.实现的web页面的关键代码 ...三.解析jmeter报告生成报告的部分关键代码 解析生成的xml文件: 获取请求参...
  • 在做接口自动化时,生成的测试报告页面是英文的,如现在我们优化成汉文。操作如下:  1,下载汉化包 下载路径:https://i.cnblogs.com/Files.aspx?order=1 2,解压汉化包 3,复制解压后的汉化包放在jmeter...
  • <!-- Defined parameters (overrideable) --><xsl:param name="showData" select="'n'"/><xsl:param name="dateReport" select="'date not defined'"/> <tr>......
  • 对于没有代码功底的测试人员来说,Postman和Jmeter以及RobotFramework算是“半”自动化测试工具。所谓的半就是介于功能测试测试开发中间的阶段。作为一个经验较为丰富的功能测试来说,想努力发展技术,选择一个...
  • Ant下载 ... Ant部署 ...将下载的Ant放到需要的目录下解压 ..."ant-jmeter-test" ... 需要改成自己本地的 Jmeter 目录 ..."jmeter.home" ..."/Users/zheng.luo/...查看设置的测试报告存放路径,打开测试报告,样式如下:
  • jmeter测试报告的优化

    2017-04-07 17:45:00
    如果按JMeter默认设置,生成报告如下: 从上图可以看出,结果信息比较简单,对于运行成功的case,还可以将就用着。但对于跑失败的case,就只有一行assert错误信息。(信息量太少了,比较难找到失败原因) ...
  • 用Ant 自动生成Jmeter测试报告

    千次阅读 2019-01-24 14:25:24
    1、建立一个ResultLong文件夹和一个Script文件夹,在ResultLong文件夹下创建一个html文件夹以及jtl文件夹,Script文件夹主要放测试脚本,其他文件夹分别放ant生成的html文件以及jtl文件。 ...
  • 一、问题描述 使用jmeter进行自动测试了两个接口,该接口测试有4个断言,其中有3个断言是失败的... 通过jmeter命令行ant生成的测试报告如下: 【jmeter通过ant自动生成测试报告参见:https://www.cnblogs.com/liy...
  • Jmeter测试报告生成(jmete模板3)

    千次阅读 2017-07-21 10:12:06
    1. 命令行模式将 jtl 文件转成测试...1.1 在测试的过程中将 jtl 转换成测试报告 可以执行如下命令: jmeter -n -t test_request.jmx -l test_result.jtl -e -o /home/csmijo/resultReport 参数说明: -n : 非GUI
  • -- Defined parameters (overrideable) --> <xsl:param name="showData" select="'n'"/> 萌股测试报告'"/> <xsl:param name="dateReport" select="'date not defined'"/> <xsl:template match="testResults"> ...
  • 1.如下图,在配置build时,到网上找配置文件,配置样式表文件名经常是jmeter-results-detail-report_21.xsl, 3.但是在其他版本可能被不是这个文件名,在jmeter根目录下模糊搜索jmeter-res,就会出来,然后再把...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,100
精华内容 840
关键字:

jmeter测试报告