第 7 章 unittest 扩展 - 7.1 HTML 测试报告 - Selenium3 自动化测试
2021-04-09 08:26
YPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
标签:runner 支持 width written obsolete hover collect javascrip hive
第 7 章 unittest 扩展
在第 6 章中,我们介绍了 unittest 的主要功能,但是如果只用它来写 Web 自动化测试,则仍稍显不足。例如,它不能生成 HTML 格式的报告、它不能提供参数化功能等。不过,我们可以借助第三方扩展来弥补这些不足。
本教程的练习实践源码请点击下载
7.1 HTML 测试报告
HTMLTestRunner 是 unittest 的一个扩展,它可以生成易于使用的 HTML 测试报告。HTMLTestRunner 是在 BSD 许可证下发布的。
下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html
因为该扩展不支持 Python 3,所以做了一些修改,使它可以在 Python 3.7 下运行。
GitHub 地址:https://github.com/defnngj/HTMLTestRunner
7.1.1 下载与安装
HTMLTestRunner 的使用非常简单,它是一个独立的 HTMLTestRunner.py 文件,既可以把它当作 Python 的第三方库来使用。
首先打开上面的 GitHub 地址,克隆或下载整个项目。然后把 HTMLTestRunner.py 单独放到 Python 的安装目录下面,如 C:\Python37\Lib\
如果把 HTMLTestRunner 当作项目的一部分来使用,就把它放到项目目录中。笔者推荐这种方式,因为可以方便地定制生成的 HTMLTestRunner 报告。
其中,test_report/用于存放测试报告,稍后将会用到。
7.1.2 生成 HTML 测试报告
如果想用 HTMLTestRunner 生成测试报告,那么请查看本书 6.1.4 节 run_tests.py 文件的实现。测试用例的执行是通过 TextTestRunner 类提供的 run()方法完成的。这里需要把 HTMLTestRunner.py 文件中的 HTMLTestRunner 类替换 TextTestRunner 类。
打开 HTMLTestRunner.py 文件,在第 877 行(如果代码更新,则行号会发生变化)可以找到 HTMLTestRunner 类。
使用Sublime打开.py文件,查找关键字“HTMLTestRunner”。
HTMLTestRunner
""" A TestRunner for use with the Python unit testing framework. It generates a HTML report to show the result at a glance. The simplest way to use this is to invoke its main method. E.g. import unittest import HTMLTestRunner ... define your tests ... if __name__ == ‘__main__‘: HTMLTestRunner.main() For more customization options, instantiates a HTMLTestRunner object. HTMLTestRunner is a counterpart to unittest‘s TextTestRunner. E.g. # output to a file fp = file(‘my_report.html‘, ‘wb‘) runner = HTMLTestRunner.HTMLTestRunner( stream=fp, title=‘My unit test‘, description=‘This demonstrates the report output by HTMLTestRunner.‘ ) # Use an external stylesheet. # See the Template_mixin class for more customizable options runner.STYLESHEET_TMPL = ‘‘ # run the test runner.run(my_test_suite) ------------------------------------------------------------------------ Copyright (c) 2004-2007, Wai Yip Tung All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name Wai Yip Tung nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ # URL: http://tungwaiyip.info/software/HTMLTestRunner.html __author__ = "Wai Yip Tung , bugmaster" __version__ = "0.8.2" """ Change History Version 0.8.2 * Show output inline instead of popup window (Viorel Lupu). Version in 0.8.1 * Validated XHTML (Wolfgang Borgert). * Added description of test classes and test cases. Version in 0.8.0 * Define Template_mixin class for customization. * Workaround a IE 6 bug that it does not treat """ # TODO: color stderr # TODO: simplify javascript using ,ore than 1 class in the class attribute? import datetime import io import sys import time import unittest from xml.sax import saxutils # ------------------------------------------------------------------------ # The redirectors below are used to capture output during testing. Output # sent to sys.stdout and sys.stderr are automatically captured. However # in some cases sys.stdout is already cached before HTMLTestRunner is # invoked (e.g. calling logging.basicConfig). In order to capture those # output, use the redirectors for the cached stream. # # e.g. # >>> logging.basicConfig(stream=HTMLTestRunner.stdout_redirector) # >>> class OutputRedirector(object): """ Wrapper to redirect stdout or stderr """ def __init__(self, fp): self.fp = fp def write(self, s): self.fp.write(s) def writelines(self, lines): self.fp.writelines(lines) def flush(self): self.fp.flush() stdout_redirector = OutputRedirector(sys.stdout) stderr_redirector = OutputRedirector(sys.stderr) # ---------------------------------------------------------------------- # Template class Template_mixin(object): """ Define a HTML template for report customerization and generation. Overall structure of an HTML report HTML +------------------------+ | | | | | | | STYLESHEET | | +----------------+ | | | | | | +----------------+ | | | | | | | | | | | | HEADING | | +----------------+ | | | | | | +----------------+ | | | | REPORT | | +----------------+ | | | | | | +----------------+ | | | | ENDING | | +----------------+ | | | | | | +----------------+ | | | | | | | +------------------------+ """ STATUS = { 0: ‘pass‘, 1: ‘fail‘, 2: ‘error‘, } DEFAULT_TITLE = ‘Unit Test Report‘ DEFAULT_DESCRIPTION = ‘‘ # ------------------------------------------------------------------------ # HTML Template HTML_TMPL = r"""\n"); d.close(); } */ --> %(heading)s %(report)s %(ending)s %(chart_script)s """ # variables: (title, generator, stylesheet, heading, report, ending) # ------------------------------------------------------------------------ # Stylesheet # # alternatively use a for external style sheet, e.g. # STYLESHEET_TMPL = """ """ # ------------------------------------------------------------------------ # Heading # HEADING_TMPL = """%(title)s %(stylesheet)s
%(title)s
%(parameters)s%(description)s
Test Case Pie charts
-Pass--Faild-
-Error-
%(name)s: %(value)s
""" # variables: (name, value) # ------------------------------------------------------------------------ # Report # REPORT_TMPL = """Show Summary Failed All
Test Group/Test case | Count | Pass | Fail | Error | View |
Total | %(count)s | %(Pass)s | %(fail)s | %(error)s |
%(script)s
这段代码是 HTMLTestRunner 类的部分实现,主要看__init__()初始化方法的参数。
● stream:指定生成 HTML 测试报告的文件,必填。
● verbosity:指定日志的级别,默认为 1。如果想得到更详细的日志,则可以将参数修改为 2。
● title:指定测试用例的标题,默认为 None。
● description:指定测试用例的描述,默认为 None。
在 HTMLTestRunner 类中,同样由 run()方法来运行测试套件中的测试用例。修改 run_tests.py 文件如下。
import unittest from HTMLTestRunner import HTMLTestRunner if __name__ == ‘__main__‘: # 定义测试用例的目录为当前目录 test_dir = ‘./test_case‘ suit = unittest.defaultTestLoader.discover(test_dir, pattern=‘test*.py‘) fp = open(‘./test_report/result.html‘, ‘wb‘) # 调用HTMLTestRunner,运行测试用例 runner = HTMLTestRunner(stream=fp, title="百度搜索测试报告", description="运行环境:Windows 10, Chrome浏览器" ) runner.run(suit) fp.close()
首先,使用 open()方法打开 result.html 文件,用于写入测试结果。如果没有 result.html 文件,则会自动创建该文件,并将该文件对象传给 HTMLTestRunner 类的初始化参数 stream。然后,调用 HTMLTestRunner 类中的 run()方法来运行测试套件。最后,关闭 result.html 文件。
打开/test_report/result.html 文件,将会得到一张 HTML 格式的报告。HTMLTestRunner 测试报告如图。
第 7 章 unittest 扩展 - 7.1 HTML 测试报告 - Selenium3 自动化测试
标签:runner 支持 width written obsolete hover collect javascrip hive
原文地址:https://www.cnblogs.com/MarlonKang/p/12448059.html
上一篇:CTFshow萌新赛-千字文
下一篇:http协议
文章标题:第 7 章 unittest 扩展 - 7.1 HTML 测试报告 - Selenium3 自动化测试
文章链接:http://soscw.com/index.php/essay/73256.html