• 定制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. 增加单个用例的运行时间统计。
  • 相关阅读:
    网站访问量和服务器带宽的选择
    PHP实现四种基本排序算法
    常用的PHP排序算法以及应用场景
    常见的mysql数据库sql语句的编写和运行结果
    MyBatis拦截器:给参数对象属性赋值
    《自律让你自由》摘要
    Java JDK1.5、1.6、1.7新特性整理(转)
    人人都能做产品经理吗?
    Windows下查询进程、端口
    一语收录(2016-09-18)
  • 原文地址:https://www.cnblogs.com/fnng/p/14111750.html
Copyright © 2020-2023  润新知