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

发布于 更新于
本文目录
  1. 前言
  2. 一、HTML 测试报告生成
  3. 二、测试用例失败重运行
  4. 三、邮件发送测试报告
  5. 四、数据驱动的使用

技术文章

前言关于 unittestreport 最初在开发的时候,只是计划开发一个 unittest 生成 HTML 测试报告的模块,所以起名叫做 unittestreport。在开发的过程中结合使用的小伙伴的一些反馈,所以慢慢的扩展了更多的功能进...

前言

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

  • 关于 unittestreport 是什么?

    • HTML 测试报告生成

    • 测试用例失败重运行

    • 发送测试结果及报告到邮箱

    • unittest 数据驱动

    • unittestreport 柠檬班—木森老师是基于 unittest 开发的的一个功能扩展库,为 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 装饰器
    • count:用来指定用例失败重运行的次数

    • interval:指定每次重运行的时间间隔

    • 使用案例:使用 rerun 装饰失败需要重运行的用例,该用例失败后会自动重运行
      from unittestreport import rerunclass 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()


    • 参数说明:
  • 方式二:TestRunner.rerun 方法
    • count:用来指定用例失败重运行的次数

    • interval:指定每次重运行的时间间隔

    • 使用案例:所有的用例失败,只要有失败的用例,会自动重运行该用例
    • 用例正常编写即可

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

      runner = TestRunner(suite=suite)runner.rerun_run(count=3, interval=2)


    • 参数说明:

三、邮件发送测试报告

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:收件人邮箱地址(一个收件人传字符串,多个收件人传列表)
  • 收到的邮件样式

1598866521882.png

四、数据驱动的使用

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

  • 1、使用介绍

    from unittestreport.dataDriver import ddt, list_data,json_data,yaml_data

     

    • 第一步:使用 ddt 装饰测试用例类
    • 第二步:根据使用的数据选择对应的方法进行驱动
  • 2、使用案例

    • YAML 文件中的数据展示

      cases.yaml 文件

      - title: 用例1  data: 用例参数  expected: 预期结果- title: 用例2  data: 用例参数  expected: 预期结果- title: 用例4  data: 用例参数  expected: 预期结果


    • JSON 文件中的数据格式

      cases.json 文件

      [
        {
          "title": "用例1",
          "data": "用例参数",
          "expected": "预期结果"
        },
        {
          "title": "用例2",
          "data": "用例参数",
          "expected": "预期结果"
        },
        {
          "title": "用例3",
          "data": "用例参数",
          "expected": "预期结果"
        }]


    • 一、用例保存在可迭代对象中(如列表):使用 list_data
      from unittestreport import ddt, list_data@ddtclass 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@ddtclass TestClass(unittest.TestCase):
          @json_data("C:/xxxx/xxx/cases.json")
          def test_case(self, data):
              pass

         

    • 三、用例保存在 YAML 文件中:使用 yaml_data
      from unittestreport import ddt,yaml_data@ddtclass TestClass(unittest.TestCase):
          @yaml_data("C:/xxxx/xxx/cases.yaml")
          def test_case(self, data):
              pass

         

  • 2、注意点:

    • 关于使用 ddt 的时候进行数据驱动,指定测试报告中的用例描述:

    • 测试报告中的用例描述默认使用的是用例方法的文档字符串注释,

    • 如果要给每一条用例添加用例描述,需要在用例数据中添加 title 或者 desc 字段,字段对应的数据会自动设置为测试报告中用例的描述





继续阅读