职场经验:Python自动化生成漂亮的测试报告【干货】

news2024/11/24 11:44:48

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

思路流程

封装读取数据,让所有数据都能够再excel中填写,不再填写任何一行逻辑代码

通过unittest框架的discover()找到匹配的测试用例,由HTMLTestRunner的run()方法执行测试用例并生成最新的测试报告。

集成TestResult,增加一些获取数据逻辑,将数据封存输出,结合jinja2模板引擎,生成报告

将报告路径及收集的结果参数传给发送邮件,钉钉通知,企业微信通知的方法,再run用例结束后,自动发送数据到所需的位置

这里不展开对具体每一步得详细介绍,直接结果导向开始讲解。

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

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()

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

图片

图片

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

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

图片

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

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

4.1 样式一

图片

4.2 样式二

图片

图片

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

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

图片

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

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

邮件通知

图片

钉钉通知

图片

企业微信通知

图片

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

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1258686.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++算法 —— 贪心(5)

文章目录 1、合并区间2、无重叠区间3、用最少的箭引爆气球4、整数替换5、俄罗斯套娃信封6、可被3整除的最大和7、距离相等的条形码8、重构字符串 1、合并区间 56. 合并区间 在合并区间时,得先排序一下,方便判断。方便可以按照左或者右端点排序。很多问题…

StyleGAN 使用指南:生成更逼真的图片

StyleGAN 使用指南:生成更逼真的图片 提出背景:特征纠缠StyleGAN-v1 网络结构映射网络 Mapping network f生成网络 Synthesis network g训练技巧样式混合 mixing regularization截断 Truncation Trick 评估指标路径长度 Perceptual path length解耦&…

2019年3月14日 Go生态洞察:Go开发者网络新动态

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

洗眼镜的机器有哪些?眼镜超声波清洗机哪家强?眼镜清洗机推荐

由于自己经常佩戴眼镜,所以个人对清洗眼镜的要求害死挺高的,一周最少是需要清洗一次的,不然会感觉眼镜上会有非常多的细菌藏匿在污垢中,往往这些细菌没有清洁到位就会导致脸上长痘长螨虫的问题,所以看到这里的朋友们一…

灵茶 - 2023 - 11 - 27

B. Minimum Ternary String 链接 : Problem - 1009B - Codeforces 思路 : 10 , 12 可以互相交换,就代表着1可以出现在任何地方,要追求字典序最小,那么应该将所有的1放在哪里呢 ? 应该放在第一个2前面,要注意的是 : 没有2的…

C++基础 -3- 匿名空间,命名空间跨文件使用

匿名空间仅限本文件使用 创建匿名空间格式(图片代码段呈现) namespace {int a100; }命名空间的跨文件使用 namespace rlxy {int a100; }namespace rlxy {extern int a; }

深度学习之循环神经网络

视频链接:6 循环神经网络_哔哩哔哩_bilibili 给神经网络增加记忆能力 对全连接层而言,输入输出的维数固定,因此无法处理序列信息 对卷积层而言,因为卷积核的参数是共享的,所以卷积操作与序列的长度无关。但是因为卷积…

可以媲美MidJourney,但是开源和免费的超强AI绘画-fooocus

现在的AI技术很火,这一新兴领域的发展给艺术创作带来了全新的可能性,AI绘画的应用也十分的广泛。我自己见到的就有运用在模特穿衣服身上的,化妆品广告图生成的等等,比如MidJourney 和stable diffusion 等 AI绘画程序已经很成熟了&…

011 OpenCV warpAffine

目录 一、环境 二、warpAffine原理 三、完整代码 一、环境 本文使用环境为: Windows10Python 3.9.17opencv-python 4.8.0.74 二、warpAffine原理 warpAffine是OpenCV库中的一个函数,它用于执行二维仿射变换。这个函数接受一个输入图像和变换矩阵&…

【Linux 静态IP配置】

静态IP配置 1.NAT模式设置2.设置静态ip3.重启网络4.查看ip 1.NAT模式设置 首先设置虚拟机中NAT模式的选项,打开VMware,点击“编辑”下的“虚拟网络编辑器”,设置NAT参数 注意: VMware Network Adapter VMnet8保证是启用状态 …

针对近期大面积出现的小程序新用户登录不正常处理办法

原因是微信小程序需要更新协议规则 操作方法如下: 提交之后等待通过

麒麟信安联合牵头 | 国家关键领域信创行业产教融合共同体成立大会暨欧拉人才发展论坛盛大召开

11月24日,国家关键领域信创行业产教融合共同体成立大会暨欧拉人才发展论坛在长沙职业技术学院盛大召开。大会由湖南省教育厅、湖南省工业和信息化厅、长沙市人民政府指导,麒麟信安、长沙理工大学、长沙职业技术学院三家牵头单位主办,湖南欧拉…

01-Java集合之单向队列,如Collection接口,List接口,Set接口,Queue接口及其实现类的底层结构和特点

单列集合 特点 单列集合分为三大类 List类型的集合: 有序可重复 , 这种类型的集合的元素都有下标Set类型的集合: 无序不可重复 , 这种类型的集合的元素都没有下标Queue类型的集合: 先进先出(FIFO) , 只能一端进并且在另一端出的队列 Collection中能存放的元素: 没有使用泛型…

国家万亿资金助力城市生命线城市内涝积水监测系统

自2023年年初以来,我国多个地区遭遇了洪涝、干旱、台风、风雹等灾害的侵袭,部分地区灾情严重,经济损失较大。为应对灾后恢复重建工作的艰巨任务,本次国债将主要投向灾后恢复重建以及提升防灾减灾救灾能力。其中,将全面…

统信UOS安装Virtualbox虚拟机和Windows10系统

在UOS统信系统中部署Windows环境我可以通过安装虚拟机来实现,这也可以解决软件不适配带来的一些问题,当然对硬件配置也有一定的要求,不建议性能过低的设备使用。 接下来请按照以下步骤进行安装Virtualbox及Win10虚拟系统的设置。 1、安装Vi…

docker容器的生命周期管理常用命令

容器的生命周期管理命令 docker create :创建一个新的容器但不启动它 docker create nginx docker run :创建一个新的容器并运行一个命令 常用选项: 常用选项1. --add-host:容器中hosts文件添加 host:ip 映射记录 2. -a, --attach&#…

【论文阅读】ActiveNeRF:通过不确定性估计候选新视图

【论文阅读】ActiveNeRF: Learning where to See with Uncertainty Estimation Abstract1 Introduction3 Background4 NeRF with Uncertainty Estimation5 ActiveNeRF5.1 Prior and Posterior Distribution5.2 Acquisition Function5.3 Optimization and Inference 6 Experimen…

Redis面试题:Redis是单线程的,但是为什么还那么快?I/O多路复用模型

目录 面试官:Redis是单线程的,但是为什么还那么快? 面试官:能解释一下I/O多路复用模型? 面试官:Redis是单线程的,但是为什么还那么快? 候选人: 嗯,这个有几…

Robot Framework自动化测试(四)--- 分层思想

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

【广州华锐互动】节约用水VR互动教育:身临其境体验水资源的珍贵!

随着技术的不断发展,虚拟现实(VR)技术在许多领域得到了广泛应用。在节水宣传教育方面,VR技术也展现出了其独特的优势。与传统宣传教育方式相比,节约用水VR互动教育具有更加沉浸式、互动性和实践性的特点,能…