zoukankan      html  css  js  c++  java
  • python的第三方库unittestreport 详细功能使用文档(V1.1.1)-转载

    unittestreport 详细功能使用文档(V1.1.1)

    前言

    关于 unittestreport 最初在开发的时候,只是计划开发一个 unittest 生成 HTML 测试报告的模块,所以起名叫做 unittestreport。在开发的过程中结合使用的小伙伴的一些反馈,所以慢慢的扩展了更多的功能进去。之前在写 unittestreport 的时候,也陆续写了几遍关于 unittestreport 相关功能的使用,每次都是一个特定的功能,这边给出一遍系统的使用文档来给大家介绍一下 unittestreport 的功能。

    • 关于 unittestreport 是什么?

      • unittestreport 柠檬班—木森老师是基于 unittest 开发的的一个功能扩展库,为 unittest 提供了一些常用的扩展功能(后续还会进行持续开发,扩展更多的功能):
        • HTML 测试报告生成
        • 测试用例失败重运行
        • 发送测试结果及报告到邮箱
        • unittest 数据驱动
    • 安装命令:

      cmd 命令行下输入下面的命令进行安装,当前最新版本是 1.1.1

    pip install  unittestreport

    一、HTML 测试报告生成

    unittestteport 中封装了一个 TestRunner 类,可以用来代替 unittest 中的 TextTestRunner 来执行测试用例,执行完测试用例之后会自动生成测试报告。并且有多种报告风格可选

    • 模块导入

    from unittestreport import TestRunner
    • 使用案例

    runner = TestRunner(test_suite)
    runner.run()
    • 关于 TestRunner 初始化参数

      • suites: 测试套件(必传)
      • filename: 指定报告文件名
      • report_dir:指定存放报告路径
      • title:指定测试报告的标题
      • templates: 可以指定 1,2,3 三个风格的模板
      • tester:测试人员名称
    • 报告样式展示:

    二、测试用例失败重运行

    关于unittest重运行机制,unittestreport中提供了两种方式
    • 方式一: rerun 装饰器
      • 使用案例:使用 rerun 装饰失败需要重运行的用例,该用例失败后会自动重运行
    from unittestreport import rerun
    
    class TestClass(unittest.TestCase):
        @rerun(count=4, interval=2)
        def test_case_01(self):
            a = 100
            b = 99
            assert a == b

        用例运行

        

    runner = TestRunner(test_suite)
    runner.run()
    • 参数说明:
      • count:用来指定用例失败重运行的次数
      • interval:指定每次重运行的时间间隔
    方式二:TestRunner.rerun 方法
    • 使用案例:所有的用例失败,只要有失败的用例,会自动重运行该用例
    • 用例正常编写即可

    • 运行是使用 TestRunner.rerun_run 方法运行

    runner = TestRunner(suite=suite)
    runner.rerun_run(count=3, interval=2)
    • 参数说明:
      • count:用来指定用例失败重运行的次数
      • interval:指定每次重运行的时间间隔

    三、邮件发送测试报告

    unittestreport 内部实现了发生测试结果到邮箱的方法,执行完测试用例之后调用发送测试报告的方法即可。发邮件的方法介绍:TestRunner 类中实现了 send_email 方法,可以方便用户,快速发送邮件。

    • 使用案例
    runner = TestRunner(suite)
    runner.run()
    runner.send_email(host="smtp.qq.com",
                      port=465,
                      user="musen_nmb@qq.com",
                      password="algmmzptupjccbab",
                      to_addrs="3247119728@qq.com")
    • 参数介绍
      • host: smtp 服务器地址
      • port:端口
      • user:邮箱账号
      • password:smtp 服务授权码
      • to_addrs:收件人邮箱地址(一个收件人传字符串,多个收件人传列表)
    • 收到的邮件样式

    四、数据驱动的使用

    关于数据驱动这边就不给大家做过多的介绍了,数据驱动的目的是将测试数据和用例逻辑进行分离,提高代码的重用率,以及用例的维护,关于数据驱动本,unittestreport.dataDriver 模块中实现了三个使用方法,支持使用列表(可迭代对象)、JSON 文件、YAML 文件来生成测试用例,接下来分别给大家介绍一下使用方法:

    • 1、使用介绍

    from unittestreport.dataDriver import ddt, list_data,json_data,yaml_data
      • 第一步:使用 ddt 装饰测试用例类
      • 第二步:根据使用的数据选择对应的方法进行驱动
    • 2、使用案例

      • 一、用例保存在可迭代对象中(如列表):使用 list_data
    from unittestreport import ddt, list_data
    @ddt
    class TestClass(unittest.TestCase):
        cases = [{'title': '用例1', 'data': '用例参数', 'expected': '预期结果'}, 
                 {'title': '用例2', 'data': '用例参数', 'expected': '预期结果'},
                 {'title': '用例3', 'data': '用例参数', 'expected': '预期结果'}]
        @list_data(cases)
        def test_case(self, data):
            pass
    二、用例保存在 JSON 文件中:使用 json_data
    from unittestreport import ddt,json_data
    
    @ddt
    class TestClass(unittest.TestCase):
        @json_data("C:/xxxx/xxx/cases.json")
        def test_case(self, data):
            pass

    JSON 文件中的数据格式

    cases.json 文件

    [
      {
        "title": "用例1",
        "data": "用例参数",
        "expected": "预期结果"
      },
      {
        "title": "用例2",
        "data": "用例参数",
        "expected": "预期结果"
      },
      {
        "title": "用例3",
        "data": "用例参数",
        "expected": "预期结果"
      }
    ]
      • 三、用例保存在 YAML 文件中:使用 yaml_data
    from unittestreport import ddt,yaml_data @ddt class TestClass(unittest.TestCase): @yaml_data("C:/xxxx/xxx/cases.yaml") def test_case(self, data): pass 
        YAML 文件中的数据展示

        cases.yaml 文件

    - title: 用例1
      data: 用例参数
      expected: 预期结果
    
    - title: 用例2
      data: 用例参数
      expected: 预期结果
    
    - title: 用例4
      data: 用例参数
      expected: 预期结果
     
    • 2、注意点:

      • 关于使用 ddt 的时候进行数据驱动,指定测试报告中的用例描述:
      • 测试报告中的用例描述默认使用的是用例方法的文档字符串注释,
      • 如果要给每一条用例添加用例描述,需要在用例数据中添加 title 或者 desc 字段,字段对应的数据会自动设置为测试报告中用例的描述

    五、发送测试结果到钉钉

     
    关于把如果测试结果发送到钉钉群,unittestreport里面进行了封装。执行完用例之后,调用TestRunner对象的dingtalk_notice方法即可。 
    • 参数介绍

      关于 dingtalk_notice 这个方法的参数如下,大家可以根据使用需求来进行选择。

      • url: 钉钉机器人的 Webhook 地址
      • key: (非必传:str 类型)如果钉钉机器人安全设置了关键字,则需要传入对应的关键字
      • secret:(非必传:str 类型)如果钉钉机器人安全设置了签名,则需要传入对应的密钥
      • atMobiles: (非必传,list 类型)发送通知钉钉中要@人的手机号列表,如:[137xxx,188xxx]
      • isatall: 是否@所有人,默认为 False,设为 True 则会@所有人
      • except_info:是否发送未通过用例的详细信息,默认为 False,设为 True 则会发送失败用例的详细信息
    • 案例代码:

     
    import unittest
    from unittestreport import TestRunner
    
    # 收集用例到套件
    suite = unittest.defaultTestLoader.discover(CASE_DIR)
    runner = TestRunner(suite)
    # 执行用例
    runner.run()
    
    url = "https://oapi.dingtalk.com/robot/send?access_token=6e2a63c2b9d870ee878335b5ce6d5d10bb1218b8e64a4e2b55f96a6d116aaf50"
    # 发送钉钉通知  
    runner.dingtalk_notice(url=url, key='钉钉安全设置的关键字',secret='钉钉安全设置签名的秘钥')
    
    # 备注:关于钉钉群机器人的创建大家可以去看钉钉开放平台上的教程,关键字和秘钥,根据创建钉钉机器人时设置的去添加,没有设置就不需要传这个参数。


    作者:nmb_musen
    链接:http://testingpai.com/article/1598939124642
    来源:测试派
    协议:CC BY-SA 4.0 https://creativecommons.org/licenses/by-sa/4.0/

    参照以上,生成报告三行代码:

    import unittest
    from unittestreport import TestRunner
    from common.handle_path import CASES_DIR, REPORT_DIR
    
    suite = unittest.defaultTestLoader.discover(CASES_DIR)
    
    runner = TestRunner(suite,
                        filename="wct_api_project测试报告.html",
                        report_dir=REPORT_DIR,
                        title='wct_api_project的测试报告',
                        tester='测试人员',
                        desc="wct_api_project项目结合数据库校验的测试报告",
                        templates=1)
    
    runner.run()

     还有一个生成测试报告页面比较好看的库BeautifulReport,都有待研究

  • 相关阅读:
    入职linux基本命令学习
    C++大师Stan Lippman:我对中国程序员的忠告
    Create Your Own Search Engine with Python
    获取相加等于某个值的集合
    关于mysql的连接数问题
    修改Windows2003Server的Telnet默认端口(23)为其它端口的方法
    解决WCF传输大数据量时出错并提示:远程主机强迫关闭了一个现有的连接
    IIS服务器静态网页被挂马和解决方法(ZT)
    CAD2016 Object Arx开发环境搭建与HelloWorld实现
    我的Java之路(5)
  • 原文地址:https://www.cnblogs.com/will-wu/p/14750489.html
Copyright © 2011-2022 走看看