zoukankan      html  css  js  c++  java
  • 定制unittest测试报告

    基于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. 增加单个用例的运行时间统计。
  • 相关阅读:
    Netty大小端
    手写简单IOC
    Java线程
    mysql查询性能问题,加了order by速度慢了
    字节码增强技术探索
    Linux 添加定时任务
    一千行 MySQL 学习笔记
    深入浅出Shiro系列
    深入浅出SpringMVC系列~
    来聊一聊 Linux 常用命令 (第二篇)~
  • 原文地址:https://www.cnblogs.com/fnng/p/14111750.html
Copyright © 2011-2022 走看看