python3实现自动生成redmine测试日报

我们每天的测试数据,需要及时反馈给领导,领导不喜欢看细节,就喜欢看结果,一目了然,快速又不费事。

领导最想看到就是  每个人的头上都有多少缺陷放着,大家上班的时候到底是不是在踏踏实实做事。报告真的很能说明事实。

测试组需要每天整理一份日报发送邮件给大家,从redmine(我司用的这款工具,相当好用啊,相比jira/禅道/bugzilla)上下载筛选过的缺陷列表,然后进行数据统计,重新处理模板报表···随着想要的信息越来越多,没半个小时这报告出不来,关键是有时候下班下得早,缺陷状态还不稳定(开发都还在处理),回家之后还要远程连接公司服务器。

反正就一个目的,为了这件事情能做得快点,大家早点下班,早点休息。

由于此版本是改版代码,存在一些多余的数据,后期修改

-----------

先来一些准备工作

其中有一些可能随时跟新的文本信息,单独放到txt,如下(注意文件名字要一致):

current.txt (每日更新的数据)

(此行代码不读)请在下面输入今日的git号:
9543a8c16e133f7a323d124e024622a59f938727
(此行代码不读)请按照格式[报表,谭秋,进度:30%;阻塞缺陷:3个;...]输入进展:
会员管理,李四,1.测试进度:48.6%;2.提交bug数:5个;3.提交的严重问题:无;4.阻塞进度的问题描述:无
信息管理,张三,1.测试进度:48.6%;2.提交bug数:5个;3.提交的严重问题:无;4.阻塞进度的问题描述:无
仓库管理,王五,1.测试进度:48.6%;2.提交bug数:5个;3.提交的严重问题:无;4.阻塞进度的问题描述:无

module.txt(项目所有的模块,会以此做统计,此处只举例三个)

会员管理
注册管理
系统管理

user.txt  (redmine 是姓与名 之间存在空格的存储,需要注意书写)

张 三
李 四
王 五
冯 宝宝

数据库结构:

你不想自己建的话,可以用这个sql:

/*
Navicat MySQL Data Transfer

Source Server         : 1
Source Server Version : 50728
Source Host           : 192.168.1.1:3306
Source Database       : report

Target Server Type    : MYSQL
Target Server Version : 50728
File Encoding         : 65001

Date: 2019-12-25 14:12:43
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for all_data
-- ----------------------------
DROP TABLE IF EXISTS `all_data`;
CREATE TABLE `all_data` (
  `time_t` date NOT NULL,
  `new` int(255) unsigned zerofill DEFAULT NULL,
  `ongoing` int(255) unsigned zerofill DEFAULT NULL,
  `feedback` int(255) unsigned zerofill DEFAULT NULL,
  `delay` int(255) unsigned zerofill DEFAULT NULL,
  `reopen` int(255) unsigned zerofill DEFAULT NULL,
  `block` int(255) unsigned zerofill DEFAULT NULL,
  `refused` int(255) unsigned zerofill DEFAULT NULL,
  `untreated` int(255) unsigned zerofill DEFAULT NULL,
  `resolved` int(255) unsigned zerofill DEFAULT NULL,
  PRIMARY KEY (`time_t`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for daily_data
-- ----------------------------
DROP TABLE IF EXISTS `daily_data`;
CREATE TABLE `daily_data` (
  `time_t` date NOT NULL,
  `new` int(255) unsigned zerofill DEFAULT NULL,
  `ongoing` int(255) unsigned zerofill DEFAULT NULL,
  `feedback` int(255) unsigned zerofill DEFAULT NULL,
  `delay` int(255) unsigned zerofill DEFAULT NULL,
  `reopen` int(255) unsigned zerofill DEFAULT NULL,
  `block` int(255) unsigned zerofill DEFAULT NULL,
  `resolved` int(255) unsigned zerofill DEFAULT NULL,
  PRIMARY KEY (`time_t`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;

-- ----------------------------
-- Table structure for git_msg
-- ----------------------------
DROP TABLE IF EXISTS `git_msg`;
CREATE TABLE `git_msg` (
  `time_t` date NOT NULL,
  `git_num` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`time_t`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

准备好之后

附代码吧,你可以根据你的情况进行改动(由于此为改版,存在多余的操作,还望大家不要指责,后面会进行完善的)

# -*- coding:UTF-8 -*-
import xlwt
from datetime import datetime
from redminelib import Redmine
import pymysql

file_user = 'user.txt'  # 参与人员名单
file_module = 'module.txt'  # 功能模块列表
file_curren = 'curren.txt'  # 每日进度和git数据
file_report = 'dailyreport.xls'   # 报表生成位置
time_list = ['2019-11-25', '2020-04-1
### 如何统计软件开发项目中每个月的工作量 #### 方法概述 为了有效统计软件开发项目中的月度工作量,建议采用综合的方法来衡量项目的进展和投入。这种方法应考虑多个维度的数据收集方式,包括但不限于代码行数、功能点分析以及团队成员的时间记录。 #### 功能点分析法 功能点是一种基于客户需求定义的标准单位,用于评估软件系统的规模大小。此方法的优点在于它不仅关注最终产品本身,还涵盖了整个开发生命周期内的活动,因此非常适合于跟踪进度并预测未来需求[^1]。具体来说: - **分配权重**:根据不同复杂程度给各个部分赋予相应的分值; - **汇总得分**:累加各单项评分获得总分数作为当期目标; #### 时间追踪机制 除了定量指标外,定性的因素同样不可忽视。建立一套完善的时间管理流程可以帮助更精准地掌握实际情况。这通常涉及以下几个方面: - **每日签到打卡**:确保每位参与者都能按时上下班,并如实汇报当天的任务安排; - **周报/日报制度**:定期提交个人工作总结报告,描述已完成事项及遇到的问题; - **工时表单填写**:针对每项任务单独设立耗时字段,便于后续核算成本效益比率; #### 工具推荐 市场上有许多成熟的解决方案可供选择,它们往往集成了上述提到的各项特性于一体,极大地方便了管理者进行统筹规划。以下是几款值得尝试的产品列表: - **Jira Software** - 支持敏捷框架下的迭代计划编制与执行监控; - **Trello** - 提供直观易懂的操作界面,适合小型创业公司快速上手; - **Redmine** - 开源平台具备强大的自定义能力,满足特定行业场景下特殊要求; ```bash # 安装 Redmine 的命令 (以 Ubuntu 系统为例) sudo apt-get update && sudo apt-get install redmine ``` 对于那些希望构建专属内部使用的系统而言,则可能需要借助编程语言如 Python实现自动化报表生成功能。下面给出一段简单的脚本示例,用作参考学习之用: ```python import pandas as pd def generate_monthly_report(dataframe, month): filtered_df = dataframe[dataframe['date'].dt.month == int(month)] total_hours = filtered_df.groupby('developer')['hours_spent'].sum() return f"Monthly Workload Report ({month}):\n{total_hours}" # 假设有一个包含日期(date), 开发者(developer) 和 花费时间(hours_spent) 列的数据框 df print(generate_monthly_report(df, '8')) ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值