|
@@ -0,0 +1,406 @@
|
|
|
+<!DOCTYPE html>
|
|
|
+<html>
|
|
|
+ <head>
|
|
|
+ <title>测试报告</title>
|
|
|
+ <meta charset="UTF-8">
|
|
|
+ <style>body {
|
|
|
+ font-family: consolas, Verdana, sans-serif;
|
|
|
+ font-size: .92em;
|
|
|
+ color: #696e71;
|
|
|
+}
|
|
|
+
|
|
|
+.main_section {
|
|
|
+ width: 90%;
|
|
|
+ margin: 0 auto;
|
|
|
+}
|
|
|
+
|
|
|
+#float_menu{
|
|
|
+ position:fixed;
|
|
|
+ top:0;
|
|
|
+ right:0;
|
|
|
+ text-align: center;
|
|
|
+}
|
|
|
+
|
|
|
+#float_menu .menu-item {
|
|
|
+ cursor: pointer;
|
|
|
+ padding: .5em;
|
|
|
+ margin: .5em 0;
|
|
|
+ color: #c08580;
|
|
|
+ background-color: #f8f0ef;
|
|
|
+ font-size: 1.2em;
|
|
|
+}
|
|
|
+
|
|
|
+table.result_stats{
|
|
|
+ border-collapse: collapse;
|
|
|
+ border: 1px solid #f0e0e5;
|
|
|
+ width: 35em;
|
|
|
+ text-align: center;
|
|
|
+ font-size: 1.0em;
|
|
|
+}
|
|
|
+
|
|
|
+table.result_stats td{
|
|
|
+ border: 1px solid #f0e0e5;
|
|
|
+ padding: .3em;
|
|
|
+}
|
|
|
+
|
|
|
+.h3_button {
|
|
|
+ margin: 1.5em;
|
|
|
+ cursor: pointer;
|
|
|
+ color: #03a9f4;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+.info
|
|
|
+{
|
|
|
+ white-space:pre-wrap;
|
|
|
+ padding: .6em;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+.error-info
|
|
|
+{
|
|
|
+ color: #a64747
|
|
|
+}
|
|
|
+
|
|
|
+.suite_dir {
|
|
|
+ margin: 1em .2em;
|
|
|
+ padding: .3em;
|
|
|
+ /* background-color: #dfeff6; */
|
|
|
+ border: 1px solid #bcd8e4;
|
|
|
+}
|
|
|
+.suite_file {
|
|
|
+ margin: 1em .2em;
|
|
|
+ padding: .3em;
|
|
|
+ border: 1px solid #bcd8e4;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+.case {
|
|
|
+ margin: 1em .2em;
|
|
|
+ /* padding: .3em; */
|
|
|
+ border: 1px solid #e7d4d4;
|
|
|
+}
|
|
|
+
|
|
|
+.case_class_path{
|
|
|
+ margin: 0em 1em;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+.folder_header {
|
|
|
+ padding: .2em .7em;
|
|
|
+ background-color: #fffaf9;
|
|
|
+ cursor: pointer;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+.setup{
|
|
|
+ margin: .2em;
|
|
|
+ /* padding: .3em; */
|
|
|
+ /* border: 1px solid #e7d4d4; */
|
|
|
+}
|
|
|
+.teardown{
|
|
|
+ margin: .2em;
|
|
|
+ /* padding: .3em;*/
|
|
|
+ /* border: 1px solid #e7d4d4; */
|
|
|
+}
|
|
|
+.test_steps{
|
|
|
+ margin: .2em;
|
|
|
+ padding: .3em;
|
|
|
+ /* border: 1px solid #e7d4d4; */
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+.label {
|
|
|
+ display: inline-block;
|
|
|
+ padding: .1em .5em;
|
|
|
+ font-size: .88em;
|
|
|
+ letter-spacing: 1px;
|
|
|
+ white-space: nowrap;
|
|
|
+ color: #0d6ebc;
|
|
|
+ border-radius: .2em;
|
|
|
+ min-width: 5em;
|
|
|
+ margin-right: 2em;
|
|
|
+ font-family: consolas;
|
|
|
+}
|
|
|
+
|
|
|
+/* .suite_setup .label{
|
|
|
+ color: #219e26 ;
|
|
|
+}
|
|
|
+.suite_teardown .label{
|
|
|
+ color: #219e26;
|
|
|
+} */
|
|
|
+
|
|
|
+
|
|
|
+/* .case.pass .casename{
|
|
|
+ color: #329132 ;
|
|
|
+} */
|
|
|
+.case.pass .caselabel{
|
|
|
+ color: white;
|
|
|
+ background-color: #3b9e3f;
|
|
|
+}
|
|
|
+/* .case.fail .casename{
|
|
|
+ color: #a64747;
|
|
|
+} */
|
|
|
+.case.fail .caselabel{
|
|
|
+ color: white;
|
|
|
+ background-color: #a64747;
|
|
|
+}
|
|
|
+/* .case.abort .casename{
|
|
|
+ color: #953ab7;
|
|
|
+} */
|
|
|
+.case.abort .caselabel{
|
|
|
+ color: white;
|
|
|
+ background-color: #9c27b0;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+.case_step {
|
|
|
+ margin: .8em;
|
|
|
+}
|
|
|
+.checkpoint_pass {
|
|
|
+ margin: .8em;
|
|
|
+}
|
|
|
+.checkpoint_fail {
|
|
|
+ margin: .8em;
|
|
|
+}
|
|
|
+
|
|
|
+.case_step .tag{
|
|
|
+ color: #2196f3;;
|
|
|
+ margin: .3em 1em .3em 0;
|
|
|
+ padding: .1em .3em;
|
|
|
+ font-size: .92em;
|
|
|
+}
|
|
|
+
|
|
|
+.checkpoint_pass .tag{
|
|
|
+ color: #009806;
|
|
|
+ margin:.3em 1em .3em .5em;
|
|
|
+ padding: .1em .3em;
|
|
|
+ font-size: .92em;
|
|
|
+}
|
|
|
+.checkpoint_fail .tag{
|
|
|
+ color: #9c2020;
|
|
|
+ margin:.3em 1em .3em .5em;
|
|
|
+ padding: .1em .3em;
|
|
|
+ font-size: .92em;
|
|
|
+}
|
|
|
+
|
|
|
+.screenshot {
|
|
|
+ border: 1px solid #86c2dd;
|
|
|
+}
|
|
|
+
|
|
|
+.executetime {
|
|
|
+ float: right;
|
|
|
+}</style>
|
|
|
+ <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
|
|
|
+var ERROR_INFOS = []; // 错误信息列表
|
|
|
+var current_error_idx = -1;
|
|
|
+
|
|
|
+// 页面加载后执行的函数
|
|
|
+window.addEventListener("load", function(){
|
|
|
+ // 所有 .folder_header 添加点击事件处理
|
|
|
+ let folderHeaderEles = document.querySelectorAll(".folder_header");
|
|
|
+ folderHeaderEles.forEach(function(ele) {
|
|
|
+ ele.addEventListener("click", function(event) {
|
|
|
+ let fb = event.target.closest('.folder_header').nextElementSibling;
|
|
|
+ fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ // 找到所有的错误信息对象
|
|
|
+ ERROR_INFOS = document.querySelectorAll(".error-info");
|
|
|
+});
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+function toggle_folder_all_cases(){
|
|
|
+ let eles = document.querySelectorAll(".folder_body");
|
|
|
+
|
|
|
+ FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
|
|
|
+ document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "详细" : "精简"
|
|
|
+
|
|
|
+ for (const ele of eles){
|
|
|
+ ele.style.display = FOLDER_ALL_CASES? "none": "block"
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+function previous_error(){
|
|
|
+ // 查找错误必须是详细模式
|
|
|
+ if (FOLDER_ALL_CASES)
|
|
|
+ toggle_folder_all_cases()
|
|
|
+
|
|
|
+ current_error_idx -= 1;
|
|
|
+ if (current_error_idx<0)
|
|
|
+ current_error_idx = 0
|
|
|
+
|
|
|
+
|
|
|
+ let error = ERROR_INFOS[current_error_idx];
|
|
|
+
|
|
|
+ error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+function next_error(){
|
|
|
+
|
|
|
+ // 查找错误必须是详细模式
|
|
|
+ if (FOLDER_ALL_CASES)
|
|
|
+ toggle_folder_all_cases()
|
|
|
+
|
|
|
+ current_error_idx += 1;
|
|
|
+ if (current_error_idx > ERROR_INFOS.length-1)
|
|
|
+ current_error_idx = ERROR_INFOS.length-1
|
|
|
+
|
|
|
+ let error = ERROR_INFOS[current_error_idx];
|
|
|
+
|
|
|
+ error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
|
|
|
+
|
|
|
+}</script>
|
|
|
+ </head>
|
|
|
+ <body>
|
|
|
+ <div class="main_section">
|
|
|
+ <h1 style="font-family: auto">测试报告 - hytest v0.6.1</h1>
|
|
|
+ <h3>统计结果</h3>
|
|
|
+ <table class="result_stats">
|
|
|
+ <tbody>
|
|
|
+ <tr>
|
|
|
+ <td>开始时间</td>
|
|
|
+ <td>20220606 11:16:32</td>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td>结束时间</td>
|
|
|
+ <td>20220606 11:17:06</td>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td>耗时</td>
|
|
|
+ <td>33.910 秒</td>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td>用例数量</td>
|
|
|
+ <td>1</td>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td>通过</td>
|
|
|
+ <td>1</td>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td>失败</td>
|
|
|
+ <td style="">0</td>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td>异常</td>
|
|
|
+ <td style="">0</td>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td>套件初始化失败</td>
|
|
|
+ <td style="">0</td>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td>套件清除失败</td>
|
|
|
+ <td style="">0</td>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td>用例初始化失败</td>
|
|
|
+ <td style="">0</td>
|
|
|
+ </tr>
|
|
|
+ <tr>
|
|
|
+ <td>用例清除失败</td>
|
|
|
+ <td style="">0</td>
|
|
|
+ </tr>
|
|
|
+ </tbody>
|
|
|
+ </table>
|
|
|
+ <div style="margin-top:2em">
|
|
|
+ <h3 style="display:inline">执行日志</h3>
|
|
|
+ </div>
|
|
|
+ <div class="exec_log">
|
|
|
+ <div class="suite_dir" id="suite_dir cases\">
|
|
|
+ <div>
|
|
|
+ <span class="label">进入目录</span>
|
|
|
+ <span>cases\</span>
|
|
|
+ </div>
|
|
|
+ <div class="suite_setup setup" id="suite_setup setup cases\">
|
|
|
+ <div class="folder_header">
|
|
|
+ <span class="label">套件初始化</span>
|
|
|
+ <span>cases\</span>
|
|
|
+ <span class="executetime">2022-06-06 11:16:32</span>
|
|
|
+ </div>
|
|
|
+ <div class="folder_body">
|
|
|
+ <div class="info">打开网站</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="suite_dir" id="suite_dir cases\1非登录\">
|
|
|
+ <div>
|
|
|
+ <span class="label">进入目录</span>
|
|
|
+ <span>cases\1非登录\</span>
|
|
|
+ </div>
|
|
|
+ <div class="suite_setup setup" id="suite_setup setup cases\1非登录\">
|
|
|
+ <div class="folder_header">
|
|
|
+ <span class="label">套件初始化</span>
|
|
|
+ <span>cases\1非登录\</span>
|
|
|
+ <span class="executetime">2022-06-06 11:16:38</span>
|
|
|
+ </div>
|
|
|
+ <div class="folder_body"></div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="suite_file" id="suite_file cases\1非登录\登录成功.py">
|
|
|
+ <div>
|
|
|
+ <span class="label">进入文件</span>
|
|
|
+ <span>cases\1非登录\登录成功.py</span>
|
|
|
+ </div>
|
|
|
+ <div class="case pass" id="case_00000001">
|
|
|
+ <div class="folder_header">
|
|
|
+ <span class="label caselabel">用例 PASS</span>
|
|
|
+ <span class="casename">用户名密码登陆---login_test01</span>
|
|
|
+ <span class="executetime">2022-06-06 11:16:47</span>
|
|
|
+ </div>
|
|
|
+ <div class="folder_body">
|
|
|
+ <span class="case_class_path">cases\1非登录\登录成功.py::LoginWeb</span>
|
|
|
+ <div class="test_steps" id="test_steps 用户名密码登陆---login_test01">
|
|
|
+ <span class="label">测试步骤</span>
|
|
|
+ <div class="checkpoint_pass">
|
|
|
+ <span class="tag">检查点 PASS</span>
|
|
|
+ <span>设置检查点,验证是否登录成功</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 用户名密码登陆---login_test01">
|
|
|
+ <span class="label">用例清除</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="suite_teardown teardown" id="suite_teardown teardown cases\1非登录\">
|
|
|
+ <div class="folder_header">
|
|
|
+ <span class="label">套件清除</span>
|
|
|
+ <span>cases\1非登录\</span>
|
|
|
+ <span class="executetime">2022-06-06 11:16:57</span>
|
|
|
+ </div>
|
|
|
+ <div class="folder_body"></div>
|
|
|
+ </div>
|
|
|
+ <div class="suite_teardown teardown" id="suite_teardown teardown cases\">
|
|
|
+ <div class="folder_header">
|
|
|
+ <span class="label">套件清除</span>
|
|
|
+ <span>cases\</span>
|
|
|
+ <span class="executetime">2022-06-06 11:17:04</span>
|
|
|
+ </div>
|
|
|
+ <div class="folder_body">
|
|
|
+ <div class="info">suite_teardown</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div id="float_menu">
|
|
|
+ <div class="menu-item" onclick="document.querySelector("body").scrollIntoView()">页首</div>
|
|
|
+ <div class="menu-item" onclick="window.open("http://www.byhy.net/tut/auto/hytest/01", "_blank"); ">教程</div>
|
|
|
+ <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">精简</div>
|
|
|
+ <div class="error_jumper" display="none">
|
|
|
+ <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
|
|
|
+ <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </body>
|
|
|
+</html>
|