zoukankan      html  css  js  c++  java
  • 关于HTMLTestRunner的中断与实时性问题

    HTMLTestRunner是python unittest的一种生成HTML报告的方法

    包含:

    1. Title及描述信息

    2. 按照unittest的case层级显示,并可折叠日志

    3. 时间及统计信息

    具体使用方法网上一抓一大把,不罗嗦了

    这些作为TestReport,其实只是保留了一些基本的信息,在很多时候无法满足需求。

    而自动化的开发者也不必要过分追求这种生成报告的方式。

    HTMLTestRunner的适用性:

    1. case独立,用例库相对稳定(当然也可以自行开发用例库灵活管理的方法)

    2. 执行时间较短,且不中断的测试

    3. 只关注用例的执行结果,保留文本日志,不保留大量数据

    有些时候对HTMLTestRunner二次开发的工作量已经大于自行开发日志、报告模块时,便不宜适用:

    1. 除脚本的执行结果外,还需记录其他数据,如性能测试,需要输出格式化统计报告,如Excel,或GUI测试需要截图,或测试设备需要多线程记录日志(debug信息等),等等

    2. 有可能经常中途中断的测试,如测试用例对环境要求高,测试系统、尤其是设备会出现crash等问题block测试,需要中断,按照网上一般教程的使用方法,测试正常结束前终端,报告是空白的

    3. 长时间的测试,HTMLTestRunner最大的一个问题在于实时性太差,unittest suite执行完之后,报告才会生成

    那么,针对这3中情况:

    1. 扩展HTMLTestRunner,或使其作为辅助报告

        HTMLTestRunner本身的HTML code很简单,可以自行编辑HTML元素进行修改,比如在Pass/Fail/Error之外增加一列Skip统计,

        或者增加更高级的功能,增加插入绘制表格、插入图片等

        在code中也可以看到注释如下:

        """
        Define a HTML template for report customerization and generation.
    
        Overall structure of an HTML report
    
        HTML
        +------------------------+
        |<html>                  |
        |  <head>                |
        |                        |
        |   STYLESHEET           |
        |   +----------------+   |
        |   |                |   |
        |   +----------------+   |
        |                        |
        |  </head>               |
        |                        |
        |  <body>                |
        |                        |
        |   HEADING              |
        |   +----------------+   |
        |   |                |   |
        |   +----------------+   |
        |                        |
        |   REPORT               |
        |   +----------------+   |
        |   |                |   |
        |   +----------------+   |
        |                        |
        |   ENDING               |
        |   +----------------+   |
        |   |                |   |
        |   +----------------+   |
        |                        |
        |  </body>               |
        |</html>                 |
        +------------------------+
        """

        另一种方案,将HTML作为Summary报告,将测试的具体数据生成更为合适的格式。

    2. 引入KeyBoardInterrupt异常,后用 unittest.TestSuite.__call__ 调用

    TestCase对象具有__call__属性,定义如下,直接调用对象(),将执行run()。

    def __call__(self, *args, **kwds):
        return self.run(*args, **kwds)

    这样可以run时可以获取用户输入的Ctrl C,异常退出后,最后一个case Error,包括之前已经执行过的用例,一起生成HTML报告

    3. HTMLTestRunner的实时性问题暂时没有想到好的解决方法

    它的实时性差,表现在:

        a. 每个用例结束之后,无法立刻刷新HTML,只能在测试suite结束、或中断后一次性写入

        b. 当然,在用例执行期间,自然也无法查看阶段性日志了

    HTMLTestRunner的日志生成时,在unittest的run之后。之前试图解决问题a,修改HTMLTestRunner和unittest code,在每个case结束之后刷新一次报告

    不过能力不足,以失败告终了.....

    最后分析需求,认为:

        a. 解决存储测试数据的问题优先级较高

        b. 测试时间很长

        c. 人工中断情况多

        d. 需要在测试执行期间观察日志,判断系统状态

    所以放弃了使用HTMLTestRunner,自行封装日志/报告模块.....

    如果有能够解决实时性问题的方法,请不吝赐教~谢谢!

  • 相关阅读:
    Python基本数据类型
    Python基础之杂货铺
    第五篇:白话tornado源码之褪去模板的外衣
    第四篇:白话tornado源码之褪去模板外衣的前戏
    第三篇:白话tornado源码之请求来了
    重构if-else方法
    linux-常用命令
    Element-UI的远程搜索输入框实现
    下载功能-vue
    上传功能-弹窗实现-vue
  • 原文地址:https://www.cnblogs.com/Liubit/p/6486880.html
Copyright © 2011-2022 走看看