浏览代码

招标搜索

lizhikun 2 年之前
父节点
当前提交
39716488a6

+ 1 - 1
.idea/example.iml

@@ -2,7 +2,7 @@
 <module type="PYTHON_MODULE" version="4">
   <component name="NewModuleRootManager">
     <content url="file://$MODULE_DIR$" />
-    <orderEntry type="jdk" jdkName="Python 3.8 (venv)" jdkType="Python SDK" />
+    <orderEntry type="jdk" jdkName="Python 3.11" jdkType="Python SDK" />
     <orderEntry type="sourceFolder" forTests="false" />
   </component>
 </module>

+ 1 - 1
.idea/misc.xml

@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
-  <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.8 (venv)" project-jdk-type="Python SDK" />
+  <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.11" project-jdk-type="Python SDK" />
 </project>

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="Git" />
+  </component>
+</project>

+ 23 - 0
cases/搜索功能/search.py

@@ -0,0 +1,23 @@
+
+from hytest import *
+from lib.webapi import apimgr
+class c2:
+    #测试用例名称
+    name='招标搜索接口'
+    # 初始化方法
+    def setup(self):
+        INFO('初始化方法')
+    #测试步骤
+    def teststeps(self):
+        INFO('测试步骤')
+        STEP(1,'第一步调用函数')    #会出现在测试报告中
+        apimgr.mgr_login()
+        r = apimgr.search()
+        res = r.text
+        keys_value = res.split('var keys = "', 1)[-1].split('"', 1)[0]
+        STEP(2,'第二步设置检查点')
+        #设置检查点
+        CHECK_POINT('检查搜索接口是否正常',keys_value == "建筑")
+    #清除方法
+    def teardown(self):
+        INFO('清除方法')

+ 55 - 0
doc/zbsousuo.py

@@ -0,0 +1,55 @@
+import requests
+
+headers1 = {
+    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.67"
+}
+
+url = "https://www.jianyu360.cn/phone/login"
+data={
+"reqType": "phoneLogin",
+"isAutoLogin": "false",
+"phone": "18211989987",
+"password": "123456"
+}
+res = requests.post(url=url,headers=headers1,data=data)
+print(res)
+assert res.status_code==200
+assert res.json()["status"] == 1
+assert res.json()["userInfo"]["result"] == "ok"
+assert res.json()["userInfo"]["s_nickname"] == "182****9987"
+cookies=res.cookies
+print(cookies)
+print(res.status_code)
+print(res.text)
+cookie_dict = cookies.get_dict()
+session_id = cookie_dict.get("SESSIONID")
+headers = {
+"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.67",
+    "Cookie": f"SESSIONID={session_id}"
+}
+print(headers)
+url = "https://www.jianyu360.cn/jylab/supsearch/index.html"
+data={
+"keywords": "建筑",
+"publishtime": "fiveyear",
+"selectType": "content"
+}
+
+response = requests.post(url=url, headers=headers,data=data)
+text=response.text
+print(text)
+response_text = response.text  # 假设 response 是请求的响应对象,将响应体保存在 response_text 变量中
+
+# 提取 keys 的值
+keys_value = response_text.split('var keys = "', 1)[-1].split('"', 1)[0]
+
+# 断言 keys 等于 "建筑"
+assert keys_value == "建筑"
+# url3="https://www.jianyu360.cn/succbi/api/dw/services/queryData"
+# data={"query":
+#           {"resid":"rk6LnRZndKIcnSYLtlpwVG","fields":[{"name":"XMLBDMHZ"}],"sources":"null","filter":[],"params":
+#               [{"name":"searchinput3","value":"科技"}],"sort":[],"options":
+#               {"limit":1,"offset":0,"needResultFilter":"true","queryTotalRowCount":"false"},"queryId":"model6"},
+#                 "resid":"rk6LnRZndKIcnSYLtlpwVG"}
+# rseb=requests.post(url=url,data=data,headers=headers)
+# print(rseb.text)

+ 15 - 1
lib/webapi.py

@@ -54,5 +54,19 @@ class APIMgr():
         self.printResponse(response)
         # 把response对象返回出去
         return response
+
+    def search(self, keywords="建筑", publishtime="fiveyear", selectType="content"):
+        headers = GSTORE['headers']
+        session = self.s
+        response = session.post(f"{cfg.target_host}/jylab/supsearch/index.html", headers=headers, data={
+            'keywords': keywords,
+            'publishtime': publishtime,
+            'selectType': selectType
+        })
+        self.printResponse(response)
+        return response
     #函数
-apimgr = APIMgr()
+apimgr = APIMgr()
+
+
+

+ 0 - 441
log/report_20230704_110622.html

@@ -1,441 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>测试报告</title>
-    <meta charset="UTF-8">
-    <style>body {    
-    font-family: consolas, Verdana, sans-serif;
-    font-size: .95em;
-    color: #696e71;
-    display: grid;
-    grid-template-columns: 1fr 5rem;
-}
-
-.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;
-}
-
-
-
-.result{  
-    display: flex;
-}
-  
-  
-.result_table{
-    border-collapse: collapse;
-    border: 1px solid #f0e0e5;
-    width: 30em;
-    text-align: center;
-    font-size: 1.0em;
-}
-      
-.result_table td{
-    border: 1px solid #f0e0e5;
-    padding: .3em;
-}
-  
-.result_barchart{  
-    width: 30em;
-    margin: 0 5em 0 5em;
-}
-  
-.barchar_item{
-    margin: 2.5rem 0;
-}
-  
-.barchart_barbox {
-    margin: 0.5em 0;
-    width: 100%;
-    background-color: #fff;
-    border: 1px solid #86c2dd;
-    border-radius: .2em;
-}
-  
-.barchart_bar {
-    text-align: right;
-    height: 1.2rem;
-}
-  
-  
-
-
-
-.h3_button {
-    margin: 1.5em;
-    cursor: pointer;
-    color: #03a9f4;
-}
-
-
-.info
-{
-    white-space:pre-wrap;
-    margin: .8em 1.5em;
-}
-
-
-.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? "Detail" : "Summary"
-
-    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">测试报告</h1>
-      <h3>统计结果</h3>
-      <div class="result">
-        <table class="result_table">
-          <tbody>
-            <tr>
-              <td>hytest 版本</td>
-              <td>0.8.11</td>
-            </tr>
-            <tr>
-              <td>开始时间</td>
-              <td>2023/07/04 11:06:22</td>
-            </tr>
-            <tr>
-              <td>结束时间</td>
-              <td>2023/07/04 11:06:22</td>
-            </tr>
-            <tr>
-              <td>耗时</td>
-              <td>0.010 秒</td>
-            </tr>
-            <tr>
-              <td>预备执行用例数量</td>
-              <td>1</td>
-            </tr>
-            <tr>
-              <td>实际执用例行数量</td>
-              <td>1</td>
-            </tr>
-            <tr>
-              <td>通过</td>
-              <td>0</td>
-            </tr>
-            <tr>
-              <td>失败</td>
-              <td style="">0</td>
-            </tr>
-            <tr>
-              <td>异常</td>
-              <td style="color:red">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>
-          </tbody>
-        </table>
-        <div class="result_barchart">
-          <div class="barchar_item">
-            <span>用例通过 0% : 0 个</span>
-            <div class="barchart_barbox">
-              <div class="barchart_bar" style="width: 0.0%; background-color: #04AA6D;"></div>
-            </div>
-          </div>
-          <div class="barchar_item">
-            <span>用例失败 0% : 0 个</span>
-            <div class="barchart_barbox">
-              <div class="barchart_bar" style="width: 0.0%; background-color: #bb4069;"></div>
-            </div>
-          </div>
-          <div class="barchar_item">
-            <span>用例异常 100% : 1 个</span>
-            <div class="barchart_barbox">
-              <div class="barchart_bar" style="width: 100.0%; background-color: #9c27b0;"></div>
-            </div>
-          </div>
-          <div class="barchar_item">
-            <span>用例阻塞 0% : 0 个</span>
-            <div class="barchart_barbox">
-              <div class="barchart_bar" style="width: 0.0%; background-color: #dcbdbd;"></div>
-            </div>
-          </div>
-        </div>
-      </div>
-      <div style="margin-top:2em">
-        <h3 style="display:inline">执行日志</h3>
-      </div>
-      <div class="exec_log">
-        <div class="suite_file" id="suite_file cases/登录功能/login.py">
-          <div>
-            <span class="label">进入文件</span>
-            <span>cases/登录功能/login.py</span>
-          </div>
-          <div class="case abort" id="case_00000001">
-            <div class="folder_header">
-              <span class="label caselabel">用例 ABORT</span>
-              <span class="casename">登录接口验证</span>
-              <span class="executetime">2023-07-04 11:06:22</span>
-            </div>
-            <div class="folder_body">
-              <span class="case_class_path">cases/登录功能/login.py::c1</span>
-              <div class="case_setup setup case_st_lable" id="case_setup setup 登录接口验证">
-                <span class="label">用例初始化</span>
-                <div class="info">初始化方法</div>
-              </div>
-              <div class="test_steps" id="test_steps 登录接口验证">
-                <span class="label">测试步骤</span>
-                <div class="info">测试步骤</div>
-                <div class="info error-info">STEP() missing 1 required positional argument: 'desc' 
-Traceback:
-  File &quot;cases/登录功能/login.py&quot;, line 12, in teststeps
-    STEP('1、第一步')#会出现在测试报告中
-TypeError: STEP() missing 1 required positional argument: 'desc'
-</div>
-              </div>
-              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 登录接口验证">
-                <span class="label">用例清除</span>
-                <div class="info">清除方法</div>
-              </div>
-            </div>
-          </div>
-        </div>
-      </div>
-    </div>
-    <div id="float_menu">
-      <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
-      <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">帮助</div>
-      <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">Summary</div>
-      <div class="error_jumper" display="block">
-        <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
-        <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
-      </div>
-    </div>
-  </body>
-</html>

+ 0 - 441
log/report_20230704_110746.html

@@ -1,441 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>测试报告</title>
-    <meta charset="UTF-8">
-    <style>body {    
-    font-family: consolas, Verdana, sans-serif;
-    font-size: .95em;
-    color: #696e71;
-    display: grid;
-    grid-template-columns: 1fr 5rem;
-}
-
-.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;
-}
-
-
-
-.result{  
-    display: flex;
-}
-  
-  
-.result_table{
-    border-collapse: collapse;
-    border: 1px solid #f0e0e5;
-    width: 30em;
-    text-align: center;
-    font-size: 1.0em;
-}
-      
-.result_table td{
-    border: 1px solid #f0e0e5;
-    padding: .3em;
-}
-  
-.result_barchart{  
-    width: 30em;
-    margin: 0 5em 0 5em;
-}
-  
-.barchar_item{
-    margin: 2.5rem 0;
-}
-  
-.barchart_barbox {
-    margin: 0.5em 0;
-    width: 100%;
-    background-color: #fff;
-    border: 1px solid #86c2dd;
-    border-radius: .2em;
-}
-  
-.barchart_bar {
-    text-align: right;
-    height: 1.2rem;
-}
-  
-  
-
-
-
-.h3_button {
-    margin: 1.5em;
-    cursor: pointer;
-    color: #03a9f4;
-}
-
-
-.info
-{
-    white-space:pre-wrap;
-    margin: .8em 1.5em;
-}
-
-
-.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? "Detail" : "Summary"
-
-    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">测试报告</h1>
-      <h3>统计结果</h3>
-      <div class="result">
-        <table class="result_table">
-          <tbody>
-            <tr>
-              <td>hytest 版本</td>
-              <td>0.8.11</td>
-            </tr>
-            <tr>
-              <td>开始时间</td>
-              <td>2023/07/04 11:07:46</td>
-            </tr>
-            <tr>
-              <td>结束时间</td>
-              <td>2023/07/04 11:07:46</td>
-            </tr>
-            <tr>
-              <td>耗时</td>
-              <td>0.010 秒</td>
-            </tr>
-            <tr>
-              <td>预备执行用例数量</td>
-              <td>1</td>
-            </tr>
-            <tr>
-              <td>实际执用例行数量</td>
-              <td>1</td>
-            </tr>
-            <tr>
-              <td>通过</td>
-              <td>0</td>
-            </tr>
-            <tr>
-              <td>失败</td>
-              <td style="">0</td>
-            </tr>
-            <tr>
-              <td>异常</td>
-              <td style="color:red">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>
-          </tbody>
-        </table>
-        <div class="result_barchart">
-          <div class="barchar_item">
-            <span>用例通过 0% : 0 个</span>
-            <div class="barchart_barbox">
-              <div class="barchart_bar" style="width: 0.0%; background-color: #04AA6D;"></div>
-            </div>
-          </div>
-          <div class="barchar_item">
-            <span>用例失败 0% : 0 个</span>
-            <div class="barchart_barbox">
-              <div class="barchart_bar" style="width: 0.0%; background-color: #bb4069;"></div>
-            </div>
-          </div>
-          <div class="barchar_item">
-            <span>用例异常 100% : 1 个</span>
-            <div class="barchart_barbox">
-              <div class="barchart_bar" style="width: 100.0%; background-color: #9c27b0;"></div>
-            </div>
-          </div>
-          <div class="barchar_item">
-            <span>用例阻塞 0% : 0 个</span>
-            <div class="barchart_barbox">
-              <div class="barchart_bar" style="width: 0.0%; background-color: #dcbdbd;"></div>
-            </div>
-          </div>
-        </div>
-      </div>
-      <div style="margin-top:2em">
-        <h3 style="display:inline">执行日志</h3>
-      </div>
-      <div class="exec_log">
-        <div class="suite_file" id="suite_file cases/登录功能/login.py">
-          <div>
-            <span class="label">进入文件</span>
-            <span>cases/登录功能/login.py</span>
-          </div>
-          <div class="case abort" id="case_00000001">
-            <div class="folder_header">
-              <span class="label caselabel">用例 ABORT</span>
-              <span class="casename">登录接口验证</span>
-              <span class="executetime">2023-07-04 11:07:46</span>
-            </div>
-            <div class="folder_body">
-              <span class="case_class_path">cases/登录功能/login.py::c1</span>
-              <div class="case_setup setup case_st_lable" id="case_setup setup 登录接口验证">
-                <span class="label">用例初始化</span>
-                <div class="info">初始化方法</div>
-              </div>
-              <div class="test_steps" id="test_steps 登录接口验证">
-                <span class="label">测试步骤</span>
-                <div class="info">测试步骤</div>
-                <div class="info error-info">STEP() missing 1 required positional argument: 'desc' 
-Traceback:
-  File &quot;cases/登录功能/login.py&quot;, line 12, in teststeps
-    STEP('1、第一步')#会出现在测试报告中
-TypeError: STEP() missing 1 required positional argument: 'desc'
-</div>
-              </div>
-              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 登录接口验证">
-                <span class="label">用例清除</span>
-                <div class="info">清除方法</div>
-              </div>
-            </div>
-          </div>
-        </div>
-      </div>
-    </div>
-    <div id="float_menu">
-      <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
-      <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">帮助</div>
-      <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">Summary</div>
-      <div class="error_jumper" display="block">
-        <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
-        <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
-      </div>
-    </div>
-  </body>
-</html>

+ 0 - 441
log/report_20230704_110820.html

@@ -1,441 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>测试报告</title>
-    <meta charset="UTF-8">
-    <style>body {    
-    font-family: consolas, Verdana, sans-serif;
-    font-size: .95em;
-    color: #696e71;
-    display: grid;
-    grid-template-columns: 1fr 5rem;
-}
-
-.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;
-}
-
-
-
-.result{  
-    display: flex;
-}
-  
-  
-.result_table{
-    border-collapse: collapse;
-    border: 1px solid #f0e0e5;
-    width: 30em;
-    text-align: center;
-    font-size: 1.0em;
-}
-      
-.result_table td{
-    border: 1px solid #f0e0e5;
-    padding: .3em;
-}
-  
-.result_barchart{  
-    width: 30em;
-    margin: 0 5em 0 5em;
-}
-  
-.barchar_item{
-    margin: 2.5rem 0;
-}
-  
-.barchart_barbox {
-    margin: 0.5em 0;
-    width: 100%;
-    background-color: #fff;
-    border: 1px solid #86c2dd;
-    border-radius: .2em;
-}
-  
-.barchart_bar {
-    text-align: right;
-    height: 1.2rem;
-}
-  
-  
-
-
-
-.h3_button {
-    margin: 1.5em;
-    cursor: pointer;
-    color: #03a9f4;
-}
-
-
-.info
-{
-    white-space:pre-wrap;
-    margin: .8em 1.5em;
-}
-
-
-.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? "Detail" : "Summary"
-
-    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">测试报告</h1>
-      <h3>统计结果</h3>
-      <div class="result">
-        <table class="result_table">
-          <tbody>
-            <tr>
-              <td>hytest 版本</td>
-              <td>0.8.11</td>
-            </tr>
-            <tr>
-              <td>开始时间</td>
-              <td>2023/07/04 11:08:20</td>
-            </tr>
-            <tr>
-              <td>结束时间</td>
-              <td>2023/07/04 11:08:20</td>
-            </tr>
-            <tr>
-              <td>耗时</td>
-              <td>0.010 秒</td>
-            </tr>
-            <tr>
-              <td>预备执行用例数量</td>
-              <td>1</td>
-            </tr>
-            <tr>
-              <td>实际执用例行数量</td>
-              <td>1</td>
-            </tr>
-            <tr>
-              <td>通过</td>
-              <td>0</td>
-            </tr>
-            <tr>
-              <td>失败</td>
-              <td style="">0</td>
-            </tr>
-            <tr>
-              <td>异常</td>
-              <td style="color:red">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>
-          </tbody>
-        </table>
-        <div class="result_barchart">
-          <div class="barchar_item">
-            <span>用例通过 0% : 0 个</span>
-            <div class="barchart_barbox">
-              <div class="barchart_bar" style="width: 0.0%; background-color: #04AA6D;"></div>
-            </div>
-          </div>
-          <div class="barchar_item">
-            <span>用例失败 0% : 0 个</span>
-            <div class="barchart_barbox">
-              <div class="barchart_bar" style="width: 0.0%; background-color: #bb4069;"></div>
-            </div>
-          </div>
-          <div class="barchar_item">
-            <span>用例异常 100% : 1 个</span>
-            <div class="barchart_barbox">
-              <div class="barchart_bar" style="width: 100.0%; background-color: #9c27b0;"></div>
-            </div>
-          </div>
-          <div class="barchar_item">
-            <span>用例阻塞 0% : 0 个</span>
-            <div class="barchart_barbox">
-              <div class="barchart_bar" style="width: 0.0%; background-color: #dcbdbd;"></div>
-            </div>
-          </div>
-        </div>
-      </div>
-      <div style="margin-top:2em">
-        <h3 style="display:inline">执行日志</h3>
-      </div>
-      <div class="exec_log">
-        <div class="suite_file" id="suite_file cases/登录功能/login.py">
-          <div>
-            <span class="label">进入文件</span>
-            <span>cases/登录功能/login.py</span>
-          </div>
-          <div class="case abort" id="case_00000001">
-            <div class="folder_header">
-              <span class="label caselabel">用例 ABORT</span>
-              <span class="casename">登录接口验证</span>
-              <span class="executetime">2023-07-04 11:08:20</span>
-            </div>
-            <div class="folder_body">
-              <span class="case_class_path">cases/登录功能/login.py::c1</span>
-              <div class="case_setup setup case_st_lable" id="case_setup setup 登录接口验证">
-                <span class="label">用例初始化</span>
-                <div class="info">初始化方法</div>
-              </div>
-              <div class="test_steps" id="test_steps 登录接口验证">
-                <span class="label">测试步骤</span>
-                <div class="info">测试步骤</div>
-                <div class="info error-info">STEP() missing 1 required positional argument: 'desc' 
-Traceback:
-  File &quot;cases/登录功能/login.py&quot;, line 12, in teststeps
-    STEP('1、第一步')#会出现在测试报告中
-TypeError: STEP() missing 1 required positional argument: 'desc'
-</div>
-              </div>
-              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 登录接口验证">
-                <span class="label">用例清除</span>
-                <div class="info">清除方法</div>
-              </div>
-            </div>
-          </div>
-        </div>
-      </div>
-    </div>
-    <div id="float_menu">
-      <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
-      <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">帮助</div>
-      <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">Summary</div>
-      <div class="error_jumper" display="block">
-        <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
-        <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
-      </div>
-    </div>
-  </body>
-</html>

+ 0 - 441
log/report_20230704_110913.html

@@ -1,441 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>测试报告</title>
-    <meta charset="UTF-8">
-    <style>body {    
-    font-family: consolas, Verdana, sans-serif;
-    font-size: .95em;
-    color: #696e71;
-    display: grid;
-    grid-template-columns: 1fr 5rem;
-}
-
-.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;
-}
-
-
-
-.result{  
-    display: flex;
-}
-  
-  
-.result_table{
-    border-collapse: collapse;
-    border: 1px solid #f0e0e5;
-    width: 30em;
-    text-align: center;
-    font-size: 1.0em;
-}
-      
-.result_table td{
-    border: 1px solid #f0e0e5;
-    padding: .3em;
-}
-  
-.result_barchart{  
-    width: 30em;
-    margin: 0 5em 0 5em;
-}
-  
-.barchar_item{
-    margin: 2.5rem 0;
-}
-  
-.barchart_barbox {
-    margin: 0.5em 0;
-    width: 100%;
-    background-color: #fff;
-    border: 1px solid #86c2dd;
-    border-radius: .2em;
-}
-  
-.barchart_bar {
-    text-align: right;
-    height: 1.2rem;
-}
-  
-  
-
-
-
-.h3_button {
-    margin: 1.5em;
-    cursor: pointer;
-    color: #03a9f4;
-}
-
-
-.info
-{
-    white-space:pre-wrap;
-    margin: .8em 1.5em;
-}
-
-
-.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? "Detail" : "Summary"
-
-    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">测试报告</h1>
-      <h3>统计结果</h3>
-      <div class="result">
-        <table class="result_table">
-          <tbody>
-            <tr>
-              <td>hytest 版本</td>
-              <td>0.8.11</td>
-            </tr>
-            <tr>
-              <td>开始时间</td>
-              <td>2023/07/04 11:09:13</td>
-            </tr>
-            <tr>
-              <td>结束时间</td>
-              <td>2023/07/04 11:09:14</td>
-            </tr>
-            <tr>
-              <td>耗时</td>
-              <td>0.009 秒</td>
-            </tr>
-            <tr>
-              <td>预备执行用例数量</td>
-              <td>1</td>
-            </tr>
-            <tr>
-              <td>实际执用例行数量</td>
-              <td>1</td>
-            </tr>
-            <tr>
-              <td>通过</td>
-              <td>0</td>
-            </tr>
-            <tr>
-              <td>失败</td>
-              <td style="">0</td>
-            </tr>
-            <tr>
-              <td>异常</td>
-              <td style="color:red">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>
-          </tbody>
-        </table>
-        <div class="result_barchart">
-          <div class="barchar_item">
-            <span>用例通过 0% : 0 个</span>
-            <div class="barchart_barbox">
-              <div class="barchart_bar" style="width: 0.0%; background-color: #04AA6D;"></div>
-            </div>
-          </div>
-          <div class="barchar_item">
-            <span>用例失败 0% : 0 个</span>
-            <div class="barchart_barbox">
-              <div class="barchart_bar" style="width: 0.0%; background-color: #bb4069;"></div>
-            </div>
-          </div>
-          <div class="barchar_item">
-            <span>用例异常 100% : 1 个</span>
-            <div class="barchart_barbox">
-              <div class="barchart_bar" style="width: 100.0%; background-color: #9c27b0;"></div>
-            </div>
-          </div>
-          <div class="barchar_item">
-            <span>用例阻塞 0% : 0 个</span>
-            <div class="barchart_barbox">
-              <div class="barchart_bar" style="width: 0.0%; background-color: #dcbdbd;"></div>
-            </div>
-          </div>
-        </div>
-      </div>
-      <div style="margin-top:2em">
-        <h3 style="display:inline">执行日志</h3>
-      </div>
-      <div class="exec_log">
-        <div class="suite_file" id="suite_file cases/登录功能/login.py">
-          <div>
-            <span class="label">进入文件</span>
-            <span>cases/登录功能/login.py</span>
-          </div>
-          <div class="case abort" id="case_00000001">
-            <div class="folder_header">
-              <span class="label caselabel">用例 ABORT</span>
-              <span class="casename">登录接口验证</span>
-              <span class="executetime">2023-07-04 11:09:13</span>
-            </div>
-            <div class="folder_body">
-              <span class="case_class_path">cases/登录功能/login.py::c1</span>
-              <div class="case_setup setup case_st_lable" id="case_setup setup 登录接口验证">
-                <span class="label">用例初始化</span>
-                <div class="info">初始化方法</div>
-              </div>
-              <div class="test_steps" id="test_steps 登录接口验证">
-                <span class="label">测试步骤</span>
-                <div class="info">测试步骤</div>
-                <div class="info error-info">STEP() missing 1 required positional argument: 'desc' 
-Traceback:
-  File &quot;cases/登录功能/login.py&quot;, line 12, in teststeps
-    STEP('1、第一步')#会出现在测试报告中
-TypeError: STEP() missing 1 required positional argument: 'desc'
-</div>
-              </div>
-              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 登录接口验证">
-                <span class="label">用例清除</span>
-                <div class="info">清除方法</div>
-              </div>
-            </div>
-          </div>
-        </div>
-      </div>
-    </div>
-    <div id="float_menu">
-      <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
-      <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">帮助</div>
-      <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">Summary</div>
-      <div class="error_jumper" display="block">
-        <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
-        <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
-      </div>
-    </div>
-  </body>
-</html>

+ 0 - 441
log/report_20230704_112255.html

@@ -1,441 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>测试报告</title>
-    <meta charset="UTF-8">
-    <style>body {    
-    font-family: consolas, Verdana, sans-serif;
-    font-size: .95em;
-    color: #696e71;
-    display: grid;
-    grid-template-columns: 1fr 5rem;
-}
-
-.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;
-}
-
-
-
-.result{  
-    display: flex;
-}
-  
-  
-.result_table{
-    border-collapse: collapse;
-    border: 1px solid #f0e0e5;
-    width: 30em;
-    text-align: center;
-    font-size: 1.0em;
-}
-      
-.result_table td{
-    border: 1px solid #f0e0e5;
-    padding: .3em;
-}
-  
-.result_barchart{  
-    width: 30em;
-    margin: 0 5em 0 5em;
-}
-  
-.barchar_item{
-    margin: 2.5rem 0;
-}
-  
-.barchart_barbox {
-    margin: 0.5em 0;
-    width: 100%;
-    background-color: #fff;
-    border: 1px solid #86c2dd;
-    border-radius: .2em;
-}
-  
-.barchart_bar {
-    text-align: right;
-    height: 1.2rem;
-}
-  
-  
-
-
-
-.h3_button {
-    margin: 1.5em;
-    cursor: pointer;
-    color: #03a9f4;
-}
-
-
-.info
-{
-    white-space:pre-wrap;
-    margin: .8em 1.5em;
-}
-
-
-.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? "Detail" : "Summary"
-
-    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">测试报告</h1>
-      <h3>统计结果</h3>
-      <div class="result">
-        <table class="result_table">
-          <tbody>
-            <tr>
-              <td>hytest 版本</td>
-              <td>0.8.11</td>
-            </tr>
-            <tr>
-              <td>开始时间</td>
-              <td>2023/07/04 11:22:55</td>
-            </tr>
-            <tr>
-              <td>结束时间</td>
-              <td>2023/07/04 11:22:55</td>
-            </tr>
-            <tr>
-              <td>耗时</td>
-              <td>0.002 秒</td>
-            </tr>
-            <tr>
-              <td>预备执行用例数量</td>
-              <td>1</td>
-            </tr>
-            <tr>
-              <td>实际执用例行数量</td>
-              <td>1</td>
-            </tr>
-            <tr>
-              <td>通过</td>
-              <td>0</td>
-            </tr>
-            <tr>
-              <td>失败</td>
-              <td style="">0</td>
-            </tr>
-            <tr>
-              <td>异常</td>
-              <td style="color:red">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>
-          </tbody>
-        </table>
-        <div class="result_barchart">
-          <div class="barchar_item">
-            <span>用例通过 0% : 0 个</span>
-            <div class="barchart_barbox">
-              <div class="barchart_bar" style="width: 0.0%; background-color: #04AA6D;"></div>
-            </div>
-          </div>
-          <div class="barchar_item">
-            <span>用例失败 0% : 0 个</span>
-            <div class="barchart_barbox">
-              <div class="barchart_bar" style="width: 0.0%; background-color: #bb4069;"></div>
-            </div>
-          </div>
-          <div class="barchar_item">
-            <span>用例异常 100% : 1 个</span>
-            <div class="barchart_barbox">
-              <div class="barchart_bar" style="width: 100.0%; background-color: #9c27b0;"></div>
-            </div>
-          </div>
-          <div class="barchar_item">
-            <span>用例阻塞 0% : 0 个</span>
-            <div class="barchart_barbox">
-              <div class="barchart_bar" style="width: 0.0%; background-color: #dcbdbd;"></div>
-            </div>
-          </div>
-        </div>
-      </div>
-      <div style="margin-top:2em">
-        <h3 style="display:inline">执行日志</h3>
-      </div>
-      <div class="exec_log">
-        <div class="suite_file" id="suite_file cases/登录功能/login.py">
-          <div>
-            <span class="label">进入文件</span>
-            <span>cases/登录功能/login.py</span>
-          </div>
-          <div class="case abort" id="case_00000001">
-            <div class="folder_header">
-              <span class="label caselabel">用例 ABORT</span>
-              <span class="casename">登录接口验证</span>
-              <span class="executetime">2023-07-04 11:22:55</span>
-            </div>
-            <div class="folder_body">
-              <span class="case_class_path">cases/登录功能/login.py::c1</span>
-              <div class="case_setup setup case_st_lable" id="case_setup setup 登录接口验证">
-                <span class="label">用例初始化</span>
-                <div class="info">初始化方法</div>
-              </div>
-              <div class="test_steps" id="test_steps 登录接口验证">
-                <span class="label">测试步骤</span>
-                <div class="info">测试步骤</div>
-                <div class="info error-info">STEP() missing 1 required positional argument: 'desc' 
-Traceback:
-  File &quot;cases/登录功能/login.py&quot;, line 12, in teststeps
-    STEP('1、第一步')#会出现在测试报告中
-TypeError: STEP() missing 1 required positional argument: 'desc'
-</div>
-              </div>
-              <div class="case_teardown teardown case_st_lable" id="case_teardown teardown 登录接口验证">
-                <span class="label">用例清除</span>
-                <div class="info">清除方法</div>
-              </div>
-            </div>
-          </div>
-        </div>
-      </div>
-    </div>
-    <div id="float_menu">
-      <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
-      <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">帮助</div>
-      <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">Summary</div>
-      <div class="error_jumper" display="block">
-        <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
-        <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
-      </div>
-    </div>
-  </body>
-</html>

+ 0 - 447
log/report_20230704_132714.html

@@ -1,447 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>测试报告</title>
-    <meta charset="UTF-8">
-    <style>body {    
-    font-family: consolas, Verdana, sans-serif;
-    font-size: .95em;
-    color: #696e71;
-    display: grid;
-    grid-template-columns: 1fr 5rem;
-}
-
-.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;
-}
-
-
-
-.result{  
-    display: flex;
-}
-  
-  
-.result_table{
-    border-collapse: collapse;
-    border: 1px solid #f0e0e5;
-    width: 30em;
-    text-align: center;
-    font-size: 1.0em;
-}
-      
-.result_table td{
-    border: 1px solid #f0e0e5;
-    padding: .3em;
-}
-  
-.result_barchart{  
-    width: 30em;
-    margin: 0 5em 0 5em;
-}
-  
-.barchar_item{
-    margin: 2.5rem 0;
-}
-  
-.barchart_barbox {
-    margin: 0.5em 0;
-    width: 100%;
-    background-color: #fff;
-    border: 1px solid #86c2dd;
-    border-radius: .2em;
-}
-  
-.barchart_bar {
-    text-align: right;
-    height: 1.2rem;
-}
-  
-  
-
-
-
-.h3_button {
-    margin: 1.5em;
-    cursor: pointer;
-    color: #03a9f4;
-}
-
-
-.info
-{
-    white-space:pre-wrap;
-    margin: .8em 1.5em;
-}
-
-
-.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? "Detail" : "Summary"
-
-    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">测试报告</h1>
-      <h3>统计结果</h3>
-      <div class="result">
-        <table class="result_table">
-          <tbody>
-            <tr>
-              <td>hytest 版本</td>
-              <td>0.8.11</td>
-            </tr>
-            <tr>
-              <td>开始时间</td>
-              <td>2023/07/04 13:27:14</td>
-            </tr>
-            <tr>
-              <td>结束时间</td>
-              <td>2023/07/04 13:27:14</td>
-            </tr>
-            <tr>
-              <td>耗时</td>
-              <td>0.180 秒</td>
-            </tr>
-            <tr>
-              <td>预备执行用例数量</td>
-              <td>1</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>
-            <tr>
-              <td>用例清除  失败</td>
-              <td style="">0</td>
-            </tr>
-          </tbody>
-        </table>
-        <div class="result_barchart">
-          <div class="barchar_item">
-            <span>用例通过 100% : 1 个</span>
-            <div class="barchart_barbox">
-              <div class="barchart_bar" style="width: 100.0%; background-color: #04AA6D;"></div>
-            </div>
-          </div>
-          <div class="barchar_item">
-            <span>用例失败 0% : 0 个</span>
-            <div class="barchart_barbox">
-              <div class="barchart_bar" style="width: 0.0%; background-color: #bb4069;"></div>
-            </div>
-          </div>
-          <div class="barchar_item">
-            <span>用例异常 0% : 0 个</span>
-            <div class="barchart_barbox">
-              <div class="barchart_bar" style="width: 0.0%; background-color: #9c27b0;"></div>
-            </div>
-          </div>
-          <div class="barchar_item">
-            <span>用例阻塞 0% : 0 个</span>
-            <div class="barchart_barbox">
-              <div class="barchart_bar" style="width: 0.0%; background-color: #dcbdbd;"></div>
-            </div>
-          </div>
-        </div>
-      </div>
-      <div style="margin-top:2em">
-        <h3 style="display:inline">执行日志</h3>
-      </div>
-      <div class="exec_log">
-        <div class="suite_file" id="suite_file cases/登录功能/login.py">
-          <div>
-            <span class="label">进入文件</span>
-            <span>cases/登录功能/login.py</span>
-          </div>
-          <div class="case pass" id="case_00000001">
-            <div class="folder_header">
-              <span class="label caselabel">用例 PASS</span>
-              <span class="casename">登录接口验证</span>
-              <span class="executetime">2023-07-04 13:27:14</span>
-            </div>
-            <div class="folder_body">
-              <span class="case_class_path">cases/登录功能/login.py::c1</span>
-              <div class="case_setup setup case_st_lable" id="case_setup setup 登录接口验证">
-                <span class="label">用例初始化</span>
-                <div class="info">初始化方法</div>
-              </div>
-              <div class="test_steps" id="test_steps 登录接口验证">
-                <span class="label">测试步骤</span>
-                <div class="info">测试步骤</div>
-                <div class="case_step">
-                  <span class="tag">步骤 #1</span>
-                  <span>第一步调用函数</span>
-                </div>
-                <div class="case_step">
-                  <span class="tag">步骤 #2</span>
-                  <span>第二步设置检查点</span>
-                </div>
-                <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 登录接口验证">
-                <span class="label">用例清除</span>
-                <div class="info">清除方法</div>
-              </div>
-            </div>
-          </div>
-        </div>
-      </div>
-    </div>
-    <div id="float_menu">
-      <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
-      <div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">帮助</div>
-      <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">Summary</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>
-  </body>
-</html>

+ 37 - 10
log/testresult.log

@@ -3,23 +3,50 @@
 ===   [ 收集测试用例 ]  === 
 
 
-== cases/登录功能/login.py 
+== cases\搜索功能\search.py 
+
+
+== cases\登录功能\login.py 
 
 
 
 ===   [ 执行测试用例 ]  === 
 
-预备执行用例数量 : 1
+预备执行用例数量 : 2
+
+
+
+  ========= 测试开始 : 20230704_155302 =========
+
 
 
+>>> cases\搜索功能\search.py
 
-  ========= 测试开始 : 20230704_132714 =========
+* 招标搜索接口  -  2023-07-04 15:53:02
+
+[ case setup ] 招标搜索接口
+初始化方法
+
+  [ case execution steps ]
+测试步骤
 
+-- 第 1 步 -- 第一步调用函数 
+
+
+-- 第 2 步 -- 第二步设置检查点 
+
+
+** 检查点 **  检查搜索接口是否正常 ---->  通过
+
+  PASS 
+
+[ case teardown ] 招标搜索接口
+清除方法
 
 
->>> cases/登录功能/login.py
+>>> cases\登录功能\login.py
 
-* 登录接口验证  -  2023-07-04 13:27:14
+* 登录接口验证  -  2023-07-04 15:53:03
 
 [ case setup ] 登录接口验证
 初始化方法
@@ -41,17 +68,17 @@
 清除方法
 
 
-  ========= 测试结束 : 20230704_132714 =========
+  ========= 测试结束 : 20230704_155304 =========
 
 
-  耗时    : 0.180
+  耗时    : 1.286
 
 
-  预备执行用例数量 : 1
+  预备执行用例数量 : 2
 
-  实际执行用例数量 : 1
+  实际执行用例数量 : 2
 
-  通过 : 1
+  通过 : 2
 
   失败 : 0
 

+ 75 - 6
log/testresult.log.1

@@ -3,23 +3,57 @@
 ===   [ 收集测试用例 ]  === 
 
 
-== cases/登录功能/login.py 
+== cases\搜索功能\search.py 
+
+
+== cases\登录功能\login.py 
 
 
 
 ===   [ 执行测试用例 ]  === 
 
-预备执行用例数量 : 1
+预备执行用例数量 : 2
+
+
+
+  ========= 测试开始 : 20230704_155232 =========
 
 
 
-  ========= 测试开始 : 20230704_113445 =========
+>>> cases\搜索功能\search.py
 
+* 招标搜索接口  -  2023-07-04 15:52:32
+
+[ case setup ] 招标搜索接口
+初始化方法
+
+  [ case execution steps ]
+测试步骤
 
+-- 第 1 步 -- 第一步调用函数 
 
->>> cases/登录功能/login.py
 
-* 登录接口验证  -  2023-07-04 11:34:45
+-- 第 2 步 -- 第二步设置检查点 
+
+
+** 检查点 **  检查搜索接口是否正常 ---->  !! 不通过!!
+
+  FAIL    
+Traceback:
+  File "D:\PycharmProjects\jianyu_auto_api\cases\搜索功能\search.py", line 20, in teststeps
+    CHECK_POINT('检查搜索接口是否正常',keys_value == "aaa")
+  File "C:\Program Files\Python311\Lib\site-packages\hytest\common.py", line 76, in CHECK_POINT
+    raise AssertionError()
+AssertionError
+
+
+[ case teardown ] 招标搜索接口
+清除方法
+
+
+>>> cases\登录功能\login.py
+
+* 登录接口验证  -  2023-07-04 15:52:33
 
 [ case setup ] 登录接口验证
 初始化方法
@@ -27,5 +61,40 @@
   [ case execution steps ]
 测试步骤
 
--- 第 1 步 -- 第一步 
+-- 第 1 步 -- 第一步调用函数 
+
+
+-- 第 2 步 -- 第二步设置检查点 
+
+
+** 检查点 **  检查登录接口是否正常 ---->  通过
+
+  PASS 
+
+[ case teardown ] 登录接口验证
+清除方法
+
+
+  ========= 测试结束 : 20230704_155234 =========
+
+
+  耗时    : 1.426 秒
+
+
+  预备执行用例数量 : 2
+
+  实际执行用例数量 : 2
+
+  通过 : 1
+
+  失败 : 1
+
+  异常 : 0
+
+  套件初始化失败 : 0
+
+  套件清除  失败 : 0
+
+  用例初始化失败 : 0
 
+  用例清除  失败 : 0

+ 68 - 6
log/testresult.log.2

@@ -3,23 +3,50 @@
 ===   [ 收集测试用例 ]  === 
 
 
-== cases/登录功能/login.py 
+== cases\搜索功能\search.py 
+
+
+== cases\登录功能\login.py 
 
 
 
 ===   [ 执行测试用例 ]  === 
 
-预备执行用例数量 : 1
+预备执行用例数量 : 2
+
+
+
+  ========= 测试开始 : 20230704_154735 =========
+
+
+
+>>> cases\搜索功能\search.py
+
+* 招标搜索接口  -  2023-07-04 15:47:35
 
+[ case setup ] 招标搜索接口
+初始化方法
+
+  [ case execution steps ]
+测试步骤
+
+-- 第 1 步 -- 第一步调用函数 
 
 
-  ========= 测试开始 : 20230704_113101 =========
+-- 第 2 步 -- 第二步设置检查点 
 
 
+** 检查点 **  检查搜索接口是否正常 ---->  通过
 
->>> cases/登录功能/login.py
+  PASS 
 
-* 登录接口验证  -  2023-07-04 11:31:01
+[ case teardown ] 招标搜索接口
+清除方法
+
+
+>>> cases\登录功能\login.py
+
+* 登录接口验证  -  2023-07-04 15:47:37
 
 [ case setup ] 登录接口验证
 初始化方法
@@ -27,5 +54,40 @@
   [ case execution steps ]
 测试步骤
 
--- 第 1 步 -- 第一步 
+-- 第 1 步 -- 第一步调用函数 
+
+
+-- 第 2 步 -- 第二步设置检查点 
+
+
+** 检查点 **  检查登录接口是否正常 ---->  通过
+
+  PASS 
+
+[ case teardown ] 登录接口验证
+清除方法
+
+
+  ========= 测试结束 : 20230704_154737 =========
+
+
+  耗时    : 1.461 秒
+
+
+  预备执行用例数量 : 2
+
+  实际执行用例数量 : 2
+
+  通过 : 2
+
+  失败 : 0
+
+  异常 : 0
+
+  套件初始化失败 : 0
+
+  套件清除  失败 : 0
+
+  用例初始化失败 : 0
 
+  用例清除  失败 : 0