代码改变世界

定制unittest测试报告

2020-12-10 00:08  虫师  阅读(2567)  评论(0编辑  收藏  举报

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

安装

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 :是否保存最后一个结果

集成发邮件功能

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

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 附件

用例运行失败自动截图

如果你运行的是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报告中。

其他

  1. 基于jinja2开发,将要HTML代码与python代码分离。
  2. 引用了bootstrap4的模板样式库。
  3. 只支持python3.x,没有在python2下面做过测试。
  4. 其他细节优化:
    4.1. 增加了Chart环状图展示。
    4.2. 增加跳过用例统计
    4.3. 增加单个用例的运行时间统计。
Web Page Counters
Computer Desks