• 精美可视化:Python自动化生成漂亮的测试报告


    “ 运用Python的Unittest、数据驱动测试(DDT)、Excel、Jinja2和HTML技术,构建一个能够自动生成精美可视化测试报告的自动化测试框架”


    思路流程

    1. 封装读取数据,让所有数据都能够再excel中填写,不再填写任何一行逻辑代码
    2. 通过unittest框架的discover()找到匹配的测试用例,由HTMLTestRunner的run()方法执行测试用例并生成最新的测试报告。
    3. 集成TestResult,增加一些获取数据逻辑,将数据封存输出,结合jinja2模板引擎,生成报告
    4. 将报告路径及收集的结果参数传给发送邮件,钉钉通知,企业微信通知的方法,再run用例结束后,自动发送数据到所需的位置
    5. 这里不展开对具体每一步得详细介绍,直接结果导向开始讲解。

    1. 数据驱动测试(DDT):以数据为驱动的智慧
    为了匹配框架使用,重新写了类似ddt的装饰器,结合用例名称生成测试函数名称,这样就兼容了unittest的框架特性。核心代码:

    def list_data(datas):
        """
        :param datas: Test data
        :return:
        """
        def wrapper(func):
            setattr(func, "PARAMS", datas)
            return func
        return wrapper
    
    
    def yaml_data(file_path):
        """
        :param file_path:YAML file path
        :return:
        """
        def wrapper(func):
            try:
                with open(file_path, "r", encoding="utf-8") as f:
                    datas = yaml.load(f, Loader=yaml.FullLoader)
            except:
                with open(file_path, "r", encoding="gbk") as f:
                    datas = yaml.load(f, Loader=yaml.FullLoader)
            setattr(func, "PARAMS", datas)
            return func
        return wrapper
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    2.unittest框架妙用:高度封装精简脚本代码

    将上述的装饰器装饰测试方法,通过多集成,、封装及反射捣鼓一波,最终的执行脚本代码,只有么关键是十来行了:

    test_file = Config.TEST_CASE  # 获取 excel 文件路径
    excel = DoExcel(test_file)
    
    test_case, databases, initialize_data, host = excel.get_excel_init_and_cases()
    
    
    @ddt
    class TestProjectApi(unittest.TestCase):
        maxDiff = None
        action = Action(initialize_data, databases)
    
        @classmethod
        def setUpClass(cls) -> None:
            cls.action.load_modules_from_folder(extensions)
    
        def setUp(self) -> None:
            pass
    
        @list_data(test_case)
        def test_api(self, item):
            sheet, iid, condition, st, name, desc, method, expected = self.action.base_info(item)
            if self.action.is_run(condition):
                self.skipTest("这个测试用例听说泡面比较好吃,所以放弃执行了!!")
            regex, keys, deps, jp_dict, ex_request_data = self.action.extractor_info(item)
            self.action.pause_execution(st)
            self.action.exc_sql(item)
            if self.action.is_only_sql(method):
                self.skipTest("这条测试用例被 SQL 吃了,所以放弃执行了!!")
            # prepost_script = f"prepost_script_{sheet}_{iid}.py"
            # item = self.action.load_and_execute_script(Config.SCRIPTS_DIR, prepost_script, "setup", item)
    
            self.action.send_request(host, method, ex_request_data)
            self.action.analysis_response(sheet, iid, name, desc, regex, keys, deps, jp_dict)
            self.action.execute_validation(excel, sheet, iid, name, desc, expected)
    
        @classmethod
        def tearDownClass(cls) -> None:
            excel.close_excel()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    3.Excel王者:用例编写快速简单易过滤筛选
    所有测试数据,填写在excel中,需要评审的时候,直接将excel丢给开发,一劳永逸,excel的强大,可不是三言两语能够解释清楚的,用例如下编写

    """封装读取excel“""
    ...
    sheets = eval(self.get_excel_init().get(FieldNames.SHEETS))
            for sheet_name in sheets:
                sheet = self.wb[sheet_name]
                max_row = self.get_max_row(sheet)
                max_column = self.get_max_column(sheet)
                first_header = []
                for i in range(1, max_column + 1):
                    first_header.append(sheet.cell(1, i).value)
                for i in range(2, max_row + 1):
                    sub_data = {}
                    for k in range(1, max_column + 1):
                        sub_data[first_header[k - 1]] = sheet.cell(i, k).value
                        sub_data[FieldNames.SHEET] = sheet_name
                    yield sub_data
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    image.png

    image.png

    **4.记录日志:整洁的日志记录

    用例在运行过程中,日志信息的输出也是非常重要的一个环节,我们来看看日志的展示:

    image.png

    4. 生成美观的HTML报告:多种样式报告任君选择

    重写优化了unittestReport的核心代码,测试结果不再是枯燥的一串文字,而是以漂亮的HTML展示。报告中的每个测试用例都得到了详尽的展示,包括输入数据、预期输出和实际结果,使得整个测试过程一目了然。
    4.1 样式一

    image.png 4.2 样式二

    image.png

    image.png

    如上的报告,是不是很过瘾,KPI考核又得一分

    4.3 Excel中测试用例结果回显记录

    image.png

    5. 集成通知机制:钉钉、企业微信、邮件

    生成美观的测试报告,及时分享给团队也是很有逼格的。通过SMTP库、钉钉和企业微信等渠道,可以自动发送测试报告,还能够确保团队成员即时了解测试进展和结果,想发就发,想@就@。

    邮件通知

    image.png

    钉钉通知

    image.png

    企业微信通知

    image.png

    闲话说一说:测试人只做测试专业的事就好(点点点…),不要整天为配置jenkins掉头发了,也不要一天到晚搜allure怎么配置,怎么修改啊,怎么又乱码不显示完整,又英文啥杂七杂八的而烦恼!!

    彩蛋:对框架感兴趣的小伙伴,看到最后自取哦~

    总结

    以上就是我今天为各位小伙伴准备的内容,如果你想了解更多关于Python自动化测试的知识和技巧,欢迎加我;我会不定期地分享更多的精彩内容。感谢你的阅读和支持!


    如果你对Python感兴趣,想要学习python,这里给大家分享一份Python全套学习资料,都是我自己学习时整理的,希望可以帮到你,一起加油!

    😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓
    Python全套学习资料

    在这里插入图片描述

    1️⃣零基础入门

    ① 学习路线

    对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
    在这里插入图片描述

    ② 路线对应学习视频

    还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~
    在这里插入图片描述

    ③练习题

    每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
    在这里插入图片描述

    2️⃣国内外Python书籍、文档

    ① 文档和书籍资料

    在这里插入图片描述

    3️⃣Python工具包+项目源码合集

    ①Python工具包

    学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
    在这里插入图片描述

    ②Python实战案例

    光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
    在这里插入图片描述

    ③Python小游戏源码

    如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
    在这里插入图片描述

    4️⃣Python面试题

    我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
    在这里插入图片描述
    在这里插入图片描述

    5️⃣Python兼职渠道

    而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
    在这里插入图片描述

    上述所有资料 ⚡️ ,朋友们如果有需要的,可以扫描下方👇👇👇二维码免费领取🆓
    在这里插入图片描述

  • 相关阅读:
    2311rust到27版本更新
    S波与P波的定义(光波电矢量)(菲涅耳公式)
    线程安全使用 HashMap 的四种技巧
    Intel Pin实现函数probe以及修改原代码路径
    亚信科技与中国信通院达成全方位、跨领域战略合作
    百度文心一言4.0抢先体验教程!
    无代码开发添加数据入门教程
    m多载波MC-CDMA系统单用户检测方法的研究,对比EGC,MRC,ORC以及MMSE
    了解 Dockerfile VOLUME 指令
    Java String类(3):StringBulider和StringBuffer详解
  • 原文地址:https://blog.csdn.net/bagell/article/details/134436652