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

运用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 funcreturn wrapperdef 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 funcreturn 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 = Noneaction = Action(initialize_data, databases)@classmethoddef 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)@classmethoddef 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).valuesub_data[FieldNames.SHEET] = sheet_nameyield sub_data

图片

图片

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

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

图片

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

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

4.1 样式一

图片

4.2 样式二

图片

图片

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

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

图片

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

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

邮件通知

图片

钉钉通知

图片

企业微信通知

图片

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

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取 【保100%免费】
在这里插入图片描述

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

LeetCode二叉搜索树的最近公共祖先

题目描述 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也…

【JavaEE】_ajax构造HTTP请求

目录 1. ajax简述 2. ajax构造HTTP请求 2.1 jquery库的引入 2.2 ajax构造HTTP请求格式 3. ajax构造GET请求实例 4. ajax构造POST请求实例 本专栏关于form表单构造HTTP请求一文中已经提到:form表单构造法只支持GET和POST,且会触发页面跳转。 原文详…

vue3+js 实现记住密码功能

常见的几种实现方式 1 基于spring security 的remember me 功能 ​​​​​​​ localStorage 除非主动清除localStorage 里的信息 ,不然永远存在,关闭浏览器之后下次启动仍然存在 存放数据大小一般为5M 不与服务器进行交互通信 cookies 可以…

装修避坑干货|阳台洗衣柜洗衣机一体柜设计。福州中宅装饰,福州装修

装修的时候常常会在洗衣柜中嵌入洗衣机,其实阳台柜的安装并不像看起来的那么简单,下面给大家说说几个注意事项‼️ 01.水电位置 在安装阳台柜之前,务必确认水电管道的位置。确保阳台柜不会阻碍水电管道的使用,以免造成不必要的麻…

辉辉数码:目前电视盒子哪个最好?目前性能最好的电视盒子

大家好,我是辉辉,上期测评发布后我收到了很多粉丝的反馈希望我这期能分享电视盒子推荐,看看目前电视盒子哪个最好。我购入了市面上最热门的十几款电视盒子对比配置、系统后整理了五款目前性能最好的电视盒子推荐给大家。 品牌型号&#xff1…

C++多继承之菱形继承原理及解决方法

目录 1.单继承和多继承 2.菱形继承 3.虚继承解决菱形继承 3.1使用方法 3.2虚继承原理 4.继承和组合 1.单继承和多继承 一个子类只有一个父类称为单继承 一个子类有多个父类称为多继承 2.菱形继承 菱形继承是多继承的一种复杂的情况 这里会出现一个问题,Assi…

Python中回调函数的理解与应用

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站零基础入门的AI学习网站~。 目录 前言 回调函数的概念 回调函数的基本用法 回调函数的实现方式 1 使用函数 2 使用类方法 3 使用类实…

洛谷P5723 质数口袋 题解

#题外话&#xff08;第39篇题解&#xff09;&#xff08;本题为普及-难度&#xff09; #先看题目 题目链接https://www.luogu.com.cn/problem/P5723 #思路&#xff08;看代码吧&#xff09; #代码 #include <bits/stdc.h> using namespace std; bool p(int p_i){for(i…

快速搭建keepalived+nginx

1.工作原理 keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。 虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面…

数据脱敏(七)脱敏算法-洗牌算法

脱敏算法篇使用阿里云数据脱敏算法为模板,使用算子平台快速搭建流程来展示数据 "洗牌脱敏"是一种数据处理技术&#xff0c;主要用于保护个人隐私和数据安全。它通过随机打乱数据集中的记录顺序&#xff0c;使得基于行或列的攻击变得困难&#xff0c;从而防止数据泄露…

经典问题之区间分组

给定 N 个闭区间 [ai,bi]&#xff0c;请你将这些区间分成若干组&#xff0c;使得每组内部的区间两两之间&#xff08;包括端点&#xff09;没有交集&#xff0c;并使得组数尽可能小。 输出最小组数。 输入格式 第一行包含整数 N&#xff0c;表示区间数。 接下来 N 行&#…

【Python笔记-设计模式】代理模式

一、说明 代理模式是一种结构型设计模式&#xff0c;提供对象的替代品或其占位符。代理控制着对于原对象的访问&#xff0c;并允许在将请求提交给对象前后进行一些处理。 (一) 解决问题 控制对对象的访问&#xff0c;或在访问对象前增加额外的功能或控制访问 (二) 使用场景…

adb-连接模拟器和真机操作

目录 1. 连接模拟器&#xff08;夜神模拟器示例&#xff09; 1.1 启动并连接模拟器 1.2 开启调试模式 2. USB连接真机调试 2.1 usb数据线连接好电脑&#xff0c;手机打开调试模式 2.2 输入adb devices检测手机 3. Wifi连接真机调试 3.1 USB连接手机和电脑 3.2 运行 adb…

YOLO学习中的琐碎知识点

目录 一、导入的库 二、名词介绍 &#xff08;1&#xff09;pytorch张量 &#xff08;2&#xff09;边界框&#xff08;bounding box&#xff09; 三、pycharm操作 &#xff08;1&#xff09;参数设置 四、文件认识 五、YOLO如何训练自己的模型 一、导入的库 import to…

【python】学习笔记03-循环语句

1. whlie循环的基础语法 - while循环的语法格式 - while循环的注意事项 条件需提供布尔类型结果&#xff0c;True继续&#xff0c;False停止 空格缩进不能忘 请规划好循环终止条件&#xff0c;否则将无限循环 """ 演示while循环基础练习题&#xff1a;求1-100…

检索增强生成(RAG)-重新排序方法

每日推荐一篇专注于解决实际问题的外文,精准翻译并深入解读其要点,助力读者培养实际问题解决和代码动手的能力。 欢迎关注公众号(NLP Research),及时查看最新内容 原文标题:Advanced RAG 04: Re-ranking 原文地址:https://medium.com/towards-artificial-intelligence…

ros自定义action记录

文章目录 自定义action1. 定义action文件2. 修改 package.xml3. 修改 CMakeLists.txt4. 运行 catkin build5. simple_action_server.py6. simple_action_client.py 测试 自定义action ros 版本&#xff1a;kinetic 自定义test包的文件结构如下 |-- test | |-- CMakeLists.t…

IS(Inception Score)和FID(Frechet Inception Distance score)的定义,区别,联系。

IS&#xff08;Inception Score&#xff09;和FID&#xff08;Frechet Inception Distance score&#xff09;的定义&#xff0c;区别&#xff0c;联系&#xff1a; IS&#xff08;Inception Score&#xff09; 定义&#xff1a; IS基于Google的预训练网络Inception Net-V3。…

32单片机基础:对射式红外传感器计次

接线如下图&#xff1a; 在HardWare建立两个文件&#xff1a;如图 COuntSensor.c 如何配置外部中断,根据下面图&#xff0c;我们需要把外部中断从GPIO到NVIC这一路出现的外设模块都配置好。把这条信号打通就OK了。 1.配置RCC:把我们这里涉及的外设时钟都打开&#xff0c;不打…

C++ //练习 8.2 测试函数,调用参数为cin。

C Primer&#xff08;第5版&#xff09; 练习 8.2 练习 8.2 测试函数&#xff0c;调用参数为cin。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块见练习8.1 /**************************************************************…