ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【unittest单元测试框架】(4)HTML 测试报告

2021-11-16 19:31:34  阅读:182  来源: 互联网

标签:__ 测试报告 HTMLTestRunner unittest py 单元测试 HTML time test


HTML 测试报告

  HTMLTestRunner 是 unittest 的一个扩展,它可以生成易于使用的 HTML 测试报告。HTMLTestRunner 是在 BSD 许可证下发布的。   下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html。   GitHub 地址:https://github.com/defnngj/HTMLTestRunner。

1、下载与安装

  HTMLTestRunner 的使用非常简单,它是一个独立的 HTMLTestRunner.py 文件,既可以把它当作 Python 的第三方库来使用,也可以将把它当作项目的一部分来使用。   首先打开上面的 GitHub 地址,克隆或下载整个项目。然后把 HTMLTestRunner.py 单独放到 Python 的安装目录下面,如 C:\Python37\Lib\。   打开 Python Shell,验证安装是否成功。
Microsoft Windows [版本 10.0.19041.1348]
(c) Microsoft Corporation。保留所有权利。

C:\Users\yzp>python
Python 3.7.4 (tags/v3.7.4:e09359112e, Jul  8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import  HTMLTestRunner
>>>

  如果没有报错,则说明安装成功。

  如果把 HTMLTestRunner 当作项目的一部分来使用,就把它放到项目目录中。笔者推荐这种方式,因为可以方便地定制生成的 HTMLTestRunner 报告。 unittest_expand/ ├─test_case/ │ └─test_baidu.py ├─test_report/ ├─HTMLTestRunner.py └─run_tests.py   其中,test_report/用于存放测试报告,稍后将会用到。

2、生成 HTML 测试报告

  如果想用 HTMLTestRunner 生成测试报告,那么请查看前面章节run_tests.py 文件的实现。测试用例的执行是通过 TextTestRunner 类提供的 run()方法完成的。这里需要把HTMLTestRunner.py 文件中的 HTMLTestRunner 类替换 TextTestRunner 类。

   打开 HTMLTestRunner.py 文件,可以找到 HTMLTestRunner 类。

  这段代码是 HTMLTestRunner 类的部分实现,主要看__init__()初始化方法的参数。

  • stream:指定生成 HTML 测试报告的文件,必填。
  • verbosity:指定日志的级别,默认为 1。如果想得到更详细的日志,则可以将参数修改为 2。
  • title:指定测试用例的标题,默认为 None。
  • description:指定测试用例的描述,默认为 None。
  在 HTMLTestRunner 类中,同样由 run()方法来运行测试套件中的测试用例。修改run_tests.py 文件如下。
# -*- coding:utf-8 -*-
# filename: run_test.py
# author: hello.yin
# date: 2021/11/16 18:58

import unittest
from HTMLTestRunner import HTMLTestRunner

test_dir = "./test_case"
suit = unittest.defaultTestLoader.discover(test_dir, pattern="test*.py")

if __name__ == "__main__":

    fp = open("./test_report/result.html", "wb")
    runner = HTMLTestRunner(stream=fp, title="hello.yin test baidu", description="火狐浏览器")
    runner.run(suit)
    fp.close()

 测试输出结果:

3、更易读的测试报告

   现在生成的测试报告并不易读,因为它仅显示测试类名和测试方法名。如果随意命名为“test_case1”“test_case2”等,那么将很难明白这些测试用例所测试的功能。

   在编写功能测试用例时,每条测试用例都有标题或说明,那么能否为自动化测试用例加上中文的标题或说明呢?答案是肯定的。在此之前,我们先来补充一个知识点:Python的注释。 

  Python 的注释有两种,一种叫作 comment,另一种叫作 doc string。前者为普通注释,后者用于描述函数、类和方法。

  在类或方法的下方,可以通过三引号(""" """ 或 ''' ''')添加 doc string 类型的注释。这类注释在平时调用时不会显示,只有通过 help()方法查看时才会被显示出来。因为 HTMLTestRunner 可以读取 doc string 类型的注释,所以,我们只需给测试类或方法添加这种类型的注释即可。

   打开 Python Shell,添加以下注释:

再次运行测试用例,查看测试报告,加了注释的测试报告如图所示:

4、测试报告文件名

  因为测试报告的名称是固定的,所以每次新的测试报告都会覆盖上一次的。如果不想被覆盖,那么只能每次在运行前都手动修改报告的名称。这样显然非常麻烦,我们最好能为测试报告自动取不同的名称,并且还要有一定的含义。时间是个不错的选择,因为它可以标识每个报告的运行时间,更主要的是,时间永远不会重复。   在 Python 的 time 模块中提供了各种关于时间操作的方法,利用这些方法可以完成这个需求。
>>> import time
>>> time.time()
1530352438.7203176
>>> time.ctime()
'Sat Jun 30 17:54:14 2018'
>>> time.localtime()
time.struct_time(tm_year=2018, tm_mon=6, tm_mday=30, tm_hour=17, tm_min=54, 
tm_sec=26, tm_wday=5, tm_yday=181, tm_isdst=0)
>>> time.strftime("%Y_%m_%d %H:%M:%S")
'2018_06_30 17:54:39'

   说明如下:

  • time.time():获取当前时间戳。
  • time.ctime():当前时间的字符串形式。
  • time.localtime():当前时间的 struct_time 形式。
  • time.strftime():用来获取当前时间,可以将时间格式化为字符串。 打开 runtests.py 文件,做如下修改:
# -*- coding:utf-8 -*-
# filename: run_test.py
# author: hello.yin
# date: 2021/11/16 18:58

import time
import unittest
from HTMLTestRunner import HTMLTestRunner

now_time = time.strftime("%Y%m%d%H%M%S")
test_dir = "./test_case"
suit = unittest.defaultTestLoader.discover(test_dir, pattern="test*.py")

if __name__ == "__main__":

    fp = open("./test_report/" + now_time + "_result.html", "wb")
    runner = HTMLTestRunner(stream=fp, title="hello.yin test baidu", description="火狐浏览器")
    runner.run(suit)
    fp.close()
  通过 strftime()方法以指定的格式获取当前日期时间,并赋值给 now_time 变量。将now_time 通过加号(+)拼接到生成的测试报告的文件名中。多次运行测试用例,可以看到生成的测试报告目录如图所示:

标签:__,测试报告,HTMLTestRunner,unittest,py,单元测试,HTML,time,test
来源: https://www.cnblogs.com/yinzuopu/p/15563010.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有