<!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>
原文:https://www.cnblogs.com/camillezxl/p/14900693.html