httprunner2.3自动化测试报告脚本

<!DOCTYPE html>
<html>
<head>
    <meta charset=utf-8/>
    <meta name=description content=‘‘/>
    <meta name=robots content=noodp, noydir/>
    <meta name=viewport content=width=device-width, initial-scale=1/>
    <meta id="timeStampFormat" name="timeStampFormat" content=MMM d, yyyy hh:mm:ss a/>
 
    <link href=https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,600 rel=stylesheet type=text/css>
    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
 
    <link href=http://extentreports.com/resx/dist/css/extent.css type=text/css rel=stylesheet/>
 
    <title>{{ html_report_name }} - TestReport</title>
 
    <style type=text/css>
        .node.level-1 ul {
            display: none;
        }
 
        .node.level-1.active ul {
            display: block;
        }
 
        .card-panel.environment th:first-child {
            width: 30%;
        }
        .separator {
            color:royalblue;
        }
        #test-collection li, #category-collection li, #exception-collection li{
            padding: 15px 20px;
        }
        .code-block {
            border: 1px solid #ebedef;
            border-radius: 2px;
            color: #222 !important;
            font-family: Consolas, monospace;
            font-size: 13px;
            margin: 0;
            padding: 5px;
            overflow: auto;
        }
        #checkvalue td:first-child,tr:first-child {
            width: 150px
        }
        #checkvalue td:nth-child(5),tr:nth-child(5) {
            width: 60px
        }
        #checkvalue td:nth-child(2),tr:nth-child(2) {
            width: 60px
        }
        #checkvalue td:nth-child(3),tr:nth-child(3) {
            min-width: 100px;
        }
        #checkvalue td:nth-child(4),tr:nth-child(4) {
            min-width: 100px;
        }
        .noncar-seventy-five {
            display: inline-block;
            width: 100%;
            float: left;
            height: 200px;
        }
        .noncar-wrap {
            width: 50%;
            display: inline-block;
            float: left;
        }
        .noncar-inside, .noncar-inside-last {
            border-radius: 4px;
            height: 200px;
        }
        .noncar-title {
            height: 40px;
        }
        .noncar-content {
            margin-bottom: 40px;
        }
        .noncar-content-l, .noncar-content-r {
            display: inline-block;
            height: 140px;
            float: left;
        }
        .noncar-content-r {
            width: 60%;
        }
        .noncar-content-l {
            width: 35%;
            padding-top: 30px;
        }
        .panel-name {
            font-size: 16px;
            padding-left: 16px;
        }
        .tooltipped {
            padding-left: 25px;
        }
 
    </style>
 
</head>
 
<body class=extent standard default hide-overflow dark>
<div id=theme-selector alt=切换主题,默认黑色 title=切换主题>
    <span><i class=material-icons>desktop_windows</i></span>
</div>
 
<nav>
    <div class="nav-wrapper">
        <a href="#!" class="brand-logo blue darken-3">双中台自动化测试报告</a>
 
        <!-- slideout menu -->
        <ul id=slide-out class=side-nav fixed hide-on-med-and-down>
            <li class=waves-effect active><a href=#! view=test-view
                                               onclick="configureView(0);chartsView(‘test‘);"><i class=material-icons>dashboard</i></a>
            </li>
            <li class=waves-effect><a href=#! view=category-view onclick="configureView(1)"><i
                    class=material-icons>label_outline</i></a></li>
        </ul>
 
        <!-- report name -->
        <span class=report-name> {{ html_report_name }}</span>
 
        <!-- report headline -->
        <span class=report-headline></span>
 
        <!-- nav-right -->
        <ul id=nav-mobile class=right hide-on-med-and-down nav-right>
            <li>
                <a href=#!>
                    <span class=label suite-start-time blue darken-3>开始时间:  {{ time.start_at }}</span>
                </a>
            </li>
            <li>
                <a href=#!>
                    <span class=label blue darken-3>执行时间: {{ %0.3f| format(time.duration|float) }} seconds</span>
                </a>
            </li>
            <li>
                <a href=#!>
                    <span class=label blue darken-3>HttpRunner  {{ platform.httprunner_version }} </span>
                </a>
            </li>
            <li>
                <a href=#!>
                    <span class=label blue darken-3>{{ platform.python_version }} </span>
                </a>
            </li>
            <li>
                <a href=#!>
                    <span class=label blue darken-3>{{ platform.platform }}</span>
                </a>
            </li>
        </ul>
    </div>
</nav>
 
<!-- container -->
<div class=container>
 
    <div id=test-view class=view>
 
        <section id=controls>
            <div class=controls grey lighten-4>
                <!-- test toggle -->
                <div class=chip transparent>
                    <a class=dropdown-button tests-toggle data-activates=tests-toggle data-constrainwidth=true
                       data-beloworigin=true data-hover=true href=#>
                        <i class=material-icons>warning</i> 状态
                    </a>
                    <ul id=tests-toggle class=dropdown-content>
                        <li status=pass><a href=#! onclick="filters_testcases(this.type)" type="pass" >成功<i class=material-icons green-text>check_circle</i></a></li>
                        <li status=fail><a href=#!onclick="filters_testcases(this.type)" type="fail" >失败<i class=material-icons red-text>cancel</i></a></li>
                        <!-- <li status="skip"><a href="#!">Skip<i class="material-icons cyan-text">redo</i></a></li> -->
                        <li class=divider></li>
                        <li status=clear clear=true><a href=#! onclick="filters_testcases(this.type)" type="clear" >清空 <i
                                class=material-icons>clear</i></a></li>
                    </ul>
                </div>
                <!-- test toggle -->
 
                <!-- clear filters -->
                <div class=chip transparent hide>
                    <a class=‘‘ id=clear-filters alt=Clear Filters title=Clear Filters>
                        <i class=material-icons>close</i> Clear
                    </a>
                </div>
                <!-- clear filters -->
 
                <!-- enable dashboard -->
                <div id=toggle-test-view-charts class=chip transparent>
                    <a class=pink-text id=enable-dashboard alt=Enable Dashboard title=Enable Dashboard>
                        <i class=material-icons>track_changes</i> 看板切换
                    </a>
                </div>
                <!-- enable dashboard -->
 
                <!-- search -->
                <div class=chip transparent alt=Search Tests title=Search Tests>
                    <a href="#" class=search-div>
                        <i class=material-icons>search</i> 查找
                    </a>
 
                    <div class=input-field left hide>
                        <input style="color: red" id=search-tests type=text class=validate browser-default
                               placeholder=Search Tests...>
                    </div>
 
                </div>
                <!-- search -->
            </div>
        </section>
        <div id=test-view-charts class=subview-full noncar-seventy-five>
            <div id=charts-row class=noncar-wrap>
                <div class= noncar-inside>
                    <div class=noncar-title>
                        <div class=left panel-name>驾驶舱接口自动化测试报告</div>
                    </div>
                    <div class="noncar-content">
                        <div class="noncar-content-l" >
                            <div class=block text>
                                <span class=strong tooltipped data-position=top>总测试:  {{ stat.testcases.total }}</span>
                            </div>
                            <div class=block text>
                                <span class=strong tooltipped data-position=top>成功:  {{ stat.testcases.success }}</span>
                            </div>
                            <div class=block text>
                                <span class=strong tooltipped data-position=top>失败:  {{ stat.testcases.fail }}</span>
                            </div>
                        </div>
                        <div class="noncar-content-r" style="-webkit-tap-highlight-color: transparent; user-select: none; position: relative; background: transparent;">
                            <div class=chart-box  width="369" height="140" data-zr-dom-id="zr_0" style="position: absolute; left: 0px; top: 0px; width: 369px; height: 140px; user-select: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); padding: 0px; margin: 0px; border-width: 0px;">
                                <canvas id="child-analysis" width="369" height="140" style="position: absolute; left: 0px; top: 0px; width: 369px; height: 140px; user-select: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); padding: 0px; margin: 0px; border-width: 0px;">
                                </canvas>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <div id=charts-row class=noncar-wrap>
                <div class= noncar-inside>
                    <div class=noncar-title>
                        <div class=left panel-name>测试详情</div>
                    </div>
                    <div class="noncar-content">
                        <div class="noncar-content-l" >
                            <div class=block text>
                                <span class=strong tooltipped data-position=top>总数:  {{ stat.teststeps.total }}</span>
                            </div>
                            <div class=block text>
                                <span class=strong tooltipped data-position=top>成功:  {{ stat.teststeps.successes }}</span>
                            </div>
                            <div class=block text>
                                <span class=strong tooltipped data-position=top>失败:  {{ stat.teststeps.failures }}</span>
                            </div>
                            <div class=block text>
                                <span class=strong tooltipped data-position=top>错误:  {{ stat.teststeps.errors }}</span>
                            </div>
                            <div class=block text>
                                <span class=strong tooltipped data-position=top>跳过:  {{ stat.teststeps.skipped }}</span>
                            </div>
                        </div>
                        <div class="noncar-content-r" style="-webkit-tap-highlight-color: transparent; user-select: none; position: relative; background: transparent;">
                            <div class=chart-box  width="369" height="140" style="position: absolute; left: 0px; top: 0px; width: 369px; height: 140px; user-select: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); padding: 0px; margin: 0px; border-width: 0px;">
                                <canvas id=parent-analysis width=369 height=140 style="position: absolute; left: 0px; top: 0px; width: 369px; height: 140px; user-select: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); padding: 0px; margin: 0px; border-width: 0px;"></canvas>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
 
        <div class=subview-left left>
 
            <div class=view-summary>
                <h5>测试详情</h5>
                <ul id=test-collection class=test-collection>
 
                    {% for test_suite_summary in details %}
                        {% if test_suite_summary.success == True %}
                            <li class=test displayed active has-leaf pass status=pass bdd=true test-id={{ test_suite_summary.name }}_{{ loop.index }}>
                        {% else %}
                            <li class=test displayed active has-leaf fail status=fail bdd=false test-id={{ test_suite_summary.name }}_{{ loop.index }}>
                        {% endif %}
                        <div class=test-heading>
                            <span class=test-name>{{ test_suite_summary.name }}</span>
                            {% if test_suite_summary.success == True %}
                                <span class=test-status right pass>成功</span>
                            {% else %}
                                <span class=test-status right fail>失败</span>
                            {% endif %}
 
                        </div>
                        <div class=test-content hide>
                            <div class=test-time-info>
                                <span class=label start-time>{{ test_suite_summary.time.start_at }}</span>
                                <span class=label end-time>{{ %0.3f| format(test_suite_summary.time.duration|float) }} seconds</span>
                            </div>
                            <div class=test-desc>成功: {{ test_suite_summary.stat.successes }} ;
                                失败: {{ test_suite_summary.stat.failures }} ;
                                错误: {{ test_suite_summary.stat.errors }}
                                跳过: {{ test_suite_summary.stat.skipped }} ;
                            </div>
                            <ul class=collapsible node-list data-collapsible=accordion>
                                {% for record in test_suite_summary.records %}
                                {% set record_index = "{}_{}".format(suite_index, loop.index) %}
                                {% set record_meta_datas = record.meta_datas_expanded %}
                                    {% if  record.status == success %}
                                        <li class=node level-1 leaf pass status=pass
                                            test-id={{ test_suite_summary.name }}_{{ record.name }}_{{ loop.index }}>
                                            {% elif record.status == failure %}
                                        <li class=node level-1 leaf fail status=fail
                                            test-id={{ test_suite_summary.name }}_{{ record.name }}_{{ loop.index }}>
                                            {% elif record.status == error %}
                                        <li class=node level-1 leaf error status=error
                                            test-id={{ test_suite_summary.name }}_{{ record.name }}_{{ loop.index }}>
                                            {% elif record.status == skipped %}
                                        <li class=node level-1 leaf skip status=skip
                                            test-id={{ test_suite_summary.name }}_{{ record.name }}_{{ loop.index }}>
                                    {% endif %}
                                <div class=collapsible-header>
                                    <div class=node-name>{{ record.name }}</div>
                                    <span class=node-duration>响应时间: {{ record.response_time }} ms</span>
                                    {% if  record.status == success %}
                                        <span class=test-status right pass>通过</span>
                                    {% elif record.status == failure %}
                                        <span class=test-status right fail>失败</span>
                                    {% elif record.status == error %}
                                        <span class=test-status right error>错误</span>
                                    {% elif record.status == skipped %}
                                        <span class=test-status right skip>跳过</span>
                                    {% endif %}
 
                                </div>
                                <div class=collapsible-body>
                                    {% for meta_data in record_meta_datas %}
                                    {% set meta_data_index = loop%}
                                    <div class=node-steps>
                                        {% for req_resp in meta_data.data %}
                                            <table class=bordered table-results>
                                                <thead>
                                                <tr>
                                                    <th>Status</th>
                                                    <th>Params</th>
                                                    <th>Details</th>
                                                </tr>
                                                </thead>
                                                {% if record.status == skipped %}
                                                <tbody>
                                                    {% if record.attachment %}
                                                    <tr class=fail status=fail>
                                                        <td class=status fail title=exception alt=fail><i
                                                                class=material-icons>cancel</i></td>
                                                        <td class=timestamp>traceback</td>
                                                        <td class=step-details>
                                                            <pre class="code-block">{{ record.attachment | e }}</pre>
                                                        </td>
                                                    </tr>
                                                    {% endif %}
                                                </tbody>
                                                {% else %}
                                                    {% if loop.index > 1 %}
                                                    <div class="separator" align="center">==================================== redirect to ====================================</div>
                                                    {% endif %}
                                                    <tbody>
                                                    <tr class=info status=info>
                                                        <td class=status info title=接口地址 alt=info><i
                                                                class=material-icons>low_priority</i></td>
                                                        <td class=timestamp>url</td>
                                                        <td class=step-details>{{ req_resp.request.url }}</td>
                                                    </tr>
                                                    {% if req_resp.request.method %}
                                                    <tr class=info status=info>
                                                        <td class=status info title=请求方式 alt=info><i
                                                                class=material-icons>low_priority</i></td>
                                                        <td class=timestamp>method</td>
                                                        <td class=step-details>{{ req_resp.request.method }}</td>
                                                    </tr>
                                                    {% endif %}
                                                    <tr class=info status=info>
                                                        <td class=status info title=状态码 alt=info><i
                                                                class=material-icons>low_priority</i></td>
                                                        <td class=timestamp>status_code</td>
                                                        <td class=step-details>{{ req_resp.response.status_code }}</td>
                                                    </tr>
                                                    {% for key, value in req_resp.request.items() %}
                                                        {% if key != url and key != method and key != start_timestamp %}
                                                            <tr class=warning status=warning>
                                                                <td class=status warning title={{ key }} alt=warning><i
                                                                        class=material-icons>low_priority</i></td>
                                                                {% if key == "headers" %}
                                                                    <td class=timestamp>req_header</td>
                                                                {% else %}
                                                                    <td class=timestamp>{{ key }}</td>
                                                                {% endif %}
                                                                <td class=step-details>
                                                                    {% if key == "headers" %}
                                                                        {% for header_key, header_value in req_resp.response.headers.items() %}
                                                                            <div>{{ header_key }}: {{ header_value | e}}</div>
                                                                        {% endfor %}
                                                                    {% else %}
                                                                        {{ value }}
                                                                    {% endif %}
                                                                </td>
                                                            </tr>
                                                        {% endif %}
                                                    {% endfor %}
                                                    {% if meta_data_index.length > 1 %}
                                                    <div class="separator" align="center">==================================== request_{{meta_data_index.index}} ====================================</div>
                                                    {% endif%}
                                                    {% for key, value in req_resp.response.items() %}
                                                        {% if key != "elapsed_ms" and key != "response_time_ms" and key != "content_size" and key != "content_type" and key != "status_code" and key != "reason" and key != "ok" and key != "encoding" and key != "url" and value %}
                                                            <tr class=error status=error>
                                                                <td class=status error title={{ key }} alt=error><i
                                                                        class=material-icons>low_priority</i></td>
                                                                {% if key == "headers" %}
                                                                    <td class=timestamp>rsp_header</td>
                                                                {% else %}
                                                                    <td class=timestamp>{{ key }}</td>
                                                                {% endif %}
                                                                <td class=step-details>
                                                                    {% if key == "headers" %}
                                                                        {% for header_key, header_value in req_resp.response.headers.items() %}
                                                                            <pre class="code-block">{{ header_key }}: {{ header_value }}</pre>
                                                                        {% endfor %}
                                                                    {% elif key == "content" %}
                                                                        {% if "image" in req_resp.response.content_type %}
                                                                            <img src="{{ req_resp.response.content }}" />
                                                                        {% else %}
                                                                            {{ value }}
                                                                        {% endif %}
                                                                    {% elif key in ["text", "json"] %}
                                                                        {% if value is mapping%}
                                                                            <pre>{{ value | tojson | e }}</pre>
                                                                        {% else %}
                                                                            <pre>{{ value | e }}</pre>
                                                                        {% endif %}
                                                                    {% elif key == "cookies" %}
                                                                        {% for cookies_key, cookies_value in req_resp.response.cookies.items() %}
                                                                            <pre>{{ cookies_key }}: {{ cookies_value }}</pre>
                                                                        {% endfor %}
                                                                    {% else %}
                                                                        {{ value }}
                                                                    {% endif %}
                                                                </td>
                                                            </tr>
                                                        {% endif %}
                                                    {% endfor %}
 
                                                    <tr class=pass status=pass>
                                                        <td class=status pass title=断言 alt=pass><i
                                                                class=material-icons>low_priority</i></td>
                                                        <td class=timestamp>Validators</td>
                                                        <td >
                                                                <table id="checkvalue" >
                                                                <tr>
                                                                    <th >check</th>
                                                                    <th>comparator</th>
                                                                    <th>expect value</th>
                                                                    <th>actual value</th>
                                                                    <th>result</th>
                                                                </tr>
                                                                {% for validator in meta_data.validators %}
                                                                <tr>
                                                                    <td >{{validator.check | e}}</td>
                                                                    <td>{{validator.comparator}}</td>
                                                                    <td>{{validator.expect | e}}</td>
                                                                    <td>{{validator.check_value | e}}</td>
                                                                    {% if validator.check_result == "pass" %}
                                                                    <td class="test-status pass">通过</td>
                                                                    {% elif validator.check_result == "fail" %}
                                                                    <td class="test-status fail">失败</td>
                                                                    {% elif validator.check_result == "unchecked" %}
                                                                    <td class="test-status skip">unchecked</td>
                                                                    {% endif %}
                                                                </tr>
                                                                {% endfor %}
                                                            </table>
                                                        </td>
                                                    </tr>
 
                                                    <tr class=info status=info>
                                                        <td class=status info title=info alt=info><i
                                                                class=material-icons>low_priority</i></td>
                                                        <td class=timestamp>Statistics</td>
                                                        <td class=step-details>
                                                            <div>
                                                                content_size(bytes): {{ meta_data.stat.content_size }}
                                                            </div>
                                                            <div>
                                                                response_time(ms): {{ meta_data.stat.response_time_ms }}
                                                            </div>
                                                            <div>
                                                                elapsed(ms): {{ meta_data.stat.elapsed_ms }}
                                                            </div>
                                                        </td>
                                                    </tr>
 
                                                    {% if record.attachment and meta_data_index.last %}
 
                                                        <tr class=fail status=fail>
                                                            <td class=status fail title=exception alt=fail><i
                                                                    class=material-icons>cancel</i></td>
                                                            <td class=timestamp>traceback</td>
                                                            <td class=step-details>
                                                                <pre class="code-block">{{ record.attachment | e }}</pre>
                                                            </td>
                                                        </tr>
                                                    {% endif %}
                                                    </tbody>
                                                {% endif %}
                                                </table>
                                        {% endfor %}
                                    </div>
                                    {% endfor %}
                                </div>
                                </li>
                                {% endfor %}
                            </ul>
                        </div>
                    {% endfor %}
                </ul>
            </div>
        </div>
        <!-- subview left -->
 
        <div class=subview-right left>
            <div class=view-summary>
                <h6 class=test-name></h6>
 
                <div id=step-filters class="right">
                    <span status="pass" alt="pass" title="pass"><a href=#! onclick="step_filter(this.type)" type="pass"><i class="material-icons green-text">check_circle</i></a></span>
                    <span status="fail" alt="fail" title="fail"><a href=#! onclick="step_filter(this.type)" type="fail"><i
                            class="material-icons red-text">cancel</i></a></span>
                    <span class="text-lighten-1" status="error" alt="error" title="error"><a href=#! onclick="step_filter(this.type)" type="error"><i
                            class="material-icons pink-text ">error</i></a></span>
                    <span status="skip" alt="skip" title="skip"><a href=#! onclick="step_filter(this.type)" type="skip"><i
                            class="material-icons teal-text">redo</i></a></span>
                    <span status="clear" alt="Clear filters" title="Clear filters"><a href=#! onclick="step_filter(this.type)" type="clear"><i
                            class="material-icons">clear</i></a></span>
                </div>
            </div>
        </div>
    </div>
    <!-- subview right -->
    <!-- test view -->
    <div id=category-view class=view hide>
 
        <section id=controls>
            <div class=controls grey lighten-4>
                <!-- search -->
                <div class=chip transparent alt=Search Tests title=Search Tests>
                    <a href="#" class=search-div>
                        <i class=material-icons>search</i> Search
                    </a>
 
                    <div class=input-field left hide>
                        <input style="color: red;" id=search-tests type=text class=validate browser-default placeholder=Search Tests...>
                    </div>
 
                </div>
                <!-- search -->
            </div>
        </section>
 
        <div class=subview-left left>
 
            <div class=view-summary>
                <h5>Categories</h5>
                <ul id=category-collection class=category-collection>
 
                    <li class=category displayed active>
                        <div class=category-heading>
                            <span class=category-name>All TESTCASES</span>
                            <span class=category-status right>
                                <span class=label pass>{{ stat.testcases.success }} </span>
                                {% if stat.testcases.fail != 0 %}
                                    <span class=label fail>{{ stat.testcases.fail }}</span>
                                {% endif %}
                                </span>
                        </div>
                        <div class=category-content hide>
                            <div class=category-status-counts>
                                <span class=label green accent-4 white-text>Passed: {{ stat.teststeps.successes }}</span>
                                <span class=label red lighten-1 white-text>Failed: {{ stat.teststeps.failures }}</span>
                                <span class=label blue lighten-1 white-text>Errored: {{ stat.teststeps.errors }}</span>
                                <span class="label yellow darken-2 white-text">Skipped: {{ stat.teststeps.skipped }}</span>
                            </div>
 
                            <div class=category-tests>
                                <table class=bordered table-results>
                                    <thead>
                                    <tr>
                                        <th>Timestamp</th>
                                        <th>TestName</th>
                                        <th>Status</th>
                                    </tr>
                                    </thead>
                                    <tbody>
                                    {% for test_suite_summary in details %}
                                        <tr style="border: 1px solid #49cc90; background-color: rgba(73, 204, 144, .1)">
                                            <td>{{ %0.3f| format(test_suite_summary.time.duration|float) }} s</td>
                                            <td class=linked
                                                test-id={{ test_suite_summary.name }}_{{ loop.index }}>{{ test_suite_summary.name }}</td>
                                            {% if test_suite_summary.success == True %}
                                                <td><span class=test-status pass>成功</span></td>
                                            {% else %}
                                                <td><span class=test-status fail>失败</span></td>
                                            {% endif %}
 
                                        </tr>
                                        {% for record in test_suite_summary.records %}
                                            <tr>
                                                <td>{{ record.response_time }} ms</td>
                                                <td class=linked
                                                    test-id={{ test_suite_summary.name }}_{{ loop.index }}>{{ record.name }}</td>
                                                {% if record.status == success %}
                                                    <td><span class=test-status pass>成功</span></td>
                                                {% elif record.status == failure %}
                                                    <td><span class=test-status fail>失败</span></td>
                                                {% elif record.status == error %}
                                                    <td><span class=test-status error>错误</span></td>
                                                {% elif record.status == skipped %}
                                                    <td><span class=test-status style="color: #fbc02d">跳过</span>
                                                    </td>
                                                {% endif %}
                                            </tr>
                                        {% endfor %}
                                    {% endfor %}
                                    </tbody>
                                </table>
                            </div>
                        </div>
                    </li>
 
                    {% for test_suite_summary in details %}
                        <li class=category displayed active>
                            <div class=category-heading>
                                <span class=category-name>{{ test_suite_summary.name }}</span>
                                <span class=category-status right>
                                <span class=label pass>{{ test_suite_summary.stat.successes }} </span>
                                    {% if test_suite_summary.stat.failures != 0 %}
                                        <span class=label fail>{{ test_suite_summary.stat.failures }}</span>
                                    {% endif %}
                                    {% if test_suite_summary.stat.errors != 0 %}
                                        <span class=label blue lighten-1>{{ test_suite_summary.stat.errors }}</span>
                                    {% endif %}
                                    {% if test_suite_summary.stat.skipped != 0 %}
                                        <span class=label yellow darken-2>{{ test_suite_summary.stat.skipped }}</span>
                                    {% endif %}
                                </span>
                            </div>
                            <div class=category-content hide>
                                <div class=category-status-counts>
                                    <span class=label green accent-4 white-text>Passed: {{ test_suite_summary.stat.successes }}</span>
                                    <span class=label red lighten-1 white-text>Failed: {{ test_suite_summary.stat.failures }}</span>
                                    <span class=label blue lighten-1 white-text>Errored: {{ test_suite_summary.stat.errors }}</span>
                                    <span class="label yellow darken-2 white-text">Skipped: {{ test_suite_summary.stat.skipped }}</span>
                                </div>
 
                                <div class=category-tests>
                                    <table class=bordered table-results>
                                        <thead>
                                        <tr>
                                            <th>Timestamp</th>
                                            <th>TestName</th>
                                            <th>Status</th>
                                        </tr>
                                        </thead>
                                        <tbody>
                                        {% for record in test_suite_summary.records %}
                                            <tr>
                                                <td>{{ record.response_time }}</td>
                                                <td class=linked
                                                    test-id={{ test_suite_summary.name }}_{{ loop.index }}>{{ record.name }}</td>
                                                {% if record.status == success %}
                                                    <td><span class=test-status pass>成功</span></td>
                                                {% elif record.status == failure %}
                                                    <td><span class=test-status fail>失败</span></td>
                                                {% elif record.status == error %}
                                                    <td><span class=test-status error>错误</span></td>
                                                {% elif record.status == skipped %}
                                                    <td><span class=test-status style="color: #fbc02d">跳过</span>
                                                    </td>
                                                {% endif %}
                                            </tr>
                                        {% endfor %}
                                        </tbody>
                                    </table>
                                </div>
                            </div>
                        </li>
                    {% endfor %}
                </ul>
            </div>
        </div>
 
        <div class=subview-right left>
            <div class=view-summary>
                <h5 class=category-name></h5>
            </div>
        </div>
    </div>
    <!-- category view -->
 
 
    <!-- testrunner-logs view -->
    <!-- container -->
</div>
<script>
    var test_suite_success = 0;
    {%for test_suite_summary in details %}
        {% if test_suite_summary.success == True %}
            test_suite_success = test_suite_success + 1;
        {% endif %}
 
    {% endfor %}
 
    var statusGroup = {
        passParent: {{ stat.teststeps.successes }},
        failParent: {{ stat.teststeps.failures }},
        fatalParent: 0,
        errorParent: {{ stat.teststeps.errors }},
        warningParent: 0,
        skipParent: {{ stat.teststeps.skipped }},
        exceptionsParent: 0,
 
        passChild: test_suite_success,
        failChild: {{ details|length }} -test_suite_success,
        fatalChild: 0,
        errorChild: 0,
        warningChild: 0,
        skipChild: 0,
        infoChild: 0,
        exceptionsChild: 0,
 
        passGrandChild: 0,
        failGrandChild: 0,
        fatalGrandChild: 0,
        errorGrandChild: 0,
        warningGrandChild: 0,
        skipGrandChild: 0,
        infoGrandChild: 0,
        exceptionsGrandChild: 0,
    };
 
</script>
 
<script src=http://extentreports.com/resx/dist/js/extent.js type=text/javascript></script>
 
 
<script type=text/javascript>
    $(window).off("keydown");
</script>
 
<script type="text/javascript">
    function filters_testcases(mytype){
        testcases = document.getElementById(test-collection).getElementsByClassName(displayed)
        if (mytype == pass){
            for (var i=0,len=testcases.length;i < len; i++){
                if (testcases[i].getAttribute(bdd) == false){
                    testcases[i].style.display="none"
                }else{
                    testcases[i].style.display="block"
                }
            }
        }else if(mytype == fail){
            for (var i=0,len=testcases.length;i < len; i++){
                if (testcases[i].getAttribute(bdd) == true){
                    testcases[i].style.display="none"
                }else{
                    testcases[i].style.display="block"
                }
            }
        }else if(mytype == clear){
            for (var i=0,len=testcases.length;i < len; i++){
                testcases[i].style.display="block"
            }
        }
    };
</script>>
<script type="text/javascript">
    function step_filter(mytype){
        testcontents = document.getElementsByClassName(test-content)
        teststeps = testcontents[testcontents.length - 1].getElementsByTagName(li);
        stepfilters = document.getElementById(step-filters).getElementsByTagName(span);
        for (var i=0, len=stepfilters.length;i<len;i++){
            if (stepfilters[i].getAttribute(status) != mytype){
                stepfilters[i].classList.remove(border-bottom-highlight)
            }
        }
        for (var i=0,len=teststeps.length;i < len; i++){
            if (mytype != clear){
                if (teststeps[i].getAttribute(status) == mytype){
                    teststeps[i].style.display="block"
                }else{
                    teststeps[i].style.display="none"
                }
            }else{
                teststeps[i].style.display="block"
            }
        }
    }
</script>>
</body>
 
</html>

 

httprunner2.3自动化测试报告脚本

上一篇:thinkphp6使用validate验证层


下一篇:5、k8s部署netcore