定制unittest测试报告
  54wKHQuU2AYM 2023年11月05日 18 0

基于HTMLTestRunner的定制版本非常多,我这几天手动定制了一款,除了有不错的颜值,还提供了一些非常实用的功能。

定制unittest测试报告_用例

安装

github:
https://github.com/SeldomQA/HTMLTestRunner

> git clone https://github.com/SeldomQA/HTMLTestRunner
> cd HTMLTestRunner/
> python setup.py install

基本使用

基本用法与大多数定制版的报告一样。

import unittest
from TestRunner import HTMLTestRunner


class TestDemo(unittest.TestCase):
    """测试用例说明"""

    def test_success(self):
        """执行成功"""
        self.assertEqual(2 + 3, 5)

if __name__ == '__main__':
    suit = unittest.TestSuite()
    suit.addTest(TestDemo("test_success"))

    report = "./result.html"
    with(open(report, 'wb')) as fp:
        runner = HTMLTestRunner(
            stream=fp,
            title='<project name>test report',
            description='describe: ... ')
        runner.run(suit)

HTMLTestRunner类说明:

  • stream : 指定报告的路径
  • title : 报告的标题
  • description : 报告的描述

run()方法说明:

  • suit : 运行的测试套件

用例失败重跑

报告提供了用例错误/失败重跑功能。

import unittest
from TestRunner import HTMLTestRunner


class TestDemo(unittest.TestCase):
    """测试用例说明"""

    def test_success(self):
        """执行成功"""
        self.assertEqual(2 + 3, 5)

    def test_fail(self):
        self.assertEqual(5, 6)

    def test_error(self):
        self.assertEqual(a, 6)


if __name__ == '__main__':
    suit = unittest.TestSuite()
    suit.addTest(TestDemo("test_success"))
    suit.addTest(TestDemo("test_fail"))
    suit.addTest(TestDemo("test_error"))

    report = "./result.html"
    with(open(report, 'wb')) as fp:
        runner = HTMLTestRunner(stream=fp)
        runner.run(suit, rerun=2, save_last_run=False)

run()方法说明:

  • suit : 运行的测试套件
  • rerun :重跑次数,设置为2,会在用例失败/错误后进行两次重试。
  • save_last_run :是否保存最后一个结果

定制unittest测试报告_html_02

集成发邮件功能

如果你想用例运行完成之后发邮件,只需要填写邮箱信息即可。

import unittest
from TestRunner import HTMLTestRunner
from TestRunner import SMTP

# ...

if __name__ == '__main__':
    suit = unittest.TestSuite()
    # ...

    report = "./result.html"
    with(open(report, 'wb')) as fp:
        runner = HTMLTestRunner(stream=fp)
        runner.run(suit)
    # 发邮件功能
    smtp = SMTP(user="user@126.com", password="123", host="smtp.126.com")
    smtp.sender(to="user@126.com", attachments=report)

SMTP类说明:

  • user 发送者邮箱帐号
  • password 发送者邮箱密码
  • host 邮箱服务器地址

sender()方法说明:

  • to 接收者邮箱
  • attachments 附件

定制unittest测试报告_python_03

用例运行失败自动截图

如果你运行的是selenium/appium,那么当用例运行失败将会自动截图。

import unittest
from time import sleep
from TestRunner import HTMLTestRunner
from selenium import webdriver


class YouTest(unittest.TestCase):

    @classmethod
    def setUpClass(cls) -> None:
        cls.driver = webdriver.Chrome()
        cls.base_url = "https://www.baidu.com"

    @classmethod
    def tearDownClass(cls) -> None:
        cls.driver.quit()

    def test_success(self):
        """测试百度搜索:HTMLTestRunner """
        self.driver.get(self.base_url)
        self.driver.find_element_by_id("kw").send_keys("HTMLTestRunner")
        self.driver.find_element_by_id("su").click()
        sleep(2)

    def test_error(self):
        """测试百度搜索,定位失败 """
        self.driver.get(self.base_url)
        self.driver.find_element_by_id("kw").send_keys("python")
        self.driver.find_element_by_id("su22").click()
        sleep(2)

    def test_fail(self):
        """测试百度搜索,断言失败 """
        self.driver.get(self.base_url)
        self.driver.find_element_by_id("kw").send_keys("unittest")
        self.driver.find_element_by_id("su").click()
        sleep(2)
        self.assertEqual(self.driver.title, "unittest")


if __name__ == '__main__':
    suit = unittest.TestSuite()
    suit.addTest(YouTest("test_success"))
    suit.addTest(YouTest("test_error"))
    suit.addTest(YouTest("test_fail"))

    report = "./selenium_result.html"
    with(open(report, 'wb')) as fp:
        runner = HTMLTestRunner(
            stream=fp,
            title='Seldom自动化测试报告',
            description='浏览器chrome,平台windows'
        )
        runner.run(suit)

报告中不需要实现任何截图的操作,会自动帮你生成截图并嵌入到HTML报告中。

定制unittest测试报告_用例_04

其他

  1. 基于jinja2开发,将要HTML代码与python代码分离。
  2. 引用了bootstrap4的模板样式库。
  3. 只支持python3.x,没有在python2下面做过测试。
  4. 其他细节优化:
    4.1. 增加了Chart环状图展示。
    4.2. 增加跳过用例统计
    4.3. 增加单个用例的运行时间统计。
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  2Fnpj8K6xSCR   2024年05月17日   101   0   0 Python
  xKQN3Agd2ZMK   2024年05月17日   70   0   0 Python
  fwjWaDlWXE4h   2024年05月17日   38   0   0 Python
54wKHQuU2AYM