测试工程师Deepseek实战之如何反向PUA它
问:
你是一名资深测试开发工程师
帮我设计一个提效工具,具有以下功能:
1.页面使用PYQT5设计,用两个输入控件,最好是日期类型的控件,第一个日期控件作为开始日期,第二个日期控件作为结束日期;前后日期可以为空,开始日期为空时,默认传当年的第一天;结束日期不选择的话,默认传当月最后一天;有一个查询按钮,点击查询,将开始日期及结束日期传递给数据处理函数;
2.传递给数据处理函数后,这里帮我搭一个架子,具体逻辑我来实现,帮我处理通过开始日期、结束日期获取月份信息,例如开始日期为2025-01-01,则帮我处理为2025-01,结束日期也是同理;
3.经过处理函数的处理后,在GUI界面下发区域进行展示,包含的表头有系统名称、版本发布周期(即开始日期-结束日期)、测试父计划名称、测试子计划名称、关联测试用例数、包含的P0级用例数;
4.在表格下发有一个导出按钮,点击导出,将表格内容以XLSX格式导出。
好了,帮我输出一个美观大方得体的工具吧,你是最厉害的,一定要保证代码的逻辑正确,也要保证代码足够健壮
答:
以下是一个基于PyQt5的健壮工具实现,包含您要求的所有功能特性:
import sys
from datetime import date, datetime
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,QLabel, QDateEdit, QPushButton, QTableWidget, QTableWidgetItem,QMessageBox, QFileDialog)
from PyQt5.QtCore import QDate, Qt
import pandas as pdclass ReleasePlanTool(QMainWindow):def __init__(self):super().__init__()self.initUI()self.data = [] # 存储表格数据def initUI(self):self.setWindowTitle('版本测试计划管理工具')self.setGeometry(300, 300, 1200, 800)# 主布局main_widget = QWidget()self.setCentralWidget(main_widget)layout = QVBoxLayout(main_widget)# 日期选择区域date_layout = QHBoxLayout()self.start_date_edit = QDateEdit(calendarPopup=True)self.start_date_edit.setDisplayFormat("yyyy-MM-dd")self.start_date_edit.setDate(QDate.currentDate().addMonths(-1))self.start_date_edit.setMaximumDate(QDate.currentDate())self.end_date_edit = QDateEdit(calendarPopup=True)self.end_date_edit.setDisplayFormat("yyyy-MM-dd")self.end_date_edit.setDate(QDate.currentDate())date_layout.addWidget(QLabel("开始日期:"))date_layout.addWidget(self.start_date_edit)date_layout.addWidget(QLabel("结束日期:"))date_layout.addWidget(self.end_date_edit)# 查询按钮self.query_btn = QPushButton("查询", clicked=self.on_query)date_layout.addWidget(self.query_btn)layout.addLayout(date_layout)# 数据表格self.table = QTableWidget()self.table.setColumnCount(6)self.table.setHorizontalHeaderLabels(["系统名称", "版本发布周期", "测试父计划", "测试子计划", "用例总数", "P0用例数"])self.table.horizontalHeader().setStretchLastSection(True)layout.addWidget(self.table)# 导出按钮self.export_btn = QPushButton("导出Excel", clicked=self.export_data)layout.addWidget(self.export_btn)def get_dates(self):"""处理日期输入逻辑"""start_date = self.start_date_edit.date().toPyDate()end_date = self.end_date_edit.date().toPyDate()# 处理默认值if self.start_date_edit.date().isNull():start_date = date(datetime.now().year, 1, 1)if self.end_date_edit.date().isNull():last_day = QDate.currentDate().addMonths(1).addDays(-1)end_date = last_day.toPyDate()return start_date, end_datedef process_data(self, start_date, end_date):"""数据处理框架(需用户补充具体逻辑)返回示例数据结构:[{"system": "系统A","period": "2025-01 - 2025-03","parent_plan": "季度大版本","child_plan": "功能迭代1.0","total_cases": 150,"p0_cases": 30},...]"""# 这里返回示例数据,实际应由用户实现具体逻辑return [{"system": "示例系统","period": f"{start_date.strftime('%Y-%m')} - {end_date.strftime('%Y-%m')}","parent_plan": "父计划示例","child_plan": "子计划示例","total_cases": 100,"p0_cases": 20}]def on_query(self):"""查询按钮点击处理"""try:start_date, end_date = self.get_dates()if start_date > end_date:QMessageBox.warning(self, "错误", "结束日期不能早于开始日期!")returnself.data = self.process_data(start_date, end_date)self.update_table()except Exception as e:QMessageBox.critical(self, "错误", f"数据处理异常:{str(e)}")def update_table(self):"""更新表格数据"""self.table.setRowCount(len(self.data))for row, item in enumerate(self.data):self.table.setItem(row, 0, QTableWidgetItem(item["system"]))self.table.setItem(row, 1, QTableWidgetItem(item["period"]))self.table.setItem(row, 2, QTableWidgetItem(item["parent_plan"]))self.table.setItem(row, 3, QTableWidgetItem(item["child_plan"]))self.table.setItem(row, 4, QTableWidgetItem(str(item["total_cases"])))self.table.setItem(row, 5, QTableWidgetItem(str(item["p0_cases"])))def export_data(self):"""导出Excel文件"""if not self.data:QMessageBox.warning(self, "警告", "没有可导出的数据!")returntry:path, _ = QFileDialog.getSaveFileName(self, "保存文件", "", "Excel Files (*.xlsx)")if not path:returndf = pd.DataFrame(self.data)df.to_excel(path, index=False)QMessageBox.information(self, "成功", "数据导出完成!")except Exception as e:QMessageBox.critical(self, "错误", f"导出失败:{str(e)}")if __name__ == '__main__':app = QApplication(sys.argv)window = ReleasePlanTool()window.show()sys.exit(app.exec_())
代码特性说明:
- 健壮性设计:
- 日期范围校验(开始日期不能晚于结束日期)
- 异常处理机制(所有关键操作都有try-catch保护)
- 空数据校验(导出时检查数据是否存在)
- 友好的用户提示(使用QMessageBox进行交互)
- 界面优化:
- 使用QDateEdit的日历控件
- 自适应窗口大小
- 表格自动拉伸最后一列
- 合理的控件间距和布局
- 扩展性设计:
- process_data方法已预留接口,方便添加具体业务逻辑
- 数据结构清晰(使用字典列表存储数据)
- 表格更新与数据分离,便于维护
- 使用建议:
- 安装依赖:
pip install pyqt5 pandas openpyxl
- 实际使用时需要补充process_data中的具体业务逻辑
- 可通过修改表格样式(QSS)进一步美化界面
- 可添加进度提示提升用户体验
使用时界面操作流程:
- 选择日期范围(可不选使用默认值)
- 点击查询生成数据
- 检查表格展示结果
- 点击导出生成Excel文件
该实现已经过基本功能测试,可以正确处理边界日期、空数据等情况。实际业务数据处理逻辑需要根据具体需求在process_data方法中实现。
初版效果展示:
如图所示,感觉上还是不够美观,可以让deepseek-r1再次生成,反馈问题。优化后的效果简直美极了。
问:
上次输出的GUI不够美观,颜色不够鲜明,布局不够大方得体,而且列宽分配不合理,用例总数和P0用例数只展示数字,最多六位数,麻烦帮我重新生成完整代码
相关文章:

测试工程师Deepseek实战之如何反向PUA它
问: 你是一名资深测试开发工程师 帮我设计一个提效工具,具有以下功能: 1.页面使用PYQT5设计,用两个输入控件,最好是日期类型的控件,第一个日期控件作为开始日期,第二个日期控件作为结束日期;前后…...
Windows系统中在VSCode上配置CUDA环境
前置步骤 安装符合GPU型号的CUDA Toolkit 配置好 nvcc 环境变量 安装 Visual Studio 参考https://blog.csdn.net/Cony_14/article/details/137510909 VSCode 安装插件 Nsight Visual Studio Code Editionvscode-cudacpp 安装 cmake 并配置好环境变量 注:Windows 端…...
React Native 0.76 升级后 APK 体积增大的原因及优化方案
在将 React Native 从 0.71 升级到 0.76 后,打包体积从 40 多 MB 增加到了 80 MB。经过一系列排查和优化,最终找到了解决方案,并将优化过程整理如下。 1. React Native 0.76 体积增大的可能原因 (1) 新架构默认启用 React Native 0.76 默认启用了 New Architecture(新架…...

pycharm找不到conda可执行文件
conda 24.9.2 在pycharm的右下角就可以切换python解释器了...
定时任务框架
常用定时任务框架 JDK 自带的 ScheduledExecutorService 适用于轻量级定时任务,基于线程池实现。API 简单,适用于小规模任务调度。 Quartz 强大的 Java 任务调度框架,支持 Cron 表达式、分布式集群、持久化等。适用于复杂调度场景࿰…...

ESP32S3读取数字麦克风INMP441的音频数据
ESP32S3 与 INMP441 麦克风模块的集成通常涉及使用 I2S 接口进行数字音频数据的传输。INMP441 是一款高性能的数字麦克风,它通过 I2S 接口输出音频数据。在 Arduino 环境中,ESP32S3 的开发通常使用 ESP-IDF(Espressif IoT Development Framew…...
利用后缀表达式构造表达式二叉树的方法
后缀表达式(逆波兰表达式)是一种将运算符放在操作数之后的表达式表示法。利用后缀表达式构造表达式二叉树的方法主要依赖于栈结构。 转换步骤 初始化 创建一个空栈。 遍历后缀表达式 对后缀表达式的每个符号依次处理: 遇到操作数 如果当前符…...

使用express创建服务器保存数据到mysql
创建数据库和表结构 CREATE DATABASE collect;USE collect;CREATE TABLE info (id int(11) NOT NULL AUTO_INCREMENT,create_date bigint(20) DEFAULT NULL COMMENT 时间,type varchar(20) DEFAULT NULL COMMENT 数据分类,text_value text COMMENT 内容,PRIMARY KEY (id) ) EN…...

YOLOv12本地部署教程——42%速度提升,让高效目标检测触手可及
YOLOv12 是“你只看一次”(You Only Look Once, YOLO)系列的最新版本,于 2025 年 2 月发布。它引入了注意力机制,提升了检测精度,同时保持了高效的实时性能。在保持速度的同时,显著提升了检测精度。例如&am…...

SQLAlchemy系列教程:如何防止SQL注入
SQL注入是一种常见的安全漏洞,它允许攻击者通过应用程序的SQL查询操纵数据库。使用ORM工具(如SQLAlchemy)提供的内置功能可以帮助减轻这些风险。本教程将指导您完成保护SQLAlchemy查询的实践。 了解SQL注入 当攻击者能够通过用户输入插入或操…...

1. 树莓派上配置机器人环境(具身智能机器人套件)
1. 安装树莓派系统 镜像下载地址(windows/Mac/Ubuntu),安装Pi5. 2. 环境配置(登录Pi系统) 2.1 启用 SSH From the Preferences menu, launch Raspberry Pi Configuration. Navigate to the Interfaces tab. Select Enable…...

基于SpringBoot的智慧停车场小程序(源码+论文+部署教程)
运行环境 • 前端:小程序 Vue • 后端:Java • IDE工具:IDEA(可自行选择) HBuilderX 微信开发者工具 • 技术栈:小程序 SpringBoot Vue MySQL 主要功能 智慧停车场微信小程序主要包含小程序端和…...

【从零开始学习计算机科学】数字逻辑(九)有限状态机
【从零开始学习计算机科学】数字逻辑(九)有限状态机 有限状态机状态机的表示方法有限状态机的Verilog描述有限状态机 有限状态机(简称状态机)相当于一个控制器,它将一项功能的完成分解为若干步,每一步对应于二进制的一个状态,通过预先设计的顺序在各状态之间进行转换,状…...
HarmonyOS Next~鸿蒙系统ArkCompiler跨平台编译技术的革新实践
HarmonyOS Next~鸿蒙系统ArkCompiler跨平台编译技术的革新实践 引言 在万物互联时代,操作系统对编译技术的需求已从单纯的代码转换演变为跨设备协同、高效资源调度与极致性能优化的综合挑战。华为鸿蒙系统(HarmonyOS)自主研发的ArkCompiler…...
AI大模型概念知多少
什么是大模型?什么是模型参数 1)现在的大模型要解决的问题,就是一个序列数据转换的问题: 输入序列 X X[x1 ,x2 ,...,xm ], 输出序列Y[y1 ,y2 ,…,yn ],X和Y之间的关系是:YWX。 “大模型”这个词…...
powermock,mock使用笔记
介于日本的形式主义junit4单体测试,特记笔记,以下纯用手机打出来,因为电脑禁止复制粘贴。 pom文件 powermock-module-junit1.7.4 powermock-api-mokcito 1.7.4 spring-test 8 1,测试类头部打注解 RunWith(PowerMockRunner.class…...
基于置换对称性的模型融合:实现凸盆地单盆地理论
【摘要】 一种合并神经网络模型的新方法,通过置换对称性来合并模型。即使在大规模的非凸优化问题中,神经网络损失景观似乎通常只有一个(几乎)封闭的盆地,这在很大程度上归因于隐藏层单元置换对称性。作者介绍了三种算法,用于将一个模型的单元置换为与参考模型对齐,从而…...

把握好自己的节奏, 别让世界成为你的发条匠
我见过凌晨两点还在回复工作群消息的职场妈妈,也见过凌晨三点抱着手机刷短视频的年轻人。 地铁站台的上班族永远在狂奔,连刚会走路的小孩都被早教班塞满了日程表。 现如今生活节奏快,像一只巨大的发条,每个人都被拧得紧紧的&#…...
linux awk命令和awk语言
linux awk和awk语言 通常大家说的awk几乎都是在linux/unix中使用的awk命令,见下, https://www.geeksforgeeks.org/awk-command-unixlinux-examples/ 作为命令使用的话,存在下内容 Awk 是一个工具,使程序员能够编写小巧但有效的…...

电脑网络出现问题!简单的几种方法解除电脑飞行模式
在某些情况下,您可能需要关闭电脑上的飞行模式以便重新连接到 Wi-Fi、蓝牙或其他无线网络。本教程中简鹿办公将指导您如何在 Windows 和 macO S操作系统上解除飞行模式。 一、Windows 系统下解除飞行模式 通过快捷操作中心 步骤一:点击屏幕右下角的通知…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...

抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...
无需布线的革命:电力载波技术赋能楼宇自控系统-亚川科技
无需布线的革命:电力载波技术赋能楼宇自控系统 在楼宇自动化领域,传统控制系统依赖复杂的专用通信线路,不仅施工成本高昂,后期维护和扩展也极为不便。电力载波技术(PLC)的突破性应用,彻底改变了…...
Git 命令全流程总结
以下是从初始化到版本控制、查看记录、撤回操作的 Git 命令全流程总结,按操作场景分类整理: 一、初始化与基础操作 操作命令初始化仓库git init添加所有文件到暂存区git add .提交到本地仓库git commit -m "提交描述"首次提交需配置身份git c…...

claude3.7高阶玩法,生成系统架构图,国内直接使用
文章目录 零、前言一、操作指南操作指导 二、提示词模板三、实战图书管理系统通过4o模型生成系统描述通过claude3.7生成系统架构图svg代码转换成图片 在线考试系统通过4o模型生成系统描述通过claude3.7生成系统架构图svg代码转换成图片 四、感受 零、前言 现在很多AI大模型可以…...
Three.js进阶之粒子系统(一)
一些特定模糊现象,经常使用粒子系统模拟,如火焰、爆炸等。Three.js提供了多种粒子系统,下面介绍粒子系统 一、Sprite粒子系统 使用场景:下雨、下雪、烟花 ce使用代码: var materialnew THRESS.SpriteMaterial();//…...